System Design - O que é? Como construir um?

Renan PortoRenan Porto
2 min read

Um system design (“Design de sistemas“) é o processo de definir os elementos de um sistema, seus relacionamentos e interações, com objetivo final de atender requisitos especificados.

Utilizamos ele quando temos um problema (ex: queremos criar uma rede social), que dividimos em pequenas partes (ex: timeline; criação de contas; processamento de imagems;), e planejamos cada parte para que chegamos na solução do problema inicial. É importante destacar, que esse é um processo de alto nível, ou seja, estamos falando em planejar a arquitetura e os componentes, e não na criação do código.

Explicando para uma criança de 10 anos

Imagina que você esta no minecraft, e deseja construir uma casa: você deseja que tenha um quarto, uma cozinha, uma sala, e por que não um escorregador do quarto para o jardim?

Antes de começar a construir, é importante você se planejar, como irá construir e onde cada parte da casa. Você deve responder perguntas como:

  • Onde vai ficar o quarto? (Será que é melhor no alto ou embaixo?)

  • A cozinha precisa ficar perto de onde? (Talvez perto de uma área de jantar para facilitar?)

  • Como as pessoas vão entrar e sair da casa? (Precisa de portas e talvez uma rampa para o escorregador!)

  • Quantas pessoas vão morar na casa? (Se for muita gente, a casa precisa ser grande!)

  • O que não terá na casa? (banheiro ou lavanderia por exemplo)

Essa analogia serve para criar um design de um sistema, pois temos que responder perguntas como:

  • Onde o programa vai guardar todas as informações? (Banco de dados SQL? Qual? Por que?)

  • Como o programa vai conversar com as pessoas que o usam? (Interface web? Desktop? Terminal? Aplicativo Mobile?)

  • E se muita gente usar o programa ao mesmo tempo? (Pensar em escalabilidade)

  • E se algo der errado? (Algo vai dar errado! Como iremos saber que deu errado (logs)? Como iremos atuar (ter um plano)? )

  • Definir o escopo: o que iremos fazer? o que não iremos fazer? (É importante definir os limites: o que será feito, e principalmente o que NÃO será feito)

Em resumo, é sobre planejar e pensar com calma os cenários possíveis, qual a melhor forma de se fazer, para que a execução (criação da casa no minecraft ou do código para processamento de imagens) seja feita da melhor forma possível.

Próximos passos

Pretendo fazer uma série sobre esse assunto, passando pelos conceitos de design system, como:

  • Performance e escalabilidade

  • Disponibilidade

  • Monitoramento

Esse é o artigo base, para explicar primeiramente o conceito, e posteriormente, ir se aprofundando nos assuntos. Espero que tenha ficado claro o que é um design system e para que serve.

0
Subscribe to my newsletter

Read articles from Renan Porto directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Renan Porto
Renan Porto