Сказка о хорошо выстроенных бизнес-процессах, или как одна проблема хакнула идеально работающую систему разработки

habr.png

Предисловие


Не секрет, что правильно выстроенные бизнес-процессы нужны всем.
Отдельные граждане, отделы и целые компании с холдингами бегают кругами и воют о необходимости правильного обустройства всех и всяческих процессов. Всё должно быть посчитано, измерено, запланировано и выполнено в срок, в строгих рамках бюджета. Метрики и KPI, предсказуемость и прозрачность.
Везде должен быть «внедрён» Agile. Все должны мыслить категориями Lean. Все должны думать о Business Value.
И, будучи разбуженными ночью, — мгновенно ответить на вопрос: «каков LTV нашего пользователя?»

Отличный, рациональный подход.

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

Отличный, рациональный подход.

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

Итак, знакомьтесь с нашими героями


Компания Anytime Rational Inc.


До мозга костей рациональна, следует обоим принципам. Вся по Agile, везде Scrum, каждый разработчик точно знает, какой Business Value имеет каждая его задача. Все озабочены повышением эффективности, общим индексом счастья и прибылью организации.
Не компания, а сказка. Любой владелец IT-бизнеса, глядя на неё, пускает слюнки. Сплошная конфетка.
Ведь таких отличных компаний в реальном мире просто не существует.

Компания Somehow Someway Ltd

.
Ну, здесь, — традиционный бардак. Инженеры поминутно травят свои инженерные байки в курилках, любят инженерные задачи, и чихать хотели на User LIfetime Value. Время от времени изобретают велосипеды, хотя в целом держатся в тренде «повторного использования» сторонних компонент.
На словах в компании Scrum, и даже есть итерации. На деле же, — разработка ведётся, как бог на душу положит.
Словом, — чего уж там. Обычная инженерная компания.

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

Итак, в обеих компаниях на низовом уровне, в процессе работы над некоей фичей, возникает инженерная проблема. Один из компонентов ведёт себя непредсказуемо, — старая добрая проблема «протекающих абстракций», помноженная на проблему интеграции, — и инженер, работающий над фичей, не понимает, почему это происходит.

Хронология проблемы


Day 1


В Anytime Rational инженер, — скажем, Пётр Первый, — сообщает о возникшей проблеме на утреннем стендапе. Скрам мастер уточняет, сколько времени может потребоваться на её устранение. Инженер затрудняется ответить и запрашивает микроспринт на изучение. Владелец продукта говорит, что фича, в общем-то, второстепенная, и выделить больше двух дней он не может. Скрам мастер сокрушается, что общая скорость команды в этом спринте упадёт, —, но выделяет Петру микроспринт.

В Somehow Someway перед инженером, — для простоты Петром Вторым, — встаёт точно такая же проблема.
На стендапе он привычно отбарабанивает: «сегодня продолжаю работать над таской SM-134, помощь не требуется». Он не особо задумывается над смыслом своих слов. Ведь весь его мозг поглощён обдумыванием «этой херни, которая происходит в долбаном модуле, написанном криворукими даунами из Third Party Component Solutions».
На очередном перекуре он издалека задаёт вопрос ведущему системщику Ярославу Мудрому из смежного отдела, и они, неспешно покуривая, минут 20 обсуждают подробности. Ярослав даёт пару советов, но в глубине души знает, что Пётру они не помогут. Потому что Пётр, конечно, классный парень и всё такое, —, но дизассемблер Ярослав ему бы ни за что не доверил.

Day 2


Anytime Rational


Пётр Первый ковыряется со своей проблемой уже второй день. Он понимает, что микроспринт, видимо, будет профукан, и на утреннем стендапе говорит, что ему необходима помощь.
«Кто тебе для этого нужен?» — участливо спрашивает скрам мастер.
«В идеале, — Ярослав Мудрый из смежного отдела. Он крутой системщик, и это как раз его профиль» — отвечает Пётр Первый, уже точно зная ответ на этот запрос.
«Оооо, Ярослааав…» — огорчённо тянет скрам мастер, — «ты же знаешь, он очень занят серьёзнейшими задачами, которые очень важны для нашей компании.»
«У тебя же есть ещё один день», — встревает владелец продукта, — «Давай посмотрим, что получится по результатам микроспринта, и будем принимать решение.»

