Dívida Técnica
Dívida Ténica¶
Identificar a dívida técnica envolve observar as áreas de estratégia, arquitetura, talento e processos, buscando sinais de que há algo impactando a eficiência do desenvolvimento e a qualidade dos sistemas.
Uma boa maneira de entender a dívida técnica é pensar que ela tem os mesmos dois componentes da dívida financeira:
- O principal é todo o trabalho que deve ser feito para modernizar toda a pilha de tecnologia.
- Manutenção ou atualizações da camada de aplicativo, modificações para cumprir com os padrões de dados e software.
- O interesse é o imposto de complexidade que todo projeto.
- Integrações de dados, harmonizar dados não padronizados e criar soluções alternativas para enfrentar riscos e atender às necessidades de negócios.
Estratégia¶
Quando a estratégia corporativa não está bem conectada com a TI, ou quando há incompatibilidade de recursos entre o time e a estratégia da empresa, isso indica uma dívida técnica crescente. Se os recursos não estão sendo distribuídos de forma adequada ao portfólio de projetos, você pode ter projetos prioritários com baixa qualidade técnica, aumentando a dívida.
- Definir os recursos necessários a nível corporativo e capacitar o time;
- Ausência de alinhamento de TI e a estratégia corporativa;
- Incompatibilidade entre recurso e estratégia, com alocação de recursos fora de sincronia com a gestão do portfólio;
- Integração de tecnologia insuficiente durante fusões e aquisições, levando a complexidade indevida, sistemas perdidos, conjuntos de dados fragmentados;
- Complexidade excessiva em produtos, processos (com pouca ou nenhuma padronização) ou aplicativos (com vários aplicativos atendendo ao mesmo propósito);
Arquitetura¶
- Sistemas legados que exigem manutenção constante e não se adaptam facilmente às novas demandas representam uma dívida técnica significativa;
- A desatualização de ambientes de aplicação e infraestruturas mal dimensionadas são sinais de que a arquitetura precisa de ajustes;
- Software altamente personalizados;
- Blocos monolíticos de código com interfaces ruins que limitam a reutilização e regras de negócios incorporadas que são difíceis de modificar;
- Sistemas grandes e difíceis de modificar devido à falta de modularidade podem aumentar os custos a longo prazo;
- Infraestrutura insuficiente para lidar com picos;
- Abordagens insuficientes de integração de sistemas, resultando em uma proliferação de integração ponto a ponto entre aplicativos;
Talento¶
- Quando as equipes não têm as habilidades necessárias para lidar com as tecnologias atuais, isso cria gargalos no desenvolvimento e também aumenta a dívida;
- Se as equipes estão sempre focadas em entregar soluções imediatas sem olhar para a redução da dívida técnica, isso pode resultar em mais dívidas;
Processo¶
- Má priorização de pendências de projetos;
- A falta de uma boa gestão de prioridades pode resultar em recursos mal alocados, piorando a dívida técnica;
- Gestão baixa dos processos de desenvolvimento e manutenção, com medição pouco frequente da qualidade do código;
- Implantação excessivamente dependente da contribuição do desenvolvedor e testes manuais demorados;
- Operações de TI instáveis,
- Instrumentalização mínima,
- Pontos cegos significativos,
- Recuperação de desastres baixa e vários complementos que se desviam da intenção original de um sistema,
- Documentação inadequada
Possíveis Resoluções da Dívida Técnica¶
Gestão Estratégica¶
- A dívida não deve ser vista como um problema técnico isolado, mas sim como uma questão de negócios que afeta a agilidade, inovação e escalabilidade da empresa;
- Avaliar a "saúde" dos aplicativos existentes e categorizá-los em comprar, manter ou vender é uma maneira prática de reduzir a complexidade técnica.
- Aplicativos que não são mais rentáveis ou não têm futuro podem ser descontinuados, liberando recursos para focar nos que têm maior potencial.
- Revise periodicamente os progressos, os custos envolvidos e os impactos no negócio;
Alocação de Recursos¶
- Reduzir a dívida técnica exige investimentos contínuos. Isso pode ser feito dedicando parte dos recursos de desenvolvimento para tratar questões de legado, melhorar a arquitetura ou capacitar o time;
- Em vez de tentar resolver tudo de uma vez (big-bang), o ideal é aplicar melhorias contínuas.
- Uma abordagem de incrementos pequenos e consistentes ajuda a evitar que o processo se torne ingovernável.
Ajustes na Arquitetura¶
- Investir em arquitetura de microserviços ou modularizar sistemas legados pode facilitar as atualizações e manutenções futuras;
- Mudar de uma abordagem ponto a ponto para algo mais robusto, como APIs e serviços bem definidos, pode reduzir a complexidade e os riscos de falhas;
- Investa em escalabilidade, garantindo que a infraestrutura tenha a capacidade de escalar de acordo com a demanda.
Capacitação de Talentos¶
- Oferecer treinamentos contínuos e contratar pessoas com habilidades específicas nas tecnologias que a empresa utiliza.
- Equipes específicas para trabalhar na redução da dívida, com a tarefa de garantir que o código esteja bem estruturado e que as melhorias sejam feitas ao longo do tempo;
Melhorias nos Processos¶
- Manutenção Evolutiva e Corretiva devem ser tratadas com a mesma urgência que o desenvolvimento de novos recursos.
- Investa em integração contínua, deploy contínuo e testes automatizados reduz a dependência de processos manuais e diminui a probabilidade de erro humano;
- Um código bem documentado tem menos chances de criar dívida;
Recuperação de Desastres¶
- Implantar uma estratégia de backup e recuperação robusta que cubra toda a infraestrutura, garantindo que a empresa tenha planos de contingência rápidos e eficazes para quando houver falhas;