[Architecture] Треугольник Сеньора: Деньги, Время, Энергия. Почему выбрать можно только два

Захожу я как-то в LinkedIn (ну или в ту соцсеть с картинками, которую нельзя называть), а там — он. Идеальный Сеньор. Утром он бежит полумарафон. Днем закрывает сложнейшие тикеты, попивая смузи из сельдерея. Вечером коммитит в Open Source, инвестирует в крипту и осознанно воспитывает троих детей. И всё это с белозубой улыбкой, «в ресурсе» и «в моменте».

Я долго смотрел на этот образ и чувствовал себя бракованным микросервисом. У меня так не получалось. Если я пилил код в потоке — я забывал поесть. Если я шел в качалку — проседал пет-проект. Если я уделял время семье — на работе копился бэклог.

А потом я включил режим архитектора и понял: такая конфигурация невозможна в продакшене. Этот «Идеальный Сеньор» нарушает фундаментальные законы физики, а именно — закон сохранения энергии.

Мы — замкнутая система (в рамках суточного цикла). Чтобы получить результат (Деньги/Успех), нужно безвозвратно сжечь топливо (Время и Энергию). Утверждать, что у тебя есть одновременно и карьера, и уйма свободного времени, и ты полон сил — это как говорить, что ты сжег бак бензина, проехал 1000 км, но бак по-прежнему полон. Это описание вечного двигателя. А вечных двигателей не существует.

В IT есть CAP-теорема: в распределенной системе невозможно одновременно обеспечить Согласованность (Consistency), Доступность (Availability) и Устойчивость к разделению (Partition Tolerance). Выбирай любые два.

Я прикинул это на человека и вывел свою CAP-теорему Ресурсов. И, судя по логам, попытка держать все метрики на 100% — это прямой путь к Kernel Panic.

1. Три метрики нашего сервера

Тут честно, без эзотерики про «чакры» и «успешный успех». Мы — биологические машины, которые крутятся на трех ресурсах:

  1. Energy (CPU / Voltage). Наш ток. Способность мозга концентрироваться и «тащить». Это не абстрактная «сила духа», а вполне конкретная биохимия (дофамин, глюкоза).

  2. Time (Clock Cycles). Хард-лимит. 24 часа. Не масштабируется (пока не изобрели клонирование).

  3. Money (HDD / Storage). Накопленный результат. Единственный ресурс, который можно сохранить (задампить) и который не исчезает утром. Это наш кэш, на который мы покупаем чужие такты процессора.

Мое наблюдение: В любой момент времени система может держать в пике только два параметра. Третий неизбежно проваливается.

2. Типовые конфиги (Узнай себя)

Я просто оглянулся по сторонам, посмотрел на свои старые коммиты, на коллег в зуме и заметил три железобетонных паттерна. Попытка быть всем сразу — это баг. Быть одним из этих конфигов — норма жизни.

Конфиг А: Гаражный Рок

  • Стек: Time++ | Energy++ | Money--

  • Как выглядит: Студент, джун или фаундер на ранней стадии.

  • Логи: Глаза горят, код пишется по 14 часов, питание дошираком. Денег нет, но есть драйв перевернуть мир.

  • Баг: Если не задеплоить монетизацию до того, как сдохнет батарейка (Энергия), проект закроется с ошибкой Out of Memory.

Конфиг Б: Уставший Энтерпрайз

  • Стек: Money++ | Time++ | Energy--

  • Как выглядит: Тимлид в крупном банке или сеньор на удаленке, который "познал жизнь".

  • Логи: Зарплата капает, ипотека закрыта, выходные свободны. Можно полететь на Бали. Но… лень даже выбрать отель. Хочется лежать лицом в стену и скроллить рилсы.

  • Баг: Low Voltage. Ресурсы есть, но система не заводится. Самый коварный статус: снаружи — «успешный успех», внутри — 503 Service Unavailable.

Конфиг В: Режим Берсерка

  • Стек: Money++ | Energy++ | Time--

  • Как выглядит: Карьерист, который хочет стать CTO к 25 годам.

  • Логи: Перформит как боженька. Денег куры не клюют, но тратить их некогда, потому что живешь в Jira.

  • Баг: Request Timeout. Система работает на оверклокинге (разгоне). Кулеры воют так, что слышно соседям. Обычно заканчивается внезапным BSOD (Blue Screen of Death) в кабинете кардиолога или психотерапевта.

