É possível ter software funcionando, atendendo plenamente as demandas do negócio, mas extremamente mal implementado. Com o tempo, se nada for feito para resolver esses problemas de implementação, esse tipo de software fica cada vez mais caro de manter até, eventualmente, se tornar inviável.
O maior problema de software mal feito, porém funcional, é que ele é uma ameaça silenciosa para o negócio. As “dores” decorrentes não são sentidas de uma única vez, mas ao longo do tempo, em “quedas” inesperadas, vazamentos de dados, além de outras instabilidades.
A má implementação de software ocorre, geralmente, em decorrência de deficiências de qualificação do time ou pela necessidade de cumprir, rotineiramente, prazos de entrega mais curtos que o ideal. A má implementação pode ser entendida como o acúmulo de “dívidas técnicas” ao longo do tempo.
Veja também
- Somos “amadores remunerados”?
- Transformação digital fica mais difícil quando remuneramos o amadorismo
Uma dívida técnica, em analogia com uma dívida financeira, quando adquirida, costuma trazer algum tipo de alívio imediato, geralmente viabilizando o cumprimento de acordos. Entretanto, ainda como uma dívida financeira, acaba se convertendo em problema em decorrência, principalmente, dos “juros” associados.
Os “juros” das dívidas técnicas são percebidos fora das áreas técnicas pelo aumento consistente dos custos de desenvolvimento para novas features. Ou seja, com o tempo, os prazos necessários para implementar algo novo vão ficando maiores com impacto marcante no velocity. Outro impacto percebido fora das áreas técnicas é o aumento na incidência de bugs que, para serem corrigidos, acabam também impactando negativamente no velocity.
[tweet]Eventualmente, os “juros” de dívidas técnicas antigas começam a forçar com que novas dívidas sejam formadas.[/tweet] Isso acontece, novamente, pela necessidade de cumprir prazos inviáveis ou pela incapacidade técnica do time de lidar adequadamente com o código ruim.
Em um determinado momento, em cenários extremos mas não raros, a capacidade de pagar dívidas técnicas do time se torna menor do que a necessidade recorrente de adquirir novas dívidas. Nesse momento, um software, mesmo atendendo plenamente as demandas do negócio até aquele ponto, converte-se em “legado”.
A mitigação dos problemas das dívidas técnicas tem duas soluções aparentes: 1) capacitação dos times técnicos e 2) adoção de um modelo de trabalho “puxado” e não “empurrado”, como o proposto pela maioria das metodologias ágeis. Em cenários onde dívidas técnicas sejam realmente necessárias (acredite, esses cenários existem), é importante que, junto com a dívida, seja elaborado um plano para “pagamento”.
Faço parte de uma equipe de desenvolvimento que está migrando um grande sistema para um cliente. O sistema é antigo, desenvolvido com programação estruturada e sendo migrado para .Net Core levando todos os problemas que existem no legado, sem testes, sem um bom levantamento de requisitos e com prazos apertados estimados no chute.
Quais argumentos que um desenvolvedor pode utilizar para convencer a área estratégica que este não é o melhor caminho, que o barato/rápido de hoje vai sair caro amanhã?
Respondi com um post. 🙂
https://eximia.co/pt/2019/11/19/por-que-arrumar-o-software-quase-nunca-e-prioridade/