Continuando a série que eu registro meus estudos de system design, hoje vou planejar como eu criaria um encurtador de URL em 45 min (não codar, planejar como faria) e comparar minha resposta com o livro. Eu já planejei sistemas bem mais complexos, porém, nunca em tão pouco tempo.

O escopo que eu tenho neste momento é nenhum quase hahaah o exercício só pede para criar um encurtador. Então, eu vou usar a ajuda da internet, já que não tenho um entrevistador.

Contador rolando, 45 minutos setados, vou começar!

Entendimento de requisitos

Como não tenho alguém para me entrevistar, vou tentar pedir ajuda do Perplexity porque, na internet, só tem respostas prontas e não é essa a minha ideia.

Minha primeira dificuldade foi que eu definitivamente não estou acostumada a fazer perguntas de pronto e fiquei pensando o que escreveria. Só nisso eu perdi 8 minutos hahah

Para vocês acompanharem a "entrevista", segue o prompt que eu escrevi:

Olá, boa noite! Pode me ajudar a estudar system design? Eu
 preciso que você se comporte como o entrevistador que me
 pediu para desenvolver um encurtador de url.
A ordem das etapas desse teste de system design será a
 seguinte:

> Requisitos 
> Design de interface
> Estimativa da escala do sistema
> Modelo de dados
> 5-6 blocos de design alto nível
> 2-3 componentes com detalhes
> Identificar possíveis gargalos

Neste primeiro momento, eu vou validar com você algumas
 perguntas sobre os requistos, ai você me responde como se
 fosse o entrevistador, sem me entregar a resposta
 completa, apenas respondendo o suficiente para eu colher
 insumos apenas para essa primeira etapa de entendimento
 de requisitos, tudo bem? 
Farei outras perguntas também, conforme a sequencia de
 etapas que te passei.
Se puder, poderia também me dar um feedback se as minhas
 perguntas foram boas? 
Mas preciso que seja bem pragmático e que exija de mim
 como um desenvolvedor senior, e que traga os pontos que
 poderia melhorar, sem adiantar etapas de perguntas.

Por exemplo, se estou na etapa de levantamento
de requisitos, trazer feedback que preciso pensar em
complexidade de desenvolvimento poderia ser algo para a
etapa seguinte, de escalabilidade do sistema.

Minhas perguntas para a etapa de requisitos:
- Esse encurtador de URL deve gerar URLs que o usuário
 pode customizar tipo bit.ly/customizar-url ou vai apenas
 encurtar, tipo bit.ly/ss7g9dv ?
- O serviço deve fornecer analytics dos clicks na URL?

A resposta que eu recebi do Perplexity e poxa, eu realmente fiquei surpresa como é legal para praticar com ajuda, na ausência de alguém para treinar comigo. Vou chama-lo de "entrevistador" no resto do texto:

O Entrevistador:

Customização de URLs
Resposta: Essa é uma pergunta muito relevante.
É importante entender as expectativas do usuário em 
relação à personalização. Pergunte-se: qual é o valor que
 a personalização traz para os usuários? Isso pode
 influenciar a adoção do serviço e sua diferenciação no
 mercado.

Analytics dos Clicks
Resposta: Essa questão é crucial, pois a análise de dados
 pode ser um dos principais atrativos do seu serviço.
 Considere quais métricas seriam mais valiosas para os
 usuários e como você planeja apresentar essas
 informações. Além disso, pense em como isso afetará a
 arquitetura do sistema e o armazenamento de dados.

Feedback sobre suas perguntas
Clareza e Direcionamento: Suas perguntas são claras e
 diretas, abordando aspectos fundamentais do sistema. Isso
 é positivo, pois demonstra que você está focando nas
 funcionalidades essenciais.

Exploração de Funcionalidades: Considere expandir suas
 perguntas para incluir aspectos como segurança (por
 exemplo, proteção contra spam), integração com outras
 plataformas ou serviços, e limites de uso (quantidade de
 URLs encurtadas por usuário).

Complexidade de Desenvolvimento: Lembre-se de que cada
 funcionalidade adicional pode aumentar a complexidade do
 desenvolvimento. Pense em como cada requisito pode
 impactar a escalabilidade e a manutenção do sistema.

E até aqui eu já senti que, mesmo o "entrevistador" pegando super leve, que eu preciso treinar mais esse aspecto de pensar no produto como um todo logo no começo. Como eu trabalhei numa area de arquitetura voltada para plataforma, eu acabei acostumando a pensar mais em sistema do que em cliente, porque era com quem eu lidava, com uma plataforma e os nossos "clientes" eram outros desenvolvedores.

Outro ponto é que embora eu crie produtos pra usuários e pense sim em quem vai usar, eu tenho PM, Designer, UX e mais uma galera junto trazendo respostas. Eu já fiz uma entrevista de System Design, que inclusive eu passei na vaga, mas senti que não desempenhei o melhor que poderia e que, se eu fosse exposta aquela atuação diariamente, eu teria dificuldades pelo escopo que estou "acostumada".

Portanto, mais um reforço pra você também dar uma chance ao estudo e prática de system design interview

Pra não me alongar muito, eu segui fazendo as perguntas para o meu "entrevistador" e no próximo texto (até pra não ficar muito longo, que esse não é o objetivo desse formato diário) eu trago o resultado mas, era muito importante mostrar o método - pelo menos eu acho - que estou usando para praticar.

Curiosidade: só esse processo da primeira parte foi embora 10 min (pra ser justa, a parte do prompt eu pausei o tempo porque numa situação real eu não precisaria fazer isso) e, para uma entrevista de System Design, levar 10 min só pra levantar requisitos, é um tempo bem longo, pensando que sobraria só 30 min para todas as outras etapas - inclusive, aprofundar nos componentes mais importantes, ou seja, não daria tempo.

Author Of article : Jessilyneh Read full article