Программы редко проваливаются в конце. Они проваливаются на второй неделе — когда архитектуру предположили, а не изучили, — и тратят оставшиеся месяцы на дорогое обнаружение этого факта.
Три сценария провала, которые поймало бы обследование
Ограниченное по времени архитектурное обследование — это и есть поправка: короткое структурированное изучение систем, ограничений и допущений, от которых зависит программа, до масштабирования команды. Это самый дешёвый спринт, который когда-либо проходила программа, — при одном условии: оно контрактно обязано производить решения, а не документы.
Сценарии повторяются от организации к организации:
- Несущее допущение. Программа строит план вокруг интеграции, которая оказывается пакетной, ограниченной по частоте запросов или закрытой контрактом. Факт можно было выяснить за день; он всплыл на четвёртом месяце, вшитый в дизайн, предполагавший обратное.
- Унаследованное ограничение. Новая функциональность должна жить в ландшафте с фиксированными операционными реалиями — базой данных, которая не выдержит нагрузку, границей безопасности, запрещающей задуманный поток данных. Никто не изучил ландшафт; все проектировали версию с чистого листа.
- Непринятое решение. Две команды двигались с двумя разными пониманиями архитектуры, потому что решение, от которого зависели обе, так и не было принято явно. Обе были продуктивны; программа — нет.
У каждого сценария одна форма: вопрос, на который было дёшево ответить рано и дорого — поздно.
Когда обследование необходимо — а когда это затягивание
Обследование оправдывает своё время, когда верно хотя бы одно: программа зависит от систем, которые никто в команде не открывал; техническое допущение, окажись оно неверным, обесценило бы план; несколько архитектурных вариантов действительно живы, и выбор формирует бюджет; либо ограничения ландшафта не задокументированы, а людей, которые их знают, мало.
Обследование — затягивание, а не добросовестность, когда ответы уже известны, когда им откладывают решение, которое кто-то не хочет принимать, или когда второе обследование предлагают потому, что ответы первого не понравились. Тест: назовите вопрос, на который отвечает это обследование. Если никто не может — стройте.
Что изучать
Обследование — это изучение по целевому списку, а не общий обзор:
- Системы, которых касается план, — их реальные интерфейсы, качество данных, пропускная способность и поведение при отказах, по их коду и операторам, а не по их документации.
- Ограничения, задающие рамки дизайна, — границы безопасности, требования соответствия, операционные мощности, существующие контракты, навыки команды.
- Зависимости между решениями — какие выборы обратимы, какие запирают программу и в каком порядке их нужно принимать.
- Критическое допущение — оно есть у каждой программы; первая задача обследования — назвать его и проверить, спайком, если чтения недостаточно.
Результаты, которые считаются
Обследование завершено, когда оно произвело четыре вещи: записи архитектурных решений по сделанным выборам — с обоснованием, которое их определило; целевые варианты с честными ценами — обычно два-три, каждый с оценёнными рисками, а не одна глянцевая рекомендация; реестр найденных рисков, ранжированных по цене ошибки; и критическое допущение, подтверждённое или опровергнутое доказательствами.
Чем обследование не завершается: описанием текущего состояния, каким бы тщательным оно ни было. Карта текущего состояния — вход для решений, а не результат.
Антипаттерн: анализ как результат
Провальный режим обследования хорошо известен: недели становятся месяцами, а итог — девяностостраничный документ, описывающий всё и не решающий ничего. Причина предсказуема: описывать безопасно, решать — рискованно. Документом можно любоваться; решение может оказаться неверным.
Поправка структурная, а не мотивационная: каждое направление обследования называется по решению, которому оно служит. «Оценить интеграционный ландшафт» приглашает к геологии. «Решить, может ли поток заказов идти через существующую ESB» приглашает к ответу.
Правила тайм-бокса и чек-лист выхода
Правила, удерживающие обследование честным: мы обычно ограничиваем его двумя–четырьмя неделями, продлевая только там, где само решение требует больше доказательств, — и никогда по инерции; команда — небольшая и опытная; в середине срока — обязательный доклад предварительных ответов, который рано вскрывает затягивание; а встреча для принятия решений назначается на последний день ещё до начала обследования, чтобы у дедлайна была аудитория.
Чек-лист выхода — обследование завершено, когда: у критического допущения есть доказательства в ту или иную сторону; у каждого решения на критическом пути есть ADR либо владелец и дата; варианты несут цены, которые спонсор может сравнить; реестр рисков никого не поставит в неловкое положение через полгода; и команда, которая строит дальше, может сказать на одной странице, что она строит первым и почему.
Программа, начавшаяся так, тратит первый спринт на постройку правильной вещи. Альтернатива тратит четвёртый месяц на выяснение того, что могла сказать нулевая неделя.