Gall's law
expressãoprogramaçãocultura de operações
Um sistema complexo que funciona invariavelmente evoluiu de um sistema simples que funcionava.
John Gall a escreveu em Systemantics (1975), com o inverso mais afiado: um sistema complexo projetado do zero nunca funciona e não pode ser remendado até funcionar; é preciso recomeçar de um sistema simples que funcione. É a espinha teórica da entrega iterativa, dos MVPs e do padrão strangler-fig para reescritas. Redesenhos big-bang fracassam no prazo previsto; Gall explicou o porquê com antecedência.
Um sistema complexo que funciona invariavelmente evoluiu de um sistema simples que funcionava. O corolário de John Gall é a metade mais afiada: um sistema complexo projetado do zero nunca funciona e não pode ser remendado até funcionar, então é preciso recomeçar a partir de um sistema simples que funcione.
A afirmação é mais forte que a maioria dos conselhos de projeto e se sustenta notavelmente bem. A internet cresceu da ARPANET, a web de uma ferramenta de compartilhamento de documentos, o Unix de um sistema pequeno para uma máquina sobrando. As grandes reescritas unificadas que eram corretas desde o início são lembradas sobretudo como caros contos de advertência, porque um sistema que ninguém rodou não pode ter descoberto o que de fato precisa tratar.
A leitura prática não é evitar a ambição, e sim sequenciá-la. Construa algo pequeno que funcione de ponta a ponta de verdade, coloque-o diante de condições reais, e faça-o crescer em resposta ao que aprender. É também o argumento contra a reescrita de uma tacada só, já que substituir um sistema complexo que funciona por outro complexo pula justamente a etapa em que todas as complicações necessárias foram descobertas, e redescobri-las em produção é como a substituição fracassa.