Что значит «нам нужно больше времени»?

Установка и соблюдение сроков разработки программного обеспечения

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

Если есть какие-либо сомнения в том, что это необходимый навык, просто подумайте над ужасным, но часто задаваемым вопросом: «Сколько времени это займет?» Даже если вы супер-Agile и не верите в далекие сроки выполнения проекта, будьте уверены, что кто-то сломается под давлением и назначит дату, к которой будет привязана ваша команда. Когда наступит эта дата, а вы не будете готовы к запуску, ваш менеджер будет злиться на вас, потому что вы выставили ее дураком, продавцы будут злиться на вас, потому что они пообещали вашим самым важным клиентам, что они могут получить его сегодня, а ваши команда будет злиться на вас, потому что они отработали пять выходных подряд, пытаясь уложиться в невыполнимый срок. Так что давайте просто уклонимся от этого беспорядка и составим график, в соответствии с которым вы сможете жить.

Упражнение «Раскрась комнату»

Чтобы продемонстрировать, как это работает, я хотел бы попробовать упражнение, которое я беззастенчиво перенес из курса «Введение в разработку» в Microsoft. Цель состоит в том, чтобы оценить, сколько времени потребуется, чтобы покрасить комнату. Это урок задач оценки, который не требует специальных знаний о какой-либо конкретной программной системе.

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

Ду ду ду ду ду ду ду…

Выполнено?

Надеюсь, что нет, потому что вы еще даже не знаете задание! Сначала потребуйте спецификацию, а затем задайте несколько уточняющих вопросов.

Начальные требования

  1. Насколько велика комната? 12 футов на 10 футов на 10 дюймов, спальня среднего размера, если вы пытаетесь это представить.
  2. У вас уже есть материалы для покраски? Нет.
  3. Комната полностью меблирована? Много ли дверей, окон и прочего нужно красить? Да, вы получите фотографии.
  4. Какого цвета сейчас комната, и в какой цвет вы ее покрасите? Сейчас это зеленый Кермит, и мы хотим покрасить его в светло-желтый цвет.

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

Готовый? Вот так.

Разбивка задач

  1. Подтвердите требования. Убедитесь, что все согласны, например, с точным цветом и тем, какие стены следует красить. (5 минут)
  2. Изучите, как покрасить комнату, если вы еще не знаете. Вы, вероятно, узнаете некоторые важные детали, например, о грунтовках и о том, как долго ждать между слоями. Подтвердите любые двусмысленности с заинтересованными сторонами - возможно, вы только что узнали, что краска бывает разного блеска. (15 минут)
  3. Составьте список покупок и приобретите материалы, например краска, валики, ванночки для краски, кисти, салфетки и т. д. (2 часа)
  4. Создайте прототип своей раскраски в какой-то части комнаты, чтобы убедиться, что исходный цвет не просвечивает. Это могло бы сэкономить вам много времени, если, например, вы не думали, что вам нужен праймер, но вам это нужно. (10 минут покраски, 2 часа высыхания между слоями)
  5. Удалите все, что находится на стенах или около них, например картины, шторы и крышки выключателей. Отодвиньте мебель от стен и накройте мебель и пол, если красите потолок. (30 минут)
  6. Вымойте стены и осмотрите их на предмет потрескавшихся или отслаивающихся участков. Вы захотите залатать и отшлифовать любой из них, прежде чем начинать рисовать. (1 час)
  7. Закрепите тряпки или аналогичные материалы, начиная с плинтусов, чтобы краска не капала на плинтусы или пол. Заклейте скотчем края всех вещей, которые вы не хотите красить, например окон, дверей и шкафов. (1 час)
  8. Загрунтуйте комнату. (1,5 часа)
  9. Дайте грунтовке высохнуть. (30 минут, если вы начнете красить в том же месте, где начали грунтовать)
  10. Смойте грунтовку с любого оборудования, которое вы будете повторно использовать для покраски. (20 минут, но это может быть перекрыто временем высыхания)
  11. Нанесите краску. (2 часа)
  12. Убирайся. (30 минут)

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

Покраска комнат и программное обеспечение Parallels

Некоторые из этих шагов могут показаться глупыми. Дважды проверить цвет? Но неспособность зафиксировать все детали спецификации перед реализацией - очень распространенная ошибка, и вы можете потратить много времени на создание чего-то, что никому не нужно (см. Чайник). Малейшее различие в спецификации («О, вы хотели водостойкую краску другого блеска и только для одной стены? Ну [а-я] {4}.») Впоследствии исправить может быть очень дорого.

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

Затем, если вы не разбиваете задачи на достаточно мелкие части, вы можете не заметить некоторые очень важные моменты. Например, если вы забыли о перемещении мебели, у вас, возможно, не было под рукой второго человека, который мог бы переместить эту гигантскую книжную полку Expedit. Чем больше вы разбиваете вещи, тем больше понимаете, что упускаете из виду.

