Entendemos que complexidade é custo. Por isso, deve ser combatida! Em tempos de transformação de negócios através de recursos digitais, é importante que identifiquemos os tipos comuns de complexidade que podemos encontrar e, eventualmente, evitar.
Podemos classificar as complexidades no desenvolvimento em três categorias:
- domínio – o problema de negócio que se está tentando resolver.
- solução técnica – conjunto de técnicas e tecnologias que se está querendo empregar para resolver o problema;
- legado – conjunto de processos ou recursos digitais já existentes e que, por alguma razão, serão preservados.
Das três categorias de custo complexidade que estamos indicando aqui, entendemos que apenas a relacionada ao domínio é bem entendida por pessoas que não sejam da área de tecnologia. Por isso, entendemos que [tweet]a única categoria de complexidade (ou custo) que o negócio entende e que está, naturalmente, disposto a pagar é a relacionada ao domínio.[/tweet]
Tanto os custos as complexidades relacionadas ao legado quanto as relacionadas as soluções técnicas são tidas como e não são bem vistas pelo negócio.
Como justificar complexida
Não há novo recurso digital sem 1) um problema a resolver e 2) emprego de alguma tecnologia. Também, raramente, haverá cenário em que o novo não precise se manter compatível (comunicando ou interfaceando) com algum recurso/processo legado. Logo, [tweet]as três categorias de custo – domínio, solução técnica e legado – estarão presentes, por mais que o negócio se sinta confortável apenas com a primeira.[/tweet]
A seleção dos complexidades custos acidentais que estaremos dispostos a assumir deve ter relação com o quanto elas conseguem mitigar os complexidades custos essenciais.
Outro aspecto importante é o trade-off entre o custo para desenvolver e para manter. Ou seja, quando optamos por uma estratégia que irá reduzir o custo de manutenção, aumentamos o custo de desenvolvimento. Quando optamos por uma estratégia que irá reduzir o custo de desenvolvimento, geralmente optamos por aumentar o custo de manutenção. [tweet]De forma empírica, geralmente é mais inteligente optar por reduzir o custo de manutenção para minimizar o custo total. Mas a resposta definitiva depende de cada caso.[/tweet]
CUSTO TOTAL = CUSTO PARA DESENVOLVER + CUSTO PARA MANTER
Qualquer custo associado a solução técnica precisa se mostrar eficiente e compatível com o custo que se está tentando minimizar.
São exemplos de custos de solução técnica compatíveis com a redução do custo de manutenção:
- Testes automatizados;
- Implementação de modelos arquitetônicos escaláveis;
- Documentação abrangente
Por outro lado, são exemplos de custos de solução técnica compatíveis com a redução de custos de desenvolvimento:
- Arquiteturas monolíticas
- Utilização apenas de tecnologias conhecidas pelo time
[tweet]A priorização exagerada por reduzir os custos de desenvolvimento é a origem das dívidas técnicas. No logo prazo, essa estratégia compromete a continuidade.[/tweet]
Concluindo
É sempre bom, quando falamos em complexidade em processos de desenvolvimento de recursos digitais, ter claro que estamos falando de custos (e vice-versa). Também é sempre importante tentarmos fazer uma categorização destes custos/complexidades para facilitar a comunicação entre áreas técnicas e não técnicas.
Finalmente, é importante que todos tenham clareza sobre o que é prioridade: reduzir os custos para o desenvolvimento ou para a manutenção (sem perder de vista as dívidas técnicas)