▲ Caso 02 · SaaS multiempresa em produção
Vender um sistema solar é um revezamento entre cinco áreas. O bastão cai na troca de mãos, sempre na fronteira, que é onde ninguém é dono. A arquitetura existe para que a passagem aconteça sem alguém lembrar de avisar.
pnpm workspaces e turborepo. Nove pacotes de módulo, mais um núcleo compartilhado e um pacote de tipos.tRPC 11 sobre Express 4. O tipo atravessa do servidor ao navegador sem geração de cliente nem schema duplicado.Drizzle ORM sobre MySQL, com migrações versionadas no repositório.wouter para rotas e recharts para os gráficos.Capacitor, consumindo a mesma API, com notificação por push.bcryptjs com custo 12 para senha, token assinado por jose, e entrada por Google OAuth como alternativa.vitest, rodando a cada alteração. Os testes de ponta a ponta chamam o roteador tRPC direto, sem subir servidor HTTP.Nove módulos com fronteira explícita, publicados como pacotes separados, compilando e subindo como uma aplicação só.
O que eu descartei: microsserviços. Numa operação deste tamanho eles trocariam um problema de organização de código por um problema de rede, com transação distribuída, versão de contrato e rastreamento entre serviços, tudo isso sem ninguém de plantão para cuidar.
A fronteira entre módulos existe no código e é cobrada pelo compilador. O custo operacional de uma aplicação distribuída, não.
A proposta aprovada dispara um evento, e quem escuta reage: o módulo de projeto cria o repasse, o financeiro monta o plano de pagamento. Projeto concluído aciona compras. Material disponível abre a ordem de serviço com as seis etapas. Obra concluída registra as garantias, e a nota fiscal assinada libera o pagamento.
O que eu descartei: chamada direta entre módulos. Ela funciona com três e vira um grafo impossível com nove, onde acrescentar um módulo novo obriga a editar os antigos.
Um módulo novo passa a escutar um evento que já existe, e nenhum dos outros oito é tocado.
A coluna que identifica a empresa dona do registro existe desde a primeira migração, e o filtro por empresa é conferido no CI em toda consulta nova. São seis papéis de acesso por empresa, do dono ao instalador.
O que eu descartei: deixar para depois. Fazer no começo custa uma coluna. Fazer depois significa reescrever toda consulta do sistema, e conviver com o risco de esquecer exatamente uma delas, que é a que vaza dado de um cliente para outro.
A visita técnica é preenchida no computador e no celular, em telas escritas separadamente. O campo é definido num arquivo único de origem, implementado nas duas telas, e um script confere as três pontas.
O que eu descartei: combinar com o time que todo mundo lembre de alterar os dois lados. Uma regra que depende de ninguém errar, todo dia, durante meses, não se sustenta.
Existe um arquivo que mapeia, campo a campo, qual é a fonte canônica do dado e quais cópias são permitidas.
Por quê: sem isso, dois lugares passam a responder a mesma pergunta com números diferentes, e não há como saber qual está certo. Num sistema que calcula comissão e fluxo de caixa, isso não é inconveniência.
Os testes de integração chamam o roteador tRPC diretamente, em processo, em vez de levantar a aplicação e bater em HTTP.
O que eu ganho: a suíte roda em cada alteração sem depender de porta livre, de tempo de inicialização ou de limpeza de processo pendurado. Teste que demora é teste que alguém desliga.

Sistema que o time não sabe usar não está implantado. Cada fluxo tem instrução escrita na linguagem de quem executa, e ela abre no celular no momento da dúvida.


Contagem feita no repositório em 22/09/2026.