Как разработчику, который 2 недели думает над архитектурой, начать писать рабочий код уже сегодня
Прорабатывать спецификации архитектуры и мысленно симулировать граничные случаи — это приятно. Ведь код в голове идеален и не содержит багов. Но если размышления затягиваются и редактор так и не открывается, это не осмотрительность, а обычный страх перед неудачей. Огромный документ с проектными решениями, созданный для избежания неопределенности, рушится при первом же изменении требований.
Для разработчиков, застрявших в параличе анализа и теряющих время, мы упорядочили рабочий процесс, который позволяет разрушить перфекционизм и выкатить прототип уже сегодня.
Цена, которую платит мозг за долгие размышления
Попытки сравнить всевозможные фреймворки и архитектуры до написания хотя бы одной строки кода вызывают колоссальную когнитивную перегрузку. Фиксация на обработке ошибок с вероятностью возникновения менее 0,1% или создание слоев абстракции еще до появления требований — это типичная реакция избегания потерь.
Согласно исследованию McKinsey и Leadership IQ, проведенному среди компаний из списка Fortune 500, на нерешительность и чрезмерный анализ уходит более 53 000 дней ежегодно. В пересчете на зарплаты это означает, что 250 миллионов долларов улетают в трубу без каких-либо результатов. Личная продуктивность разработчиков также падает более чем на 40% из-за преждевременной оптимизации.
Если кажется, что мысленная симуляция затягивается, этот процесс нужно принудительно остановить на уровне системы. Достаточно внедрить в повседневную практику паттерн « spike solution » (разведочное решение) из экстремального программирования (XP):
- Открыто заявить себе: «Этот код будет безжалостно удален через 30 минут».
- С помощью команды шаблонного CLI поднять локальный сервер разработки всего за 1 минуту.
- Перестать думать о структуре и сразу реализовать только один самый неопределенный кусок кода для проверки технологии.
30% результата за 30 минут таймбоксинга
Если вы застряли на этапе планирования на две недели, проблема не в нехватке спецификаций, а в отсутствии контекста выполнения. В таком случае нужно закрыть все проектные документы и установить 30-минутный таймбоксинг.
Прототип с 30% готовностью полностью лишен обработки ошибок, интеграции с БД и проработанного UI. Мы смотрим только на то, выдает ли система ожидаемый результат при передаче входных данных. Именно поэтому продуктовые команды из Кремниевой долины проводят встречи не по абстрактным техническим заданиям, а используя работающие прототипы. Неопределенность исчезает только тогда, когда продукт можно пощупать своими руками.
- Вместо запросов в БД или интеграции с API пишем JSON-объекты прямо внутри функции.
- Полностью убираем обработку ошибок и пишем код так, чтобы отрабатывал только один успешный сценарий.
- Используем фронтенд-шаблоны, чтобы создать интерактивный экран за 60 секунд.
Давайте посчитаем с точки зрения стоимости задержки (Cost of Delay). Если 4 инженера с зарплатой $2 025 в неделю тратят 2 недели исключительно на архитектурные совещания, прямые и косвенные убытки составляют $16 200.
| Критерий оценки |
Разработка на основе спецификаций |
Разработка на основе прототипов |
Эффект |
| Определение исходных требований |
2–4 недели (написание документов) |
30 минут — 1 день (написание спайков) |
Сокращение времени на 90% |
| Совещания по изменению планов |
В среднем 8–12 раз (абстрактные споры) |
В среднем 2–3 раза (на основе демо) |
Сокращение встреч на 70% |
| Исправление ошибок в направлении |
Перестройка всей структуры |
Отказ от 30-минутного черновика |
Минимизация затрат на переделку |
| Скорость ревью PR |
Возникают узкие места |
Ранняя публикация Draft PR |
Увеличение скорости ревью на 30% |
Разделение времени на размышления и создание
Когда мысли и процесс реализации перемешаны, вы неизменно будете оглядываться назад во время написания кода. Именно поэтому рабочее время нужно жестко разделять на фазу анализа и фазу чистой реализации. Это соотносится с принципом «фиксированное время, изменяемая область» из методологии Shape Up от компании Basecamp. Сначала вы определяете время, и если не успеваете уложиться, просто отбрасываете часть функционала.
Когда вы застреваете на каком-то этапе, в качестве ориентира для поиска обходных путей без долгих раздумий можно использовать концепцию «преднамеренного и осознанного долга» из квадрантов технического долга Мартина Фаулера. Если этот код легко изменить позже, лучше выбрать самое простое временное решение и сразу закоммитить его.
Джефф Безос говорил, что принимать решения и действовать стоит тогда, когда уровень определенности достигает 70%. Ожидание уровня совершенства в 90% и выше лишь убивает скорость.
- Из 8 рабочих часов всего 1,5 часа тспользуйте на настройку области спайка (spike scope) и сбор информации.
- Оставшееся время разделите на два блока по 3,5 часа и полностью посвятите их реализации. В этот период рефакторинг строго запрещен.
- Структурные идеи, приходящие в процессе работы, записывайте в блокнот и рассматривайте только после завершения сессии.
Публикация сырого кода и получение фидбека
Если прятать код под предлогом его несовершенства, позже это обернется еще большими переделками. Инженерная команда Shopify создает Draft PR не для проверки идеальности кода, а для валидации выбранного направления работы.
Размер PR лучше удерживать в пределах 200–300 строк. Если добавить тег WIP с подписью вроде «Получаю отзывы только по структуре алгоритма», это снизит нагрузку на ревьюеров.
Первоначальный код — это не ваше произведение искусства, а всего лишь гипотеза, требующая проверки. Получив фидбек, вы сможете быстро внедрить изменения и двигаться дальше.
- Классифицируйте отзывы на 3 категории: «немедленное внедрение», «задачи на будущее», «отклонено».
- Написание базовых тестов и форматирование полностью делегируйте CI-пайплайну и линтеру.
- Вносите исправления только по пунктам немедленного внедрения и завершайте весь цикл от создания PR до мерджа в течение 24 часов.
Идеальная виртуальная архитектура так и останется в вашей голове. Одна сырая, но работающая строка кода, написанная сегодня, становится вашим реальным навыком. Избавившись от оправдания в виде перфекционизма, вы сможете выбраться из болота издержек задержки.