Tentarei ilustrar alguns aspectos que não foram abordados por outras respostas e que, na IMO, são importantes.
A questão básica é a seguinte: alguns desenvolvedores são motivados principalmente pela alegria de realizar um trabalho difícil, pensando em um design, pensando em possíveis problemas e, em seguida, resolvendo o problema, peça por peça, com apenas uma interação mínima com os outros, por um longo período. período de tempo. Eles geralmente concluem o trabalho com um alto nível de qualidade e em tempo hábil; seu trabalho é sustentável e se ajusta à arquitetura geral.
Esse tipo de desenvolvedor pode achar difícil se adaptar a um ambiente ágil e sua atitude é frequentemente descartada como "falta de vontade de mudar", possivelmente relacionada ao ego ou a ser antiquado.
O que geralmente é ignorado é que, para resolver problemas complexos, é preciso lidar com muita informação, e isso pode exigir muita análise, pensar, tentar, esboçar uma solução, jogá-la fora, tentar outra. Um problema tão complexo pode exigir de algumas horas a algumas semanas de trabalho focado até que você tenha uma solução pronta.
Uma abordagem é que um desenvolvedor pega a especificação do problema, vai para o quarto dela e volta duas / três semanas depois com uma solução. A qualquer momento (quando necessário), o desenvolvedor pode iniciar alguma interação com outros membros da equipe ou com as partes interessadas (fazendo perguntas sobre questões específicas), mas a maior parte do trabalho é realizada pelo desenvolvedor ao qual foi atribuída a tarefa.
O que acontece em um cenário ágil? A equipe divide o problema em pequenos pedaços (histórias de usuários) após uma análise rápida (limpeza). A esperança é que as histórias de usuários sejam independentes umas das outras, mas geralmente não é o caso: para dividir um problema complexo em partes realmente independentes, você precisará de um conhecimento que normalmente só obtém depois de trabalhar nela por vários dias. Em outras palavras, se você é capaz de dividir um problema complexo em pequenas partes independentes, significa que já o resolveu basicamente e que só resta um trabalho de diligência. Para um problema que exige, digamos, três semanas de trabalho, provavelmente será o caso durante a segunda semana, não depois de algumas horas de limpeza feita no início do sprint.
Assim, depois que um sprint foi planejado, a equipe trabalha em diferentes partes de um problema que provavelmente dependem entre si. Isso gera muita sobrecarga de comunicação, tentando integrar soluções diferentes que podem ser igualmente boas, mas que são bem diferentes umas das outras. Basicamente, o trabalho de tentativa e erro é distribuído por todos os membros da equipe envolvidos, com uma sobrecarga de comunicação adicional (aumentando quadraticamente). Eu acho que alguns desses problemas são ilustrados muito bem neste artigo por Paul Graham, em particular no ponto 7.
Obviamente, compartilhar o trabalho entre os membros da equipe reduz o risco relacionado a um membro da equipe sair do projeto. Por outro lado, o conhecimento sobre o código pode ser comunicado de outras maneiras, por exemplo, usando revisões de código ou fazendo apresentações técnicas aos colegas. A esse respeito, não acho que exista um marcador de prata válido para todas as situações: a propriedade compartilhada do código e a programação em pares não são a única opção.
Além disso, a "entrega da funcionalidade de trabalho em intervalos mais curtos" resulta em uma interrupção do fluxo de trabalho. Isso pode ser bom se a parte da funcionalidade for "adicionar um botão de cancelamento na página de login" que pode ser concluída no final de um sprint, mas quando você estiver trabalhando em uma tarefa complexa, não deseja essas interrupções: é como tentando dirigir um carro 100 km o mais rápido possível e parando a cada 5 minutos para verificar até onde você chegou. Isso só vai te atrapalhar.
Obviamente, ter pontos de verificação frequentes visa tornar um projeto mais previsível, mas em alguns casos a interrupção pode ser muito frustrante: mal se pode ganhar velocidade, já que é hora de parar e apresentar algo.
Portanto, não acho que a atitude descrita na questão esteja relacionada apenas ao ego ou à resistência à mudança. Também pode ser que alguns desenvolvedores considerem a abordagem para a solução de problemas descrita acima mais eficaz, pois permite que eles tenham uma melhor compreensão dos problemas que estão solucionando e do código que estão escrevendo. Forçar esses desenvolvedores a trabalhar de uma maneira diferente pode resultar em redução de sua produtividade.
Além disso, não acho que ter alguns membros da equipe trabalhando isoladamente em problemas específicos e difíceis seja contra valores ágeis. Afinal, as equipes devem se auto-organizar e usar o processo que consideraram mais eficaz ao longo dos anos.
Apenas meus 2 centavos.
There’s a great story of a manager of a Coca-Cola plant whose numbers were far better than his peers. When asked what his “secret” was, he said simply that rather than take a best practice and modify it to meet what the plant did, he instead modified the plant to match the best practice.
Você não está agindo até entender por que está fazendo isso.