Skip to content

Como Pensamos na Solução

Para resolver o desafio de atender 100 milhões de pessoas em 26 estados com um sistema de saúde crítico, não podemos apenas "escrever código". Precisamos de uma estratégia clara de resolução de problemas baseada em hipóteses, testes e soluções escaláveis.

Abaixo, detalhamos como pensamos para resolver cada grande obstáculo.


1. O Problema da Escala Extrema (100M+ Usuários)

O Desafio: Como garantir que o sistema não saia do ar quando milhões de brasileiros acessarem simultaneamente?

Hipótese 1: Descentralização de Processamento

  • Ideia: Em vez de ter um servidor central gigante que faz tudo, o navegador do usuário (Front-End) assume o papel de orquestrador da experiência.
  • Solução: Usar a lógica de Domínios Isolados. Se o domínio de agendamento estiver sobrecarregado, o médico ainda consegue atender quem já está na sala, pois as peças não dependem uma da outra para carregar na memória.

Hipótese 2: Economia de Dados Regional

  • Ideia: Usuários em regiões com internet 3G instável não podem baixar 20MB de código para abrir uma tela simples.
  • Solução: Lazy Loading Extremo. O sistema é quebrado em milhares de pedacinhos. Se você é um paciente e só quer ver o horário da consulta, você baixa 1% do código do sistema. Os outros 99% ficam no servidor até serem realmente necessários.

2. O Problema da Segurança e Erros Médicos

O Desafio: Como impedir que o erro humano (ou do desenvolvedor) cause uma falha grave no atendimento?

Hipótese 3: O software como um "Trilho de Trem"

  • Ideia: Se transformarmos o atendimento em um fluxo rígido onde é impossível pular etapas, eliminamos o erro por esquecimento.
  • Solução: Máquinas de Estado (XState). O botão de "Finalizar" simplesmente não existe no código enquanto o "Diagnóstico" não for validado. Não é apenas um botão cinza; o sistema fisicamente não conhece o caminho para o estado "Finalizado" sem passar pelo "Diagnóstico".

Hipótese 4: Isolamento de Falhas (Bulkheading)

  • Ideia: Se o chat travar, ele não deve "contaminar" o prontuário.
  • Solução: Arquitetura de Micro-Módulos. Cada funcionalidade roda em seu próprio "aquário". Um erro de programação no chat fica preso dentro do módulo de chat, permitindo que o restante da tela continue funcional e segura.

3. O Problema da Evolução Contínua

O Desafio: Como adicionar novas funções (ex: Agendamento, Vacinação, Farmácia) sem quebrar o que já funciona para 100 milhões de pessoas?

Hipótese 5: Comunicação Indireta

  • Ideia: Se o módulo A não sabe que o módulo B existe, ele não pode quebrá-lo.
  • Solução: Domain Events (Event-Driven). O módulo de Consulta apenas grita para o sistema: "ACABEI!". Ele não sabe quem está ouvindo. O módulo de Agendamento (para o retorno) ouve o grito e faz o seu trabalho. Se amanhã quisermos adicionar um módulo de "Estatísticas", basta ele começar a ouvir o mesmo grito. Ninguém precisa mexer no código da Consulta.

4. O Problema da Governança e Qualidade

O Desafio: Como manter 50 ou 100 desenvolvedores trabalhando no mesmo projeto sem virar uma bagunça?

Hipótese 6: Barreiras Automáticas

  • Ideia: O ser humano esquece regras; o computador não.
  • Solução: Boundaries de Arquitetura. Configuramos o sistema para que, se um desenvolvedor tentar conectar a "Farmácia" diretamente no "Prontuário" (pulando as regras de isolamento), o sistema de build falha na hora. A regra de arquitetura é imposta pelo código, não apenas por um documento.

Resumo da Nossa Mentalidade

Para cada problema, aplicamos o seguinte filtro:

  1. Isolar: Essa solução pode ser separada do resto?
  2. Validar: O sistema consegue garantir que essa regra foi seguida sem intervenção humana?
  3. Escalar: Essa ideia funciona para 1 pessoa e para 100 milhões da mesma forma?
  4. Simplificar: O usuário final (médico/paciente) percebe a complexidade ou para ele é natural?

Pensar na solução é, antes de tudo, prever onde o sistema pode falhar e construir defesas automáticas para cada uma dessas falhas.