habrahabr

Стиральная машина позволила мне иначе взглянуть на сроки разработки ПО

  • среда, 26 февраля 2025 г. в 00:00:08
https://habr.com/ru/companies/ruvds/articles/885258/
Моя недавняя эпопея со стиральной машиной напомнила мне, почему одна из самых страшных и ненавидимых задач в разработке ПО начинается с вопроса:

«Сколько времени вам на это потребуется?»

Привычность этого бытового прибора внушила мне ложное чувство безопасности

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

Одна из неизбежных задач при этом — перемещение стиральной машины на её место и подключение к подаче воды и электропитания. Это было моё девятое место жительства, поэтому я решил, что установка стиралки будет похожа на все остальные случаи.

Судя по моему опыту, обычно для установки стиральной машины требуется минут десять, а то и меньше. Очевидно, десять минут — это вполне разумный примерный срок для выполнения этой задачи.

Однако в этот раз мне потребовалось четыре часа. Почему же я так промахнулся со своими оценками?

В статье я расскажу, как и почему это сильно напомнило мне о тёмном искусстве оценки сроков разработки ПО.

Препятствие №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% проекта будут теми же самими, возникнет одно критичное отличие от пяти предыдущих проектов, и этот проект, казавшийся тривиальным на момент планирования сроков, поломает весь график. Причиной может быть что-то из нижеперечисленного или все пункты разом:

  1. Наш многократно использовавшийся фреймворк для выполнения задач, который мы собирались применить для относительно маленькой части системы, теперь уже не поддерживается, и нам придётся форкнуть его, чтобы самостоятельно подогнать под нужные требования.
  2. Вся экосистема инструментария разработки уже устарела на полтора года после того, как мы в последний раз ею пользовались, поэтому нам придётся с нуля набивать шишки на совершенно новом тулчейне.
  3. Мы выяснили, что версия нашей операционной системы сменилась, и она больше не поддерживает ключевые для наших старых зависимостей требования, поэтому необходимо всё анализировать заново или разрабатывать с нуля.
  4. Нам нужно, чтобы наш стек инфраструктуры использовал один компонент, с которым мы раньше никогда не работали, а он устроен совершенно неожиданным для нас образом.
  5. Мы обнаруживаем, что несформулированные, абсолютно неизвестные или кажущиеся тривиальными требования существенно меняют объём трудозатрат.

На этот раз мои предположения о трудозатратах были повержены новым домом. А путешествие по зыбучим пескам процесса разработки ПО похоже на многократный ежегодный переезд в новый дом.

Что же нам делать, если мы даже не знаем, какие вопросы задавать, принимаясь за любой программный проект, особенно если он кажется вполне привычным?

В случае с моей стиральной машиной возникали неизвестные неизвестные — я не ожидал, что мне придётся сверлить отверстие, покупать новые шланги, снимать заглушку и высверливать ПВХ-стенку.

Да, мы можем (и должны) максимально точно собирать требования, но даже если территория казалась очень знакомой, рано или поздно нам придётся столкнуться с реальностью и преодолевать десятки препятствий, которые мы не ожидали встретить. При этом работа на 10 минут вполне может растянуться на 4 часа.

Telegram-канал со скидками, розыгрышами призов и новостями IT 💻