Я спробую проілюструвати деякі аспекти, на які не було звернено уваги інших відповідей, і які, 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.
Ти не робиш спритного, поки не зрозумієш, чому ти це робиш.