Esta semana no trabalho, fiquei agilizado mais uma vez. Tendo estudado a metodologia ágil padrão, TDD, propriedade compartilhada e desenvolvimento ad hoc de nunca planejar nada além de algumas histórias de usuários em um pedaço de papel, mastigar verbalmente as rumores sobre as características técnicas de uma integração de terceiros ad nauseam sem nunca fazer nada real pensando ou devendo diligência e acoplando arquitetonicamente todo o código de produção ao primeiro teste que vem à cabeça de qualquer pessoa nos últimos meses, chegamos ao final de um ciclo de lançamento e observamos que o principal recurso visível externamente que estamos desenvolvendo é muito lento para uso, buggy, tornando-se labirintinamente complexo e completamente inflexível.
Durante esse processo, "picos" foram feitos, mas nunca documentados e nem um único projeto arquitetônico foi produzido (não havia FS, então que diabos, hein, se você não sabe o que está desenvolvendo, como planejar ou pesquisá-lo? ?) - o projeto passou de par para par, cada um dos quais apenas focou em uma única história de usuário de cada vez e, bem, o resultado foi inevitável.
Para resolver isso, saí do radar, fui (a temida) cascata, planejei, codifiquei e basicamente não troquei o par e tentei o máximo que pude trabalhar sozinho - com foco em arquitetura e especificações sólidas, em vez de testes de unidade que virá mais tarde quando tudo estiver definido. O código agora é muito melhor e é realmente totalmente utilizável, flexível e rápido. Certas pessoas parecem realmente se ressentir de mim por fazer isso e se esforçaram para sabotar meus esforços (possivelmente inconscientemente) porque isso vai contra o santo processo de agilidade.
Então, como você, como desenvolvedor, explica à equipe que não é "pouco ágil" planejar o trabalho deles, e como você encaixa o planejamento no processo ágil? (Não estou falando do IPM; estou falando de me sentar com um problema e esboçar um design de ponta a ponta que diz como um problema deve ser resolvido com detalhes suficientes para que qualquer pessoa que trabalhe no problema saiba o que arquitetura e padrões que eles devem usar e onde o novo código deve integrar-se ao código existente)