Разговоры обычно начинаются с обсуждения «списка препятствий» (impediments list) — того, что мешает команде функционировать быстрее. Это может быть что угодно: от зависимостей в конвейере поставок до проблем с едой и парковкой. Если инженерный менеджер и скрам-мастер не способны препятствие устранить, они передают его моим директорам. Если и те не справляются, через двое суток препятствие автоматически становится моим. Я обязан объяснить инженерам, что я сделал и где застрял — я подотчётен своей команде:
— Извините, я опять говорил с Израилем, но их модуль задерживается; придётся пока работать с симулятором.
— Извините, но из тридцати уволенных корейских инженеров Донг-Чжу смог уговорить только пятерых. Мы срочно посылаем наших разработчиков в Сеул перенимать знания.
— Извините, я знаю, что вы тратите часы в пробках на выезде из технопарка; я в них и сам застреваю. Мы говорили с его директором и угрожали задержкой арендной платы. Он юлил ужом и говорил, что ничего сделать не может — проблема на уровне городских властей и политических партий!
Извиняться приходилось всё время — почти все помехи оседали, как обломки кораблей в Саргассовом море, в моём списке препятствий. Большинство из них можно было устранить только на уровне экосистемы; моего ранга не хватало. Ну да ничего; когда я стану президентом Левиафана или главой ООН, тогда и разберёмся.
А пока «недеяние» обернулось нелёгкой работой: вместо бесконечного обсуждения задержек и перетасовывания «ресурсов» между проектами мы слушали, что нужно командам и пытались им помочь.
Умертвия и конвейер поставки
Наши ежедневные прогулки по корпоративным полям давали инженерам возможность блеснуть перед начальством, а нам — сократить до минимума коммуникационные цепочки и лучше понять, что на самом деле происходит.
Как-то на такой прогулке мы с Маноджем разговорились с DevOps-инженером — и застряли на пару часов, глядя вместе с ним, как кусок кода проходит через наш конвейер поставки. Одно дело смотреть на диаграмму, которую показывает Виджай, и сочувственно цокать языком. Другое дело сидеть рядом с инженером и чувствовать его боль: один только процесс полной сборки (build) релиза занимает сорок три минуты. А нам надо было уменьшить время от завершения кодирования до получения результатов тестирования.
Тогда Виджай организовал хакатон и объявил: за каждую сэкономленную минуту выигравшая команда получает десять тысяч рупий (около 150 долларов США).
К концу двадцатичетырёхчасового хакатона бессонная команда-победитель нашла, как сократить время сборки от сорока трёх до семи минут. За сутки мы достигли большего, чем за несколько лет!
Финансовому отделу придётся запустить свой собственный хакатон, чтобы найти, по какой статье расхода можно провести премию команде. Дело не в сумме, это гроши по сравнению с деньгами, которые мы сэкономили на времени сборки. Дело в правилах.
Так или иначе, наш конвейер заработал быстрее. Система автоматизации тестирования, стабилизировавшись и перевалив за восемьдесят процентов покрытия, начала приносить реальную пользу. Инженеры почувствовали, что автотесты — не корпоративный налог, а реальная польза, и чуть не с азартом стали писать и код, и тесты для своих клиентов.
Клиентов набралось уже под сорок. Надо было проверять, не испортил ли новый код какой-то другой проект — не сломан ли наш «ствол» (trunk) кода. Раньше моих разработчиков не трогало, что происходит с другими компонентами. Теперь им без разницы, что происходит с другими клиентами — у тех, с чужого проекта, пусть голова болит!
Мониторы во всех углах нашего здания, на которых отражалось состояние ствола, привычно светились тревожным малиновым цветом вместо скучного зелёного. Ну и пусть себе светятся…
Как сделать так, чтобы инженеры нас услышали?
Виджай где-то раздобыл сирену пожарной машины и подключил её к своему конвейеру. Попробуй теперь не услышь! Когда «ствол» ломается, наша сирена, как стая умертвий при виде аппетитного хоббита, издаёт тоскливый, раздирающий душу вой. Разработчики бросаются на починку «ствола». Он кряхтит и гнётся, но больше не ломается под тяжестью сотен проектов.