Что еще более важно, самым большим фактором точности вашей оценки является то, делали ли вы что-то подобное раньше или нет. Даже после обширных исследований трудно понять, сколько слоев вам понадобится, чтобы закрасить этот конкретный цвет, какова ваша скорость рисования или как влажность в вашем помещении влияет на время высыхания. Фактически, если вы уже делали именно этот проект раньше, вы можете вообще пропустить шаги с 1 по 4. Но если вы этого не сделали, вы, вероятно, неоднократно удивлялись шагам, которые вы забыли учитывать, и подготовительные работы дадут вам гораздо более точную оценку, чем ваше первоначальное предположение. И это действительно означает, что у вас не будет реальной оценки, пока вы не закончите с шагом 4. Все, что вы скажете до этого, будет дикой догадкой, о которой у вас, вероятно, будет повод пожалеть позже, поэтому безопаснее всего сказать: «Я не знаю, но я, вероятно, смогу рассказать вам через несколько дней »до тех пор.

Хорошо, вернемся к рисованию. Мы посчитали это примерно 12 часов. Мы все?

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

Разберитесь со всеми двусмысленностями

  1. Приготовьте краску, смешав все в большом ведре. Вылейте немного в ванночку для краски. (15 минут)
  2. Прокрасьте края кистью, заходя в углы и вплоть до потолка и дверей, не окрашивая ничего, что не должно быть желтым. Если вы сделаете 5 футов кромки за 3 минуты, а в комнате 210 футов кромки, это чуть больше 2 часов. Добавьте еще 20 минут на то, чтобы подниматься и спускаться по лестнице и перемещаться по ней. А если у вас нет лестницы, вам лучше добавить ее в список покупок. (Назовите все это дело 2,5 часа)
  3. С одним погружением валика вы, вероятно, сможете сделать участок стены от пола до потолка шириной в валик за пару проходов, так что вы, вероятно, сможете сделать участок шириной 5 футов примерно за 10 минут. (1,5 часа)
  4. Ваш «прототип» подскажет, сколько слоев краски вам понадобится. Это может значительно увеличить время рисования, так что вы также должны это учитывать. (Умножьте на количество слоев и множите время высыхания).

Вы также поймете, что грунтовка не сильно отличается от покраски. Так что удвойте эту оценку за грунтовку.

В сумме, с учетом одного пальто, получается около 15 часов на весь шебанг. Уф, это намного дольше, чем мы думали! И на всякий случай оставим немного буферного времени на случай неожиданных неудач, например, когда вам понадобится установить сетчатый фильтр для удаления кусков краски. Так что мы сделаем это ровным 17 часами. Окончательный ответ, займемся рисованием, верно?

Нет, еще нет!

Внешние факторы

Да, вы прикинули, сколько времени потребуется, чтобы покрасить комнату. Но это не то, что кто-то хочет знать. Они хотят знать, сколько времени пройдет, прежде чем комната будет покрашена. Это тонкое, но важное различие. Когда я спрашиваю об ошибке, приятно слышать, что вы можете написать исправление за час, но на самом деле мне нужно было знать, что вы не дойдете до нее до следующей недели, так что это будет сделано в неделя и час! Тот факт, что я только технически спросил, сколько времени займет исправление, - это то, на что мог бы указать только инженер.

-_-

Так что же нам еще не хватает в этой оценке? Перерывы в ванной и на обед, случайные перерывы и конкурирующие приоритеты. Ваша работа может быть отложена из-за любых происшествий, как ожидаемых, так и неожиданных. Возможно, вам пришлось остановиться пораньше, потому что сегодня день стирки или возникла какая-то чрезвычайная ситуация. Как вообще можно учесть такую ​​непредсказуемость?

Ответ - большая буферизация, основанная на прошлом опыте. Вы можете отслеживать множитель для своих оценок, регистрируя, сколько времени фактически потребовалось вам для выполнения каждой задачи, и сравнивая свой первоначальный график с реальным временем, затраченным на проект. Поскольку каждый проект имеет тенденцию быть совершенно разным, вы не сможете достичь фантастической точности, уточняя оценки отдельных задач с течением времени. Но множитель, применяемый ко всему проекту, будет учитывать все: от вашего естественного оптимизма до того факта, что у вас больше встреч, чем вы предполагали, до времени, которое вы проводите, откладывая работу в Интернете.

Я не буду здесь вдаваться в подробности, потому что на эту тему уже есть потрясающая статья Джоэла Спольски под названием Планирование на основе доказательств. Хотя его метод может показаться трудоемким, учет расписания всего для пары проектов может помочь значительно уточнить ваши оценки. Как и все навыки, которые стоит улучшить, для этого потребуется время и усилия.

Перехват плохих оценок

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

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

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

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

Первоначально опубликовано на https://blogs.dropbox.com/tech/