пятница, 20 января 2012 г.

Agile

Long text warning. Осторожно, много букв.

Давно хочу написать, что я разочаровался в agile-разработке. Ну я и раньше как-то всё это недолюбливал, но это было то ли из вредности, то ли из-за консерватизма, то ли ещё почему-то, но только сейчас я понял, почему именно я разочаровался.

Итак, перво-наперво, что такое аджайл? Это семейство неких методологий, позволяющих производить разработку программного обеспечения быстро, качественно, с минимальными рисками и полным удовлетворением клиента. Вот, к примеру, небезызвестный скрам - это аджайл, методология экстремального программирования - это тоже аджайл. Если подумать, то зачем это всё нужно? Чтоб заказчикам больше нравился разрабатываемый программный продукт, то есть чтоб они с большей охотой платили бабло фирме-разработчику. Достигается это несколькими различными способами.

Нельзя сказать, что аджайл это совсем плохо. В нём есть множество плюсов. Однако, минусов, которые проистекают из невозможности адаптировать эти методологии под отечественный бизнес, гораздо больше. Прежде всего, спринт. В самом спринте по сути нет ничего плохого. В начале спринта разработчики определяют количество задач, которые они будут делать в течение спринта, в конце они выдают готовый результат. Однако, реальность штука жестокая, и на самом деле происходит всё совсем не так. Клиент звонит и говорит:
- Добавьте мне тут кнопку на сайт!
А у нас только начался спринт. Что мы ему скажем?
- Через две недели мы на планировании спринта включим доработку по вашей кнопке в список работ, ещё через две недели будет готово.
- Добавить кнопку? Четыре недели???
Начинает казаться, что аджайл тут вовсе не agile. Таким образом, спринт получается как бы и не спринт, потому что менеджеры начинают подкладывать в спринт задач. Сам спринт укорачивается, мы вот укоротили до недели. До недели, это нормально вообще? То есть несколько часов в понедельник идёт некий процесс под названием "планирование нового спринта и демонстрация прошедшего спринта". Потом четыре с половиной дня идёт кодинг. В эти четыре дня от клиентов или из отдела качества поступают репорты об ошибках. Чтоб не ждать долго-долго нового понедельника, было решено ошибки принимать в спринт. Поэтому примерно половину времени "спринта" мы занимаемся тем, что исправляем задачи, мигрировавшие таким образом из прошлых спринтов и потому неучтённые, или (гораздо реже, но всё же бывает) появившиеся внезапно и протолкнутые менеджером в спринт как ошибки.

Ни один спринт не был завершён нами нормально и в срок, все были сорваны и задачи потом возвращались с ошибками.

Может быть, менеджеров эта ситуация устраивает. У них есть сроки, у них есть оценки сроков выполнения задач, таким образом, они могут планировать (или думают, что могут планировать) работы и называть клиентам какие-то сроки. В которые мы не укладываемся, либо укладываемся, но с большим количеством ошибок. А вся проблема в том, что это планирование основывается на оценках задач. К счастью, оценки задач дают разработчики, а не менеджеры, но менеджеры всё равно давят на разработчиков на планировании.
- Надо доработать скрипт загрузки пользователей и кадровых изменений из 1С.
- Ну... где-то день займёт.
- Там всего две строчки добавились!
- Если так, то час-полтора.
Позже выясняется, что "две строчки добавились" - это то, что сказали менеджеры заказчика нашим менеджерам, а на самом деле формат файла выгрузки поменялся с XML на XLS. В итоге происходит следующий диалог:
- Ты же говорил, что задача на час-полтора, а уже второй день над ней работаешь!
- Там полностью поменялся формат, я переписал загрузчик.
- Хорошо, но у нас есть задачи, которые мы обещали сделать к понедельнику, мы же не успеем их сделать.

Единственный, кто отстаивает свои оценки и более-менее в них укладывается - это я, но я устраиваю на планировании безобразные скандалы, и много ворчу после, видимо, это и служит основной причиной того, что если я сказал "два дня на перенос этого сюда", то меня послушают и в итоге запишут никак не меньше полутора рабочих дней.

