Моя недавняя эпопея со стиральной машиной напомнила мне, почему одна из самых страшных и ненавидимых задач в разработке ПО начинается с вопроса:
«Сколько времени вам на это потребуется?»
Привычность этого бытового прибора внушила мне ложное чувство безопасности
Я переехал в новый дом. Впервые на моей памяти я вселялся в только что построенное здание, в котором стал первым жильцом.
Одна из неизбежных задач при этом — перемещение стиральной машины на её место и подключение к подаче воды и электропитания. Это было моё девятое место жительства, поэтому я решил, что установка стиралки будет похожа на все остальные случаи.
Судя по моему опыту, обычно для установки стиральной машины требуется минут десять, а то и меньше. Очевидно, десять минут — это вполне разумный примерный срок для выполнения этой задачи.
Однако в этот раз мне потребовалось четыре часа. Почему же я так промахнулся со своими оценками?
В статье я расскажу, как и почему это сильно напомнило мне о тёмном искусстве оценки сроков разработки ПО.
Препятствие №1
Я взглянул на нишу, в которой должна была стоять машина. Розетка находилась в другом отсеке, но строители забыли просверлить отверстие для провода. Без этого я бы не смог включить машину.
▍ Решение №1
У меня нет инструмента для сверления подходящего по размерам отверстия, но проведя исследования, я выяснил, что это можно сделать при помощи сверлильной коронки. Это полый с одного конца цилиндр с зубчатым краем, который крепится на дрель. Я съездил в ближайший строительный магазин, посоветовался с консультантом и купил 60-миллиметровую коронку.
Препятствие №2
Я вернулся домой, чтобы воспользоваться коронкой, но выяснил, что в зажимной патрон моей обычной домашней дрели она не помещается, потому что слишком большая. И никакого переходника для её крепления у меня тоже нет.
▍ Решение №2
Я снова съездил в строительный магазин. Другой, гораздо более опытный на вид сотрудник сказал (немного грубо выразив презрение к моему невежеству), что обычные домашние дрели слишком малы и слабы для сверлильных коронок, и мне нужна более мощная профессиональная дрель, для которой подходят свёрла побольше. Ну, допустим.
Я поверил ему на слово и взял у него напрокат за десять долларов гораздо более качественную дрель, которую должен был вернуть в тот же день. Дома я выяснил, что эта дрель своенравна, как ослица, зато мне наконец удалось зажать в ней коронку.
Я приступил к сверлению спустя 25 минут, которые мне понадобились для того, чтобы научиться держать её ровно и узнать о прелести шумоподавляющих наушников. Коронка проделала аккуратное отверстие диаметром 60 миллиметров, в которое я установил пластмассовую вставку. Кабель пропущен через отверстие и подключён к розетке! Работа закончена?
Отверстие проделано; наверно, статью на этом можно завершать
Препятствие №3
Я пропустил входной и выходной шланги через ещё одно отверстие, просверлить которое строители не забыли. Однако эти шланги хорошо подходили для моего старого дома, а здесь оказались слишком короткими.
▍ Решение №3
Я поехал в строительный магазин побольше. Там продавались гофровые шланги, которые могли удлиняться с 1,2 до 4 метров. Постойте-ка,
мои шланги выглядят точно так же: возможно, вместо того, чтобы тратить 80 долларов на новые, возможно, я смогу удлинить старые!
Препятствие №4
Я поехал домой, надеясь приступить к удлинению шлангов. Они выглядели очень похожими на магазинные (можно даже сказать, что обманчиво похожими), но, на самом деле, не вели себя как гофровые и упорствовали, не желая удлиняться.
▍ Решение №4
Снова вернувшись в строительный магазин и потратив 80 долларов на новые шланги, я поехал домой и установил их. Работа закончена?
Препятствие №5
В процессе подключения входного шланга к трубе с холодной водой впервые выяснилось, что разъём закрыт очень сильно затянутой стальной заглушкой, то есть вручную раскрутить её никак не получится. Заглушка имела диаметр 35 миллиметра, а у меня не оказалось разводного ключа такого размера.
▍ Решение №5
Возвращаемся в строительный, чтобы купить разводной ключ побольше. Моя пятая поездка. Вернувшись домой с новым инструментом, я с лёгкостью смог скрутить заглушку и подключиться к воде. Победа!
Снятая заглушка трубы с холодной водой
Я присоединил выходной шланг стиральной машины к сливу U-образного изгиба трубы под раковиной. Мне впервые доводилось подключать слив таким образом.
Отвод слива для подсоединения выходного шланга. И да, нужно было закрепить на нём хомут.
Я включил машину, отряхнул руки от пыли и расслабился. Работа выполнена.
Препятствие №6
Спустя двадцать минут стиральная машина запищала с кодом ошибки E39. Очевидно, что-то препятствовало сливу. Я уже скорее смирился, чем удивился.
▍ Решение №6
Засунув отвёртку в качестве зонда в отвод слива на трубе и потыкав ею, я выяснил, что отвод заканчивается не отверстием в U-образной трубе, а стенкой из ПВХ. Но, разумеется, так и должно быть: если к отводу не подключён шланг, то сливающаяся по трубе вода может подняться обратно и вылиться под раковину. Оказалось, что перед подсоединением шланга нужно высверлить эту стенку из ПВХ. Естественно, приступая к проекту, я и понятия об этом не имел.
У меня не было перового сверла идеально подходящего диаметра для раскрытия отверстия, поэтому выбрал самое большое сверло из имеющихся в наличии. Скрючившись, я забрался под раковину и высверлил отверстие. Неидеально, но должно решить проблему.
Я заново присоединил трубу слива и запустил стиралку. Всё заработало. После пятикратной поездки до строительных магазинов я слишком устал, чтобы праздновать победу.
Если учитывать пять поездок по магазинам, моя изначальная оценка сроков (10 минут) выросла в 24 раза (до 4 часов).
Чему я научился?
Я ужасно промахнулся с оценкой сроков потому, что исходил из времени установки во всех предыдущих случаях. Но я никогда не монтировал стиральную машину в
новом доме, поэтому столкнулся со всевозможными трудностями, о существовании которых и не подозревал. Можно сказать, что это «неизвестные неизвестные».
На следующий день я раздумывал о том, что
это физическое напоминание о причинах сложности оценки сроков разработки ПО. Нас очень часто спрашивают, сколько времени нам понадобится, чтобы создать нечто созданное нами ранее, поэтому мы с уверенностью говорим, что это займёт неделю.
Но мы не берём в расчёт то, что хотя 90% проекта будут теми же самими, возникнет
одно критичное отличие от пяти предыдущих проектов, и этот проект, казавшийся тривиальным на момент планирования сроков, поломает весь график. Причиной может быть что-то из нижеперечисленного или все пункты разом:
- Наш многократно использовавшийся фреймворк для выполнения задач, который мы собирались применить для относительно маленькой части системы, теперь уже не поддерживается, и нам придётся форкнуть его, чтобы самостоятельно подогнать под нужные требования.
- Вся экосистема инструментария разработки уже устарела на полтора года после того, как мы в последний раз ею пользовались, поэтому нам придётся с нуля набивать шишки на совершенно новом тулчейне.
- Мы выяснили, что версия нашей операционной системы сменилась, и она больше не поддерживает ключевые для наших старых зависимостей требования, поэтому необходимо всё анализировать заново или разрабатывать с нуля.
- Нам нужно, чтобы наш стек инфраструктуры использовал один компонент, с которым мы раньше никогда не работали, а он устроен совершенно неожиданным для нас образом.
- Мы обнаруживаем, что несформулированные, абсолютно неизвестные или кажущиеся тривиальными требования существенно меняют объём трудозатрат.
На этот раз мои предположения о трудозатратах были повержены новым домом. А путешествие по зыбучим пескам процесса разработки ПО похоже на многократный ежегодный переезд в новый дом.
Что же нам делать, если мы даже не знаем, какие вопросы задавать, принимаясь за любой программный проект, особенно если он кажется вполне привычным?
В случае с моей стиральной машиной возникали неизвестные неизвестные — я не ожидал, что мне придётся сверлить отверстие, покупать новые шланги, снимать заглушку и высверливать ПВХ-стенку.
Да, мы можем (и должны) максимально точно собирать требования, но даже если территория казалась очень знакомой, рано или поздно нам придётся столкнуться с реальностью и преодолевать десятки препятствий, которые мы не ожидали встретить. При этом работа на 10 минут вполне может растянуться на 4 часа.
Telegram-канал со скидками, розыгрышами призов и новостями IT 💻
