Наткнулся недавно на интересный блог: Алекс Лебедев пишет про разработку. Блог открылся недавно, но там уже есть некоторое количество интересных статей. Хотя лично меня в первую очередь привлекло то, что причины, побудившие автора уйти с зарплаты и начать работать самостоятельно, уж очень во многом совпадают с моими :-).
Одну из недавних статей, посвященную планированию, мне очень хочется прокомментировать.
Когда-то я прочитал уже ставшую классической статью о планировании Джоела Спольского, которая показалась мне очень логичной. За последний год у меня была возможность потренироваться с этим подходом, и должен сказать, что как только я его "грокнул", я убедился, что он реально работает. Буквально, Джоел оказался прав практически во всем. Поэтому, если ваши планы все время проваливаются, я утверждаю, что "вы просто не умеете их готовить". Поэтому эту статью я теперь рекомендую к обязательному прочтению всем разработчикам и их менеджерам. Больше того, лучше всего прочитайте ее прямо сейчас.
Статья же Алекса Лебедева оставила у меня странные впечатления, потому что сначала я был совершенно не согласен, потом совершенно согласен, а с выводом — не согласен опять :-).
Немного разобравшись в причинах этого эффекта, я и хочу расставить акценты.
Первая часть начинается так:
Регулярно сталкиваюсь с желанием того или иного руководства составить подробный план работ и строго следовать ему. Зачем это нужно? Никакой объем планирования не может ускорить работу.
Я бы уточнил: никакой объем планирования разработки, составленный руководством, не может ускорить работу. Дальше автор углубляется в описание того, почему планы не работают, почему не помогает ни жесткий контроль исполнения, ни военная дисципина. Это все так, но я в корне не согласен с тем, что проблема лежит в самом факте подробного планирования. Реальная причина неработы такого подхода только в том, что никто, кроме того человека, который пишет код, не может физически знать, сколько на это уйдет времени. Ни руководитель, ни его коллеги разработчики. Только он сам, и как раз только тогда, когда спланирует все подробно.
А вот дальше автор делится работающей моделью планирования:
Всегда имейте максимально полный и актуальный список работ. Расставляйте приоритеты и работайте в первую очередь над высокоприоритетными вещами. Оценивайте трудоемкость работ и примерные даты окончания. Только не пытайтесь зафиксировать сроки и взвалить ответственность за их соблюдение на разработчиков.
Согласен всеми руками. Главное отличие плана, который работает, от плана, который не работает — это то, что первый является инструментом, которым менеджер пользуется для управления проектом, а другой — психологическим пугалом со взятыми с потолка сроками. А психологические пугала на людей с высоким уровнем интеллекта не действуют.
План-инструмент не ставит условий, а просто информирует: "нам осталось сделать такие-то вещи, исходя из скорости нашей работы, мы будем делать их столько-то". И все. Не должно быть никаких санкций по поводу того, что реальный срок исполнения каких-то задач не совпал с запланированным, потому что тогда разработчики начнут врать в плане, он потеряет актуальность и с ней — смысл (никто не пользуется линейкой с неверными миллиметрами). Если через какое-то время становится видно, что планируемое время постоянно не совпадает с реальным, надо просто пересчитать остаток плана, исходя из реальности.
А вот для того, чтобы план был наиболее близок к реальности, он просто обязан быть подробным. Никто не знает, сколько занимает "система профайлов пользователей", потому что в это понятие можно включить от двух часов до полугода работы. Только когда это разбито на задачи "создать таблицу с полями A, B, C", "вывести поля в виде формы", "обработать submit" и т.д., тогда это можно посчитать.
Даже дедлайны, которые являются сутью традиционных "планов", на самом деле тоже имеют смысл. Они, например, могут быть продиктованы какими-то внешними причинами, и их действительно нельзя нарушать. И здесь план-инструмент позволяет команде сделать информированный выбор, от каких функций надо отказаться, чтобы успеть. А не обманывать себя до самого последнего момента, что "надо только еще чуть-чуть постараться и поднажать". Так не бывает в разработке, потому что программист не может заставить мозг "думать быстрее", и как любой творческий человек, не может генерировать у себя в мозгу озарения по собственному желанию.
Поэтому на вопрос в конце статьи:
Вы все еще думаете что вам нужен подробный план работ?
... ответ — конечно да.
Комментарии: 8
Иван, спасибо за развернутый комментарий.
Способ планирования "от Джоэля" пробовал и мне, в целом, понравилось. Очень просто и весьма эффективно, гораздо лучше, чем большинство альтернативных тяжеловесных подходов.
Это замечательно, но есть одна проблема. Такой подход не сочетается с agile-разработкой. Чтобы знать, что через 3 недели нужно создавать таблицу с полями A, B и C нужна достаточно подробная спецификация на функциональность, для которой будет использоваться эта таблица. Если в проекте уже используются подробные спецификации - отлично, вы можете воспользоваться ими для создания очень эффективного плана. Если спецификаций нет, то нет смысла вводить их для большей предсказуемости сроков работ.
По поводу дедлайнов - согласен, очень нужная штука. Позволяющая, например, отсечь ненужную но красивую функциональность и забыть о ней навсегда. Джоэль пишет об этом в своей статье Set Your Priorities:
Резюме:
План работ - очень полезный инструмент для решения вполне определенных задач. Только никогда не показывайте свой план руководству! Срабатывает общая закономерность: если полезная рабочая метрика начинает использоваться руководством, для того чтобы запустить руки в процесс разработки, то все становится хуже, чем было вообще без использования этой метрики.
Немного не в тему статьи: Вчера после 6 часов вечера переслали письмо из одного отдела, со стандартными фразами: "...разработать и внедрить...", срок исполнения стоял 10.08.06.
после этого фраза "Вы все еще думаете что вам нужен подробный план работ?" приобретает какой-то издевательский оттенок... Я к тому, что хорошо если можно составить план и сообщить о сроках, а если необходимо вписыватся в указанные сроки?
PS. Естественно, после хождения и кричания на всех и вся с самого утра, все таки дали составить план и сообщить о сроках разработки. Даже сослался на данную статью перед начальством, начальство ознакомилось... и, о чудо! согласилось. За что отдельное спасибо.
Ну почему же... Agile-методы ставят во главу угла изменчивость плана, и предварительная подробная спецификация этому не противоречит. Она тоже может меняться, и быть при этому такой же подробной.
Хотя такая agile-методология, как XP, насколько я знаю, действительно не предполагает такого подхода. Там планирование не только изменчивое, но и очень быстрое, и делается по ходу разработки. На дедлайны все особенно не завязано, а система считается готовой практически в любой момент. Но XP подходит для текущих проектов, не ограниченных сроками: например постоянное написание и совершенствование внутреннего софта внутренней командой разработчиков. А вот в контрактных работах "сделать такую-то систему за N месяцев" без предварительного планирования будет тяжело.
Этот вопрос уже, на самом деле, выходит за рамки планирования как такового, и переходит в раздел "как решать проблемы человеческого общения". В любом случае, даже если начальство генерирует волюнтаристские планы и отказывается эту практику менять, разработчики могут вести свой собственный план, и пользоваться им. В зависимости от отношений с начальством его можно прятать, а можно наоборот показывать всякий раз, говоря, что вот наш-то план как раз удался. Причем, прятать — это не партизанщина, это так же нормально, как не грузить начальство другими подробностями своей работы: названиями алгоритмов, структурой объектов...
P.S. То, что начальство согласилось, лично мне очень приятно :-).
Планирование полезно и в этом случае. План поможет показать начальству, какие из планируемых фич реально разработать к указанному сроку, понять, привлечение каких ресурсов позволит выдержать сроки, и в конце концов выяснить, стоит ли овчинка выделки.
А уж реакция начальства на предъявленные разработчиками планы зависит, как справедливо заметил Иван, от взаимоотношений в коллективе. Если цели разработчиков и начальства кардинально различаются (например, когда руководству главное слупить денег за проект с клиента, а не сделать успешный, формирующий положительный имидж фирмы продукт), то усилия, направленные на достижение одной, не помогут в реализации другой.
Причем, как показывает практика, даже в самых тяжелых случаях руководители и заказчики предпочитют услышать конструктивный анализ ситуации и предложения по ее урегулированию, а вовсе не безаппеляционное отрицание или напряженное молчание в ответ на выставленные условия реализации проекта.
Насколько я помню по тем исследованиям что проводились - ставь или не ставь deadline - скорость разработки от этого в лучшую сторону не меняется. Мало того, в сжатых сроках часто разработка занимает больше времени. Т е самое продуктивное, с прагматической точки зрения вообще не говорить о deadline.
Deadline - это понятие для заказчика а не для девелопера. Это сам заказчик должен рулить что он хочет видить в версии X продукта на дату Y а что нет. А задача команды разработки - давать timeline по тому списку задач, хотя бы приблизительный.
конечно, да