Да и на самом деле оценка работ ещё и довольно оптимистичная. Обычно разработчик закладывает не так уж много времени на всякие непредвиденные обстоятельства, которые может встретить по ходу решения задачи. Причём если я говорю, что "я бы эту задачу сделал часа за четыре", я имею в виду, что это четыре часа работы, без перерывов на поболтать, поссать, поворчать и без учёта рисков. А если я сказал "четыре часа", то другие разработчики опасаются оценивать эти задачи больше, чем на 50% длиннее, чем я (чтоб не вызвать гнев менеджеров: "а почему ты оцениваешь задачу как вдвое большую по времени, чем оценивает Дима?"), но не у всех есть такой опыт работы, как у меня, тем более, что эти четыре часа я могу потратить на модификацию написанного мной же кода, а другим придётся сперва в нём разбираться. То есть оценки задач - это такой шаткий и неустойчивый фундамент, что очень опасно на него опираться в планировании сроков, тем более в составлении календарных планов по проектам на несколько месяцев вперёд. Правда, фиг знает, на что ещё опираться, больше не на что.

Помимо таких вот менеджерских заморочек, аджайл старается оптимизировать некоторые технические и социальные аспекты. Оптимизация социальных аспектов - это как раз большой плюс. Если у кого-то что-то не получается, он может попросить помощи, и может так оказаться, что кто-то из товарищей уже решал подобную проблему и может предложить решение. Надо обсуждать то, что человек делал, и как, способы решения, и всё-всё-всё. У нас с этим тоже есть проблемы, потому что у нас есть разработчики, которые предпочитают молча сидеть и что-то там своё пилить, даже если работают с кем-то над одним проектом параллельно. Хотя бы постоять у доски раз в день и рассказать друг другу, чем занимались и какие были трудности - тоже неплохо, но у нас это выродилось в какой-то странный обряд, в котором разработчики просто называют проекты и задачи, над которыми работали в течение дня. В целом, как мне кажется, адаптация некоторых методик, взятых из скрама, под суровые реалии русского бизнеса у нас прошла неудовлетворительно, и мы похожи на негров, которые маршируют с бамбуковыми ружьями, ожидая, что с неба свалятся какие-нибудь ништяки (пилоты иногда ошибались и сбрасывают на парашютах сундуки с ништяками на марширующих негров вместо своих военных баз. С тех прошло много лет, военные базы расформированы, а негры всё равно маршируют по привычке).

Самый последний момент, который я бы хотел отметить - это всё-таки то, что все эти методологии аджайл-разработки продаются. Это очередная сайентология, которая просит денег за то, чтоб научить правильно жить. Все эти тренинги, митинги, модные термины - это продаётся наравне с кришнаизмом, баптизмом, коучингом, нейролингвистическим программированием, пикапом, гербалайфом и прочими системами самозомбирования, которые предназначены для того, чтоб превращать конечных исполнителей в нейронную сеть, которую можно выжимать. Ну а научить этим методикам могут сертифицированные тренеры и коучеры, за деньги, разумеется. Вы можете собираться у доски каждый день и болтать 15 минут о сделанных задачах и о встреченных трудностях, но превратить это в настоящий канбан может только сертифицированный тренер за десять тыщ долларов.

Моё идеалистическое мнение заключается в том, что команда профессионалов, в которой я мечтаю работать, не нуждается в скрам-мастере, канбане и тимбилдинге, а должна быть способна самоорганизовываться для решения задач любой степени сложности, собираться на обсуждения самостоятельно в любое время, а не по будильнику, и принимать внутрикомандные технические и организационные решения самостоятельно, а не под давлением руководства. На вход подаётся достаточное количество кофе, печенья, интересных задач от адекватных клиентов, бухла, бумаги и маркеров для досок, а спустя некоторое время команда выдаёт качественные клёвые решения. Только успевай пепельницы менять и чашки мыть. Ещё обязательно должна быть симпатичная молодая блондинка (или несколько) для проведения ручного тестирования пользовательских интерфейсов.

Комментариев нет:

Отправить комментарий

Ублюдочный Гугл поломал форму комментариев. Извините.