Somehow Someway


Пётр Второй в это время, безуспешно перепробовав всё, что посоветовал ему Ярослав, задумчиво дымит в курилке.
«Чего такой смурной?» — благодушно интересуется зашедший на дымок тимлид Иван Грозный.
«Да так… одна херовинка тут…» — мнётся Петр. Ивана Васильевича он уважает, но побаивается, и расписываться в своей неспособности решить задачу не очень-то спешит.
«Ну-ну», — хитро усмехается Иван, — «небось, опять взялся за дело не по своей квалификации?»
Иван, посмеиваясь, удаляется, а посрамлённый Пётр идёт ковыряться дальше.

Day 3


Anytime Rational


«Микроспринт не принёс результатов», — сообщает Петр Первый. «Мне не удалось докопаться до источника проблемы. Требуется либо привлечение Ярослава, либо дополнительное время на изучение.»
«Ты и так уже два дня…» — начинает закипать владелец продукта, но скрам мастер умело перехватывает управление потенциальным конфликтом.
«Как мы и договорились, был проведён микроспринт на изучение проблемы, и теперь нам необходимо принять решение. Мы либо выделяем дополнительное время на изучение, либо запрашиваем помощь у отдела системной разработки, либо эскалируем проблему и предоставляем принятие решения вышестоящему руководству.»
«А что мы будем эскалировать?» — буркает недовольный владелец продукта. «Какова стоимость решения проблемы? Мы же так ничего и не выяснили.»
«Хорошо, значит, у нас остаётся два варианта.» — примирительно улыбается скрам мастер. «Будем запрашивать помощь или продолжим разбираться сами?»
Все выжидательно смотрят на Петра.
Он нервно сглатывает, но, будучи верным сторонником идеалов Agile, честно и открыто сообщает, что ему нужна помощь.
«Отлично.» — говорит скрам мастер, делая пометку в Evernote. «Я узнаю у отдела системной разработки, когда они смогут нам с этим помочь.»
«Пётр, пока что переключайся на следующую по приоритету задачу. Так, это у нас… SM-135, если я не ошибаюсь.»

Someway Somewhat


Пётр Второй, привычно отбарабанив дежурную фразу, продолжает размышлять над поведением модуля, зафиксированным вчера вечером. Однако Иван прерывает его размышления.
«Пётр, а как там твоя проблемка? Уже решил?»
«Эмм… пока нет, сегодня ещё попробую пару подходов…» — глаза Петра избегают внимательного, с прищуром, взгляда Ивана.
«Ну-ну…» — без улыбки произносит Иван.

Day 5


Anytime Rational


Пётр Первый увлечённо работает над новой задачей. Он понимает, что до codefreeze осталось совсем немного времени, но стремится закончить хоть что-то в этом спринте, чтобы скорость команды не просела слишком сильно, и релиз продукта вышел с хорошим набором фичей.
Скрам мастер пытается согласовать совместный микроспринт с командой Ярослава, но приоритеты их задач существенно выше, так что перспектива выглядит достаточно безрадостной.
Но Пётр доволен. Наконец-то можно хотя бы на время забыть об этой сложной проблеме, и принести реальную пользу команде и компании в целом.

Somewhat Somewhere


Петр Второй, поминутно матерясь, сидит за своим рабочим столом, неощутимо слушает в наушниках какой-то тяжеляк и пытается разобраться, «что же, мать его, происходит внутри этой грёбаной помойки!»
На одном экране открыт отладчик, на другом, — дизассемблированный код. Сосредоточенный взгляд Петра постепенно наполняется безнадёгой, и левый глаз уже начинает подёргиваться.
Он не замечает, что за его спиной вот уже десять минут задумчиво молчит Ярослав, — покуда тот, наконец, не похлопывает Петра по плечу.
«А? Что? Какого…» — срывает с головы наушники Пётр. «А, Ярослав… ты чего тут?»
«Да вот, думал тут над твоей проблемкой на досуге… кстати, смотри, тебе бы вот здесь JNE пробросить, —, а то ты дальше не продвинешься.»
«Где? А, вот тут вот… и что это даст? Ааа, вона как…» — Пётр снова входит в поток. «А это тут что за хрень?»
«Кривая работа с регистрами. Давай вот так попробуем…» — подключается к нему Ярослав.

