Первым делом, чтобы не забывать, пишу о том, что проект Партии Позитивных Пессимистов о покидающих Украину развивается полным ходом. Свои мнения и истории оставили уже много людей и эти истории активно публикуются. Может быть одна из этих историй станет последней каплей и для вас?
Кстати, моя история там тоже уже есть.
Ну и теперь, возвращаемся к Scrum’у.
1) Один из тезисов Scrum’а состоит в том, что все что нужно — это дать команде самоорганизовать и она станет максимально эффективной. Вот скажите мне, если нанять 10 забулдыг, которые компьютер в жизни не видели, будет ли какой-то эффект от их самоорганизации? Ok, а если дать возможность 10 junior’ам самоорганизоваться, то станут ли они от этого вдруг производить высококачественный код и хорошо разбираться в архитектуре?
Так, вот, то что быстро всплыло в комментариях к прошлой статье — это то, что SCRUM должен хорошо работать на идеальных людях. Да, если есть команда отличных профессионалов, с хорошим опытом, умных, добрых и честных и единственное, что им не давало работать гнетущий их подлец и мерзавец менеджер, то действительно, убрав менеджера и дав им самим организоваться вдруг станет все лучше. А с другой стороны, если они все такие добрые и умные, то думаю и большинство других методологий покажет себя неплохо.
То есть, возникает вопрос. Какова должна быть команда, чтобы эффективность от самоорганизации хорошо прыгнула вперед. Где собственно описание того, на какой команде наиболее эффективно работает SCRUM, вопрос того, как нанять такую команду или что делать с текущей командой, для того, чтобы сделать из нее такую, на которой все будет хорошо работать? Об всем это Scrum скромно молчит.
2) Продолжаю тему команды. Все члены команды считаются team member’ами. Разделения между Dev и QA не проводится. Как вы понимаете, это происходит только на бумаге. QA не может эффективно делать Dev работу, а Dev не может эффективно делать QA работу. Почему мне не слишком нравиться эту ситуация, когда на бумаге одно, а в реальности другое? В такой ситуации значит, что хотели сказать что-то другое, но говорить напрямую было бы неприлично и поэтому мысль замаскировали. Так вот, мысль которую я хотели сказать (да и в сказали таки в многих местах), что Dev + QA __коллективно__ ответственны за проект и не имеют право валить на кого-то другого вину за неправильное или плохое исполнение.
Честно говоря, я не супер большой любитель коллективной ответственности. Опять же, это продолжение пункта N1. Коллективная ответственность хорошо работает на умных, добрых и ответственных людях и она может дать ооочень
плохие результаты (гораздо хуже чем при waterfall management’е) при безответственных и злонамеренных людях.
3) В прошлой статье я написал пример о том, что проект который уже ведется тяжело переводить на Scrum. Я с него и продолжу.
Итак ситуация такова, есть продукт с плохим (или средним) кодом, у этого продукта нету никаких тестов (ни unit, ни ui и ничего другого). А также этот продукт уже активно используют заказчики достаточно часто находя в нем баги (скажем несколько за неделю). Эти баги менеджеры очень хотят пофиксить быстрее, так как заказчики капризные и могут и нафиг послать. Ситуация естественно типична не для все фирм, но для множества продуктовых фирм.
Тут есть две проблемы — одна как работать с багами (которую я опишу тут) и вторая, как выпускать новые версии, которую я опишу в следующем пункте.
С багами можно работать тремя методами
а) Мы таки их по ходу включаем в Sprint. Обычно это учитывают с помощью focus factor (мы называли overhead). В целом работать может неплохо, если багов немного. Как только багов становится много (например команда тратит 30-60% от каждого sprint’а на них), то начинаются проблемы с тем, что sprint’ы становятся слишком непредсказуемы.
б) Можно команду разделить на Scrum — те, кто работают над новым и на support (которые будут работать по какой-то другой методике).
в) Можно таки попытаться откладывать баги на потом и планировать их по честному в следующий Sprint. Сразу скажу, что менеджмент и customer support будет против.
Тут в целом ничего военного, но тем не менее, в классическом описании Scrum’а — об этой проблеме не написано.
4) Когда команда работает над проектом с плохим кодом и без автоматизации тестирования, очень остро становится вопрос, как же сделать так, чтобы в конце Sprint’а можно было отдать заказчикам продукт. Проблема заключается в том, что для того чтобы отдать продукт нужно не просто протестировать 2 новые фичи, которые были сделаны, а еще регрессионно протестировать весь продукт, чтобы проверить ничего ли не было сломано.
Опять же решений несколько:
а) Отдельно от Scrum сидит команда тестировщиков, которые постоянно гоняют регрессионные тесты (до тех пор пока не будет достаточно количество автоматизированных и unit test’ов. Замечу, чаще всего обнаруживается, что QA очень сильно не хватает и нужно нанимать дополнительных людей (что не всегда по душе менеджменту).
б) Таки в конце sprint’а продукт не является shippable. И раз в 3-4 sprint’а таки делают большое перетестирование и пофикс багов. В результате получается скорее модифицированный waterfall, чем Scrum.
И моя стандартная фраза в этой статье — «Как обычно об этом тоже молчит Scrum»
Продолжение следует…