System Design: encurtador de URL parte 1

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • MyrinNew
    Senior Member
    • Feb 2024
    • 5175

    #1

    System Design: encurtador de URL parte 1

    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.




    More...
Working...