HE:labs

Postado por André Cytryn em 11/01/2013

'Decide as late as possible' - Por que adiar decisões em projetos de desenvolvimento ágil

O conceito de "Decide as late as possible" faz parte de um dos princípios "Lean" e consiste em prorrogar decisões até o momento em que elas são realmente necessárias.

Mas quanto antes eu tomar minhas decisões melhor, não?

Salvo algumas exceções durante minha carreira como desenvolvedor, eu responderia que não. Como já diria Eric Ries: "Startups are designed to confront situations of extreme uncertainty". Isso nos diz que uma startup está sujeita a mudanças a cada ciclo de aprendizado e tomar decisões precoces que engessam uma solução podem ser vitais para sua empresa. Ao invés disso, devemos criar soluções flexíveis para que possamos mudar posteriormente caso necessário. E acredite em mim, será necessário. Quanto mais você evitar uma decisão até o momento que ela for realmente necessária, mais informações você terá para poder embasar essa escolha.

Muitos defendem que o nome do princípio deveria ser "Decide as late as responsibly possible", pois podemos evitar tomar uma decisão até certo ponto. A partir daí começamos a ter perdas mas não significa que uma decisão não possa mais ser tomada, e sim que quanto mais tempo passar, maiores elas serão. Por isso pensar e planejar ao longo do caminho é importante, mas não bata o martelo tão cedo.

Esse é um conceito que você pode usar no seu dia a dia, em suas decisões pessoais. No entanto, gostaria de mostrar como isso se adapta ao modelo de desenvolvimento ágil.

Em um projeto de software agile o ideal é que tenhamos iterações pequenas, para que possamos coletar mais informações e assim poder priorizar melhor as atividades da próxima iteração, afinal devemos lembrar que estamos confrontando uma situação de extrema incerteza onde detalhes podem mudar a qualquer instante.

O que acontece se você tomar decisões muito cedo?

  • Você pode perder um aspecto fundamental do problema, porque você está focado nos detalhes cedo demais.

  • Você pode complicar mais a situação, tentando olhar para todos os aspectos conhecidos do problema.

  • Você pode gastar muita energia desnecessária para tentar resolver um problema antes de saber a real extensão do problema, ou mesmo de explorar soluções alternativas.

O que acontece se eu adiar as decisões?

  • Você pode vir com a solução mais simples para atender a sua necessidade atual, com um código que seja extensível e refatorável, evitando adição de features "just-in-case".

  • Você tem tempo para explorar outras soluções alternativas a um nível elevado e tomar a decisões com mais e/ou melhores informações.

  • Você pode mitigar os riscos por não tomar uma decisão errada muito cedo.

Por fim, decisões menores, se forem tomadas muito cedo, apesar de serem ineficientes, não representam grandes problemas pois podem ser alteradas com menor esforço. Decisões com um alto custo/risco são as que devemos prolongar, com o cuidado de não deixar passar do "last responsible moment".

Comentários
Included file post/disqus_thread.html not found in _includes directory