Для себя я сделал вывод: если я вижу человека, у которого "есть всё и сразу" — я просто смотрю на хорошо отрендеренный фронтенд. А что там творится в логах бэкенда и сколько костылей держит этот фасад — история обычно умалчивает.

3. Патч: Динамическая Балансировка (Load Balancing)

Сразу важный дисклеймер: я не коуч, не психолог и не призываю всех срочно менять свою жизнь. У каждого свой «прод» и свои условия эксплуатации. То, что описано ниже — это просто git log моих попыток починить собственную систему. Я перестал искать мифический «Статический Баланс» и перешел на Dynamic Load Balancing. Возможно, этот подход пригодится кому-то еще.

Хак 1: Money -> Time (Аутсорсинг)

Было время, когда я, будучи сеньором, тратил субботу на генеральную уборку. Я чувствовал себя «хозяйственным мужиком». Потом я посчитал свой Hourly Rate (стоимость часа). И понял, что сейчас я мою пол по ставке $50/час. Формально — это экономическое преступление. Я сжигаю ресурсы дорогого GPU на майнинг копеечной монеты.

Но есть один Exception: этот скрипт работает, только если задача нам в тягость. Если же переборка двигателя, стрижка газона или мытье посуды для нас — это медитация и способ «переключить контекст», то это уже не работа. Это процедура Active Cooling (Активное охлаждение). В таком случае мы оставляем задачу, но меняем ей тег с Maintenance на Recovery.

Мой алгоритм прост: если задача высаживает батарейку и бесит — я её покупаю (делегирую), если задача разгружает мозг и успокаивает — делаю сам, даже если это стоит копейки.

Хак 2: Time -> Energy (Maintenance Mode)

Мы привыкли считать, что если мы не пишем код — мы не работаем. "Надо быть продуктивным!" Но любой админ знает: серверу нужно Maintenance Window. Окно обслуживания. Сон, прогулка без телефона, тупление в потолок — это не прокрастинация. Это дефрагментация диска. Без этого окна скорость чтения данных (моя креативность) падает до нуля. Мой фикс: планирую «ничегонеделание» в календаре как критическую задачу с блокером. И не испытываю вины. Сервер на техобслуживании.

Хак 3: Energy -> Money (Proof of Work)

Это, собственно, работа. Мы продаем заряд своей батарейки за кэш. Ошибка: Пытаться кодить, когда Voltage на нуле. Я часто замечал за собой: сидишь 4 часа над задачей, тупишь, ненавидишь себя. Утром на свежую голову решаешь её за 15 минут. Мой фикс: Не имитировать аптайм. Если батарейка села — сервер гасится. Точка. Лучше я посплю и сделаю за час, чем буду 8 часов изображать бурную деятельность.

4. Оптимизация запросов (Index Scan)

И последнее наблюдение из практики. Почему одни упахиваются и получают копейки, а другие работают 4 часа и гребут миллионы? Дело не в «усердии». Дело в SQL-запросах к реальности.

  • Full Scan (Путь джуна): Читать всю таблицу (работать больше часов), чтобы найти одну запись. Это "Brute Force" подход.

  • Index Scan (Путь архитектора): Потратить время на построение индекса (нетворкинг, архитектура, изучение инструментов) и находить ответ за 1 миллисекунду.

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

System.exit(0)

К чему я пришел? Я перестал рефлексировать, что я «не в балансе». Быть в дисбалансе — это нормально для живой системы.

  • Сейчас сезон кранча? Ок, я жертвую временем, коплю деньги.

  • Выгорел? Ок, я трачу деньги, покупаю время и восстанавливаю энергию.

Главное — не врать себе, в каком конфиге ты сейчас находишься. И не пытаться запустить High-Load на сервере, у которого мигает лампочка Low Battery.

P.S. Ни к чему не призываю. У каждого свой продакшен и свои нагрузки. Но лично мне эта модель помогла перестать дергаться и начать относиться к себе как к системе, которой просто иногда нужны бэкапы.

Я продолжаю собирать библиотеку таких «инженерных патчей» для мозга в своем Telegram-канале. Если вам ближе термины Uptime и Latency, чем «поток» и «вибрации» — заглядывайте. Берегите свои сервера, коллеги.

Информация на этой странице взята из источника: https://habr.com/ru/articles/985858/