A Segunda Lei de Lehman: Complexidade Crescente
“Complexidade Crescente — À medida que um programa de software evolui, sua complexidade interna tende a aumentar, a menos que seja feito um esforço constante para reduzi-la.”
O Desafio do Desenvolvimento de Software
O desenvolvimento de software pode ser comparado a uma banda de jazz, onde cada membro desempenha um papel único. O Negócio assume o papel do pianista, guiando a estrutura geral da música. Os Técnicos correspondem aos músicos que tocam diferentes instrumentos, trazendo suas habilidades técnicas e criativas para criar uma música harmoniosa. Trabalhando em conjunto, todos precisam buscar o equilíbrio, estando afinados no mesmo tom, mesmo ritmo e com cuidado para não se perder nos improvisos.
Nesse contexto, emerge a Segunda Lei de Lehman: “À medida que um programa de software evolui, sua complexidade interna tende a aumentar, a menos que seja feito um esforço constante para reduzi-la.” Essa lei nos alerta para um problema recorrente: a complexidade crescente que acompanha o desenvolvimento do software.
A Metáfora da Complexidade
Imagine o software como um intricado castelo de cartas, onde cada nova funcionalidade adicionada corresponde a uma carta colocada cuidadosamente. No entanto, assim como em um castelo de cartas, se não houver um esforço consciente para manter o equilíbrio, o castelo ruirá. Cada nova carta adicionada aumenta a complexidade interna do software, tornando-o mais difícil de sustentar e evoluir.
A Batalha pelo Equilíbrio
No calor da batalha, o Negócio pressiona o time de Técnicos para entregar cada vez mais funcionalidades em prazos cada vez menores. Enquanto isso, os Técnicos enfrentam o desafio de equilibrar as demandas do Negócio com a necessidade de manter a qualidade, a manutenibilidade e a performance do software. É um conflito inerente, uma luta entre o desejo de evoluir e a necessidade de controlar a complexidade.
Um aliado valioso nessa jornada é o time de Arquitetura de Soluções. Recomenda-se envolver esse time desde o início do processo, pois sua visão holística e perspectiva cross podem contribuir para encontrar o equilíbrio necessário entre as necessidades do Negócio e os desafios técnicos. Ao trabalharem juntos como um time único, Negócio, Técnicos e Arquitetura de Soluções podem superar o conflito e buscar soluções sustentáveis.
Uma Jornada Coletiva
Encontrar o equilíbrio é um esforço coletivo, no qual tanto o Negócio quanto os Técnicos, com o apoio da Arquitetura de Soluções, devem estar comprometidos. Os Técnicos precisam reconhecer a importância de investir tempo na redução da complexidade, para garantir que o software permaneça viável a longo prazo. Por sua vez, o Negócio precisa compreender que a busca incessante por novas funcionalidades sem considerar a complexidade pode resultar em um produto cada vez mais difícil de manter e evoluir.
A união dessas forças trará benefícios significativos. Um software que se mantém equilibrado e com uma complexidade controlada é mais fácil de manter, desenvolver e evoluir. A produtividade aumenta, os novos desenvolvimentos são mais ágeis e a qualidade do produto é aprimorada. Além disso, o custo de desenvolvimento e manutenção diminui, o controle é restabelecido e o onboarding de novos desenvolvedores torna-se mais eficiente.
Um Time Único Rumo ao Sucesso
Não há espaço para uma batalha contínua entre Negócio e Técnicos. Em vez disso, é essencial que essas partes se unam como um time único, com objetivos comuns e um compromisso compartilhado de construir um produto de sucesso. Juntos, eles podem superar o desafio da complexidade, encontrar o equilíbrio necessário e impulsionar o crescimento e a inovação.
Em vez de serem adversários, Negócio e Técnicos devem se enxergar como aliados estratégicos, trabalhando em sinergia para alcançar resultados excepcionais. Quando o Negócio compreende as implicações da complexidade e os Técnicos reconhecem as necessidades do Negócio, surge uma nova dinâmica que promove o sucesso do produto.
Ao abraçar essa missão conjunta, Negócio, Técnicos e Arquitetura de Soluções podem transformar o desafio em oportunidade e criar um futuro promissor para o desenvolvimento de software, equilibrando a evolução com a redução da complexidade.