Лет десять назад я сидел в маленьком аутсорсе. Заказчик написал: добавьте кнопку экспорта в Excel, пользователи просят, это же просто кнопка.
Я начал с правды про фундамент.
Там нужно рефакторить ORM, N+1 убивает базу. Экспорт ста тысяч строк нельзя делать синхронно, упадём по таймауту. Нужен Celery, кеш промежуточных результатов, другая сериализация.
Он услышал другое: два месяца на кнопку. Знакомый программист, сказал он, сделает за день. К вечеру фраза: подумаю о смене подрядчика.
Ночью дошло. «ORM» и «Celery» для него пустой звук. Он слышал только отмазку.
Утром позвонил снова.
Представьте балкон на десятом этаже. Нельзя прикрутить к стене: упадёт вместе с людьми. Сначала несущая, потом усиление изнутри, потом разрешение, и только потом плита.
Кнопку мы сделаем за три дня. Укрепить фундамент, чтобы десять тысяч пользователей не уронили базу и не потеряли данные, шесть недель. Зато система выдержит в десять раз больше, и вы сможете расти.
Пауза. «То есть мы не кнопку делаем, а дом не развалится. Делайте. Только держите в курсе.»
Через два месяца в отзыве было: эти ребята думают о надёжности. Проект не потеряли.
С тех пор я не начинаю с того, как устроен ORM. Начинаю с того, что случится с домом.
Шесть проверок, которые я прогоняю перед серьёзным разговором, сами укладываются в одно слово, если нужно удержать в голове: кто слушает; какой жаргон режется; какая картинка вместо термина; три длины; как проверю, что поняли; сколько раз уже ужал текст. Дальше они разобраны по делу, без плаката на стену.
Сначала кто слушает
Плохо: микросервисы, Event Sourcing, CQRS, у каждого сервиса своя база, брокер посередине.
Можно нести: систему разрезали на части, чтобы команды релизили независимо и не гасили всё разом. Как детали конструктора: одну меняешь, остальное стоит.
Термин экономит время среди своих. Снаружи он отрезает комнату. REST, JWT, лимиты и пагинация для бизнеса звучат так: другие программы безопасно забирают данные порциями, чужой ключ не проходит, жадный клиент не кладёт сервер. На каждый термин один вопрос: какую дыру он закрывает. Вслух говорю про дыру.
Картинка держит лучше определения, если слушатель в ней живёт. API это меню: блюдо выбираешь, рецепт не видишь. Кеш это закладка, а не книга с первой страницы. Балансировщик это свободная касса, не «ещё один сервер». Ветка в Git это копия файла «Отчётноваяглава.doc», оригинал пока не трогаем.
«Kubernetes как симфонический оркестр» плохая картинка. Оркестр самому надо объяснять.
Один кривой рисунок на салфетке закрывает десять минут. Рисую при человеке, не достаю готовую схему. Пока линия появляется, он следит за ходом, а не кивает готовому плакату.
Держу три длины.
Тридцать секунд: сайт грузится в три раза быстрее, люди не уходят, касса растёт.
Две минуты: статику кладём ближе к человеку. Владивосток больше не качает Москву. Три секунды становятся одной, конверсия поднимается примерно на 15%.
Десять минут, если спросили: точки присутствия, кеш HTML, отдельный маршрут для API.
Всегда с верхней полки. Вниз только по вопросу.
«Всем понятно?» плюс тишина ничего не проверяет. Прошу пересказать своими словами или объяснить это своей команде. Если человек повторяет мои термины как пароль, он не понял. Если выдаёт свою картинку, можно идти дальше.
Первая версия всегда толще, чем надо. Docker в первый заход: изоляция на уровне ядра, своя файловая система, зависимости. Во второй: программа и все её вещи в коробке, коробка одинаково встаёт на любой машине. В третий: zip для программы, скопировал, распаковал, работает. Если влезает в один короткий абзац и читается без контекста, хватит.
Пауза, потом картинка
Определение JWT в первую секунду никто не просил. Сначала дыра.
Вы зашли на сайт. Логин один. Сервисов десять. Как каждому не спрашивать пароль заново?
Дальше молчу две-три секунды. Пусть сам покрутит. Потом концерт: на входе один раз проверили билет и надели браслет. В VIP, в бар, к гардеробу билет больше не смотрят. Браслет живёт до конца вечера.
Смотрю лицо. Загорелось: можно называть токен. Замешательство: картинку упрощаю, термин ещё рано. Проверка та же: пусть расскажет коллеге. Если в рассказе живёт браслет, а не «header, payload, signature», зашло.
Так же ветки. Двое правят один файл, как не затереть друг друга? Пауза. Копия «Книгановаяглава.doc», в оригинал не лезем, когда главу приняли, переносим. «Значит, можно пробовать, не ломая прод?» Вот оно.
Балансировщик. Десять тысяч человек, пять серверов, сами они очередь не разведут. Пауза. Пять касс без человека, который показывает на короткую. «То есть умный маршрутизатор?» Можно фиксировать.
Git branches и load balancer я так и объясняю. Схема одна: вопрос, тишина, бытовая сцена, и только потом слово из документации.
Крымский чек-лист
Тем летом на балконе напротив Аюдага в тумане я злился на стажёра. Третий раз разбирал архитектуру, он кивал, на следующий день приходил с вопросами с нуля. Открыл его конспект. Ни одной картинки, ни одного «зачем». Термины столбиком. Я объяснял так, будто он уже внутри.
Пересказал за двадцать минут по четырём проверкам. С тех пор перед серьёзным разговором прохожу их сам.
Ясно ли с первого раза? Одна мысль, без жаргона или с сразу расшифрованным словом, живой пример. «Event-driven, брокер, eventual consistency» для продакта пустой воздух. «Заказ не делается целиком. Система ставит в очередь: списать деньги, отправить письмо, списать склад. Каждый кусок делает свой сервис, как цех на заводе.»
Коротко ли? Можно ли срезать половину слов без потери хода. «Кеш кладёт частое в память. Запрос отвечает в десять раз быстрее» бьёт абзац про осуществление использования оперативной памяти.
Есть ли число и цена бездействия? «Микросервисы удобнее» никого не двигает. «До них релиз у Spotify занимал шесть недель, после две дня, команда выкатывает десять раз в сутки» уже можно нести на бюджет. Я не был в той комнате. Цифра нужна живая: своя, из тикета, из метрики. Чужой пресс-релиз держит слабее.
На чем стоим? «Kubernetes все так делают в 2025-м» голословно. «78% компаний с микросервисами по CNCF Survey 2024, на двух серверах с монолитом хватит Compose» можно защищать.
Продакту, который просит два спринта на переписку кода, я больше не несу «техдолг накопился, поверьте разработчику». Несу дом, к которому два года пристраивали комнаты без фундамента. Фича, которая год назад занимала спринт, теперь три. В прошлом квартале средняя задача уехала с пяти дней на пятнадцать, 40% спринта уходит на баги. Два спринта на укрепление возвращают пять дней и отбиваются за квартал.
Если хоть одна полка пустая, документ ещё не готов. Полчаса на эту проверку дешевле часа плохого объяснения и недели расхлёбывания.
Что обычно ломает разговор
Забываешь, каково не знать. «Это же очевидно» значит, вы пропустили этаж, без которого ваша картина не стоит.
Десять имён подряд. Go, gRPC, PostgreSQL с репликами, Redis Cluster, Kafka на три партиции. Человек держит пять-девять кусков. Остальное вываливается. Сначала карта, детали по просьбе.
Не та комната. Директору нужны деньги, риск, конкурент. Проджекту сценарий и срок. Разработчику компромисс. Пользователю, что у него перестанет болеть.
Прыжки без каркаса. «Сначала вот это, потом вот то, третье вот почему» дешевле, чем поток ассоциаций.
Пирамида здесь уместна один раз. Сначала вывод, потом три опоры.
Уходим в облако в первом квартале.
Сейчас железо не масштабируется: в чёрную пятницу упали, новый сервер едет две недели, в облаке пять минут. Счёт за простой режется примерно на 40%: платим за то, что жжём, отдельный девопс на стойку не нужен. Сосед уже там: его релиз две недели, наш два месяца, 15% клиентов ушли на скорость.
Детали под каждой опорой, не вместо неё. Если начать с выбора региона и класса виртуалок, директор услышит прайс, не дыру.
История держит лучше списка. Готовились к пятнице, прогноз десятикратный, синтетический нагрузочный прошёл. В 16:10 сайт лёг. Один медленный запрос к заказам держал всю базу. За сорок минут индекс на created_at и пул соединений. Потеряли тысячи минут простоя, спасли распродажу. Урок вшит в сцену: нагружать надо живыми запросами.
Перед встречей мне хватает одного предложения «зачем», двух картинок из жизни слушателя, одной схемы и пяти пунктов, не пятнадцати. Во время: начал с дыры, рисую, смотрю, не потух ли взгляд. После: пересказ, что осталось мутным, удачную картинку записываю. Она ещё пригодится.
Метрика простая. После объяснения спрашивают вглубь или переспрашивают базу. Решение рождается на той же встрече или назначается ещё одна «подумать». Собеседник на следующий день может отнести это своей команде.
Для новенького в команде я однажды повесил одну страницу вместо третьего созвона «объясни архитектуру».
Монолит = один большой офис.
Сервисы = отдельные здания.
Зачем: релиз одной команды не гасит другую.
Как у нас: человек → шлюз → доступ / заказ / письмо.
Сервисы пишут друг другу письмами и по HTTP.
Пять троек быстрее одной пятнадцатки. Карта: /docs/services-map.md
Стажёр с конспектом из одних терминов эту страницу пересказал на следующий день своими словами. Третий устный разбор этого не сделал.
Родителям не обязательно гореть глазами. Им должно стать ясно, что сломается, если не делать, и что станет иначе, если сделать. Остальное приложится.


