Я попытаюсь проиллюстрировать некоторые аспекты, которые не были рассмотрены в других ответах и которые, IMO, важны.
Основная проблема заключается в следующем: некоторые разработчики в первую очередь мотивированы радостью взять на себя часть сложной работы, продумать дизайн, продумать потенциальные проблемы, а затем решить проблему по частям, с минимальным взаимодействием с другими, над расширенным период времени. Как правило, они выполняют работу с высоким качеством и своевременно; их работа ремонтопригодна и соответствует общей архитектуре.
Разработчикам такого типа может быть трудно адаптироваться к динамичной среде, и их отношение часто игнорируется как «нежелание меняться», возможно, связанное с эго или старомодностью.
Что часто игнорируется, так это то, что для решения сложных проблем нужно обрабатывать много информации, и что для этого может потребоваться много анализа, размышлений, попыток, набросков решения, выбрасывания его, попытки другого решения. Такая сложная проблема может потребовать от нескольких часов до нескольких недель целенаправленной работы, пока у вас не будет готового решения.
Один из подходов состоит в том, что разработчик берет спецификацию проблемы, идет в свою комнату и возвращается через две / три недели с решением. В любое время (когда это необходимо) разработчик может инициировать какое-либо взаимодействие с другими членами команды или с заинтересованными сторонами (задавать вопросы по конкретным вопросам), но большую часть работы выполняет разработчик, которому назначена задача.
Что происходит в гибком сценарии? Команда разбирает проблему на небольшие куски (пользовательские истории) после быстрого анализа (груминга). Надежда состоит в том, что пользовательские истории независимы друг от друга, но часто это не так: чтобы разбить сложную проблему на действительно независимые куски, вам потребуются знания, которые вы обычно получаете только после работы над ней в течение нескольких дней. Другими словами, если вы можете разбить сложную проблему на маленькие независимые части, это означает, что вы в основном уже решили ее и что у вас остается только усердная работа. Для проблемы, которая требует, скажем, трех недель работы, это, вероятно, будет иметь место в течение второй недели, а не после нескольких часов подготовки в самом начале спринта.
Таким образом, после планирования спринта команда работает над разными частями проблемы, которые, вероятно, зависят друг от друга. Это порождает много коммуникационных издержек, пытаясь интегрировать разные решения, которые могут быть одинаково хорошими, но, в общем-то, отличными друг от друга. По сути, работа методом проб и ошибок распределяется по всем вовлеченным членам команды с дополнительными накладными расходами на связь (увеличиваясь в квадрате). Я думаю, что некоторые из этих проблем очень хорошо проиллюстрированы в этой статье Пола Грэма, в частности, пункт 7.
Конечно, разделение работы между членами команды снижает риск, связанный с уходом одного члена команды из проекта. С другой стороны, знания о коде могут передаваться другими способами, например, с помощью анализа кода или технических презентаций для коллег. В этом отношении я не думаю, что существует серебряная пуля, действительная для всех ситуаций: владение общим кодом и парное программирование - не единственная возможность.
Кроме того, «предоставление рабочих функций в более короткие промежутки времени» приводит к прерыванию рабочего процесса. Это может быть нормально, если функциональность «добавить кнопку отмены на странице входа в систему», которая может быть завершена к концу спринта, но когда вы работаете над сложной задачей, вы не хотите таких прерываний: это как пытаясь проехать 100 км как можно быстрее и останавливаясь каждые 5 минут, чтобы проверить, как далеко вы продвинулись. Это только замедлит тебя.
Конечно, частые контрольные точки предназначены для того, чтобы сделать проект более предсказуемым, но в некоторых случаях прерывание может быть очень неприятным: едва можно набрать скорость, когда уже пора остановиться и представить что-то.
Поэтому я не думаю, что отношение, описанное в этом вопросе, связано только с эго или сопротивлением переменам. Возможно также, что некоторые разработчики считают описанный выше подход к решению проблем более эффективным, поскольку он позволяет им лучше понимать проблемы, которые они решают, и код, который они пишут. Принуждение таких разработчиков к работе по-другому может привести к снижению их производительности.
Кроме того, я не думаю, что когда некоторые члены команды работают изолированно над конкретными, трудными проблемами, это противоречит гибким ценностям. В конце концов, команды должны быть самоорганизующимися и использовать процесс, который они считают наиболее эффективным за эти годы.
Просто мои 2 цента.
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.
Вы не будете проворны, пока не поймете, почему вы это делаете.