Day 10


Anytime Rational


«Итак, скорость нашей команды в этом спринте упала на 3 стори поинта. Учитывая, что фича SM-134 была нами в итоге выброшена из спринта, — это вполне ожидаемо. Кстати, Пётр, ты молодец, я не ожидал, что ты успеешь реализовать SM-135.» — скрам мастер привычно проводил ретроспективу, когда в комнату стремительно влетел Ярослав.
«Ребята, я буквально на минуту, извините. Микроспринт согласован, на три дня мы вам выделим Ефима. Он хороший системщик, вдвоём с Петром проблему наверняка успешно решите. Ну, всё, я побежал, извините ещё раз, что прервал ваше ретро.»
Пётр Первый растерянно хлопает глазами. Проблема? Ах, да, вон та, страшная и сложная… бррр…

Somewhere Someone


«Пётр, что там с твоей проблемой?» — грозно вопрошает Иван.
«Нормально всё, Иван Васильевич. Один небольшой глюк остался, — ну, и код потом вылизать. Дня за три точно управлюсь.» — спокойно отвечает Пётр Второй.
«Знаю я твои три дня…» — ворчит Иван. «Давай быстрее заканчивай, у меня уже руководство интересуется, почему мы эту фичу так сильно затягиваем. Скоро ведро вазелина надо будет заготавливать!»
«Да знаю я, Иван Васильевич. Затащим!» — улыбается Пётр.

Day 13


Anytime Rational


«По результатам микроспринта с Ефимом оказалось, что на решение проблемы потребуется ещё половина спринта. Или даже целый спринт.» — не вполне уверенно говорит Пётр Первый. Вдвоём с Ефимом они ковырялись над этой проблемой три полновесных дня, но уверенного решения так и не нашли. — «Есть несколько наметок…»
«Наметок, шнаметок!» — взрывается владелец продукта, — «Где решение? Ты точно за неделю это сделаешь?»
«Так, коллеги, давайте успокоимся.» — вмешивается скрам мастер, укоризненно глядя на владельца продукта. «Пётр, я правильно понимаю, что за половину спринта ты можешь не успеть, но уж за целый спринт точно решишь проблему?»
«Да, всё верно.» — отвечает Пётр, пытаясь говорить уверенно.
«Это всё хорошо и здорово, конечно.» — немного успокоившись, рассуждает владелец продукта. «Но готовы ли мы тратить дополнительное время на эту фичу? Мы и так уже потратили силы и время. Мне кажется, надо эскалировать. Рациональность дополнительных затрат лично мне кажется неочевидной.»
«Хорошо, давайте так и сделаем.» — подытоживает скрам мастер.

Someone Sometime


«Ну, я тут почти закончил. Всё работает, только subroutine бы ещё причесать.» — отчитывается Пётр Второй. «Благо, скиллы по C я мальца подтянул, там фигня осталась.»
«Ну, вот и молодец.» — улыбается Иван. «Причёсывать-то обязательно, или просто очень хочется? Может быть, лучше фичу наконец-то закроешь?»
«А как же моё чувство прекрасного?» — показушно оскорбляется Пётр, потрясая в воздухе руками.
Все инженеры дружно ржут.

Day 17


Anytime Rational


«Руководство пришло к выводу, что возобновлять работу над фичей в данный момент нерационально. Business Value не настолько велико, чтобы вкладывать в неё дополнительные ресурсы, да и по срокам получается, что к следующему релизу никак не успеваем.» — сообщает владелец продукта.
«Ну, и слава богу.» — бурчит себе под нос довольный Пётр Первый. «Можно забыть, как страшный сон.»

Sometime Something


«Пётр, фича твоя идёт в релиз. Тестами-то покрыл?» — интересуется Иван.
«Ну, так… надо бы ещё добавить…» — мнётся Пётр Второй.
«Вот и добавь.» — веско говорит Иван. «Всё, разошлись, работаем.»

Итог


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

Поэтому, когда вы в следующий раз будете вопрошать: «почему, ну почему они не реализовали здесь эту очевидную фичу?», или «какого чёрта это работает через такую глубокую задницу?» — помните, что дело может быть в протекающих абстракциях на стыке двух и более систем.

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

© Habrahabr.ru