Понедельник, 09:30. Вы открываете Slack, Telegram и Jira. Там уже горит. В личке пять непрочитанных: «Посмотри, тут прод упал», «Ты единственный знаешь, как работает этот костыль», «Без твоего аппрува не можем покатить релиз».

В этот момент в лимбической системе происходит мощный выброс дофамина. Включается режим Атланта. «Без меня тут всё рухнет. Я несущая стена этого карточного домика. Я избранный».

Мысленно надевается плащ Супермена (поверх офисной рубашки или мятой футболки), расправляются плечи, берется ведро кофе и начинается операция «Спасение проекта». К вечеру ресурс батареи на нуле, глаз дергается, но есть глубокое удовлетворение. ЧСВ почесано, ценность для человечества доказана.

Спойлер: Я сам жил в этом режиме несколько лет. И сейчас, глядя на логи, могу сказать честно. С точки зрения системной архитектуры это не героизм. Это классический паттерн SPOF (Single Point of Failure). Единая точка отказа. Инженер в такой позиции совсем не Супермен. Он тот самый старый сервер в углу, на который боятся дышать, потому что он держится на изоленте и честном слове.

Сегодня поговорим о Bus Factor. Почему быть «священной коровой» проекта означает тупиковую ветвь эволюции для Сеньора. И как перестать быть инженером, которого боятся отправить в отпуск.

1. Архитектура уязвимости: Что такое Bus Factor?

Для тех, кто прогуливал пары по риск-менеджменту, напомню определение.

Bus Factor (Фактор автобуса) — количество участников команды, которых должен сбить автобус (ну, или более гуманно: которые должны выиграть в лотерею и уехать дауншифтить на Бали), чтобы проект остановился.

Если в проекте есть модуль, который знает только условный Вася, и без Васи его нельзя ни задеплоить, ни пофиксить, то Bus Factor этого модуля равен 1. В мире HighLoad систем это называется Critical Vulnerability.

Представьте дата-центр. В центре стоит один-единственный сервер, через который идет весь трафик.

  • Балансировщика нет (все запросы летят в него).

  • Репликации нет (Master есть, Slaves отсутствуют).

  • Документации нет (админ, который его настраивал, ушел в монастырь в 2017-м).

Если этот сервер перегреется, зависнет или просто решит уйти в Maintenance Mode, ляжет весь регион. Любой джун скажет: «Кто это проектировал? Это же легаси». Но парадокс в том, что именно такую архитектуру мы часто строим из собственной карьеры. Мы замыкаем на себя процессы, знания и доступы, становясь узким бутылочным горлышком всей системы.

2. Почему мы хотим быть SPOF? (Root Cause Analysis)

Я наблюдал этот баг в десятках команд и, каюсь, сам был его носителем. Корень проблемы лежит не в плоскости хард-скиллов, а в психологии бэкенда. Bus Factor = 1 обычно создается по трем причинам.

А. Страх: Job Security через Обфускацию

Где-то глубоко внутри часто сидит джуниорский страх: «Если я передам эти знания, напишу подробную документацию и все автоматизирую, то зачем я тогда нужен? Меня же заменят на кого-то дешевле!»

Включается механизм защиты, который я называю Job Safety by Obfuscation:

  • Код пишется так, чтобы в нем черт ногу сломил без автора.

  • Документация игнорируется, потому что «код самодокументируемый» (спойлер: нет, через полгода вы сами его не поймете).

  • Ключевые решения замыкаются на себя.

Это классический симптом «Синдрома Самозванца», о нем мы говорили вот в этой статье. Кажется, что это гарантия занятости. На самом деле это гарантия Рабства. Такого специалиста невозможно повысить. Менеджмент смотрит на него и думает: «Он крутой, но если мы сделаем его CTO, кто будет поддерживать этот кусок легаси на Perl? А сидеть на двух стульях — завалить и стратегию, и поддержку». Это карьерный Deadlock.

Б. Дофаминовая игла «Спасателя»

Тушить пожары весело. Серьезно. Когда всё горит, а ты приходишь и за 5 минут вносишь правку в проде, ты получаешь мгновенный Feedback Loop. Тебе говорят: «Красавчик! Спас!».

А писать документацию или настраивать автотесты, чтобы пожаров не было, работа скучная и незаметная. Никто не придет и не скажет: «Спасибо, что сервер сегодня работал штатно». Поэтому подсознательно создается хаос, чтобы потом его героически преодолевать. Мы превращаемся в пожарных, которые сами же и поджигают, чтобы было чем заняться.

В. Иллюзия контроля (God Mode)

Убеждение «Хочешь сделать хорошо, сделай сам» стало девизом плохого архитектора. Пытаясь контролировать все потоки (код джунов, дизайны, фронтенд, инфраструктуру), мозг уходит в Троттлинг. Человеческий процессор одноядерный, и попытка запустить на нем многозадачность ведет только к перегреву и потере контекста.

3. Bus Factor в семье: Домашний Vendor Lock-in

Частенько эта кривая архитектура тащится домой. Если провести аудит семьи как IT-проекта, результаты часто пугают.

Сценарий: один человек выступает единственным сис-админом с правами Root, на котором держится весь домашний «прод». Все семейные подписки — от VPN и стримингов до облачных хранилищ — висят на одной-единственной карте. Стоит банку её заблокировать или там просто кончатся средства, как вся цифровая жизнь домочадцев встает на паузу. Добавьте сюда переусложненную инфраструктуру, где включение мультика требует не нажатия кнопки на пульте, а ввода пароля, который знает только папа (потому что «так безопаснее»). А коды двухфакторной аутентификации (2FA) от критических сервисов приходят на один-единственный физический телефон. Ваш.

Аудит безопасности: Если завтра главный админ становится недоступен (больница, срочная командировка без связи), система «Семья» сохраняет работоспособность? Сможет ли «Second Node» (партнер) войти в облако? Оплатить интернет, если отвалился автоплатеж? Разобраться с доступами?

Если ответ «Нет, начнется паника и тьма», то это Legacy-монолит. Это не забота о близких. Это Vendor Lock-in (жесткая привязка к вендору). Семья оказывается в уязвимом положении, полностью зависимая от аптайма одного сервера.

4. Цена незаменимости (Total Cost of Ownership)

Быть незаменимым экономически невыгодно, хотя бы по этим двум причинам.

  1. Отпуск Шрёдингера. Вы вроде бы на пляже, но ноутбук открыт. Семья грустно пьет коктейли, а вы пытаетесь поймать Wi-Fi, потому что «Сервер упал, а Миша не знает, какую кнопку нажать». Это не отпуск. Это удаленка с плохим интернетом и песком в клавиатуре. Система с Bus Factor = 1 физически не отпускает администратора.

  2. Выгорание (Kernel Panic). Работа без бэкапов делает любой сбой вашей личной виной. Любой простой становится вашей ответственностью. Это прямая дорога к истощению ресурса, о чем мы писали в этой статье.

5. Протокол повышения отказоустойчивости

Переход от роли «Узкого места» к роли Архитектора требует смены парадигмы. Вместо «Я всё сделаю» внедряются принципы High Availability.

Шаг 1. Documentation First (Бэкап интеллекта)

Главный враг Bus Factor зовется устной традицией («Спроси у Миши, он знает»). Задача архитектора сделать так, чтобы Миша был не нужен для рутины.

Знания выгружаются на внешний носитель:

  • Рабочий контур: README.md в корне проекта с заголовком «ЧТО ДЕЛАТЬ, ЕСЛИ ВСЁ УПАЛО». Описывается не поэма о коде, а алгоритм восстановления.

  • Домашний контур: «Семейная Wiki». Расшаренная заметка в телефоне. Пароли, счета, инструкции. Назовите её «План Б, если папа улетел на Марс». Документация работает как способ клонировать свой интеллект, чтобы он работал, пока вы спите.

Шаг 2. Chaos Engineering (Учения Хаоса)

У Netflix есть утилита Chaos Monkey, которая рандомно роняет сервера для проверки устойчивости системы. Полезно иногда становиться такой «обезьянкой» для своего отдела и семьи.

Практика называется Maintenance Window: Объявляется плановое окно недоступности. «В среду меня не будет. Вообще. Телефон выключен». И телефон действительно выключается.

Сначала будет паника. Вам будут писать в телеграм, звонить в рельсу. А потом... система адаптируется.

  • Джун нагуглит решение.

  • Жена найдет квитанцию.

  • Роутер перезагрузят выдергиванием из розетки. Всё, что сломалось и не починилось, считайте Техническим долгом. Его нужно зафиксировать и закрыть (написать скрипт, выдать доступы).

Шаг 3. Делегирование как Load Balancing

Когда джуниор спрашивает «Как это сделать?», соблазн сделать самому за 5 минут велик (объяснять придется 20 минут). Системное решение состоит в том, чтобы инвестировать эти 20 минут. Пусть он сделает криво. Пусть придется переделывать. Но в следующий раз запрос будет обработан автоматически.

Это настройка Load Balancer: трафик перенаправляется на другую ноду. В этой статье мы обсуждали, как важно уметь говорить «Нет». Говорить «Нет» рутине означает говорить «Да» построению системы.

6. Вывод: Эволюция от User к Root

В IT существуют три уровня зрелости специалиста:

  1. Junior: «Я не знаю, как это работает, и мне страшно».

  2. Middle/Senior (Герой): «Я единственный знаю, как это работает! Без меня всё умрет!»

  3. Architect: «Я построил систему так, что она работает без меня. Я могу исчезнуть, а процесс не остановится».

Истинное мастерство заключается в том, чтобы быть ненужным в операционке. Создать самоподдерживающуюся структуру. Только так приобретается самое ценное качество инженера. Суверенитет. Свобода выбирать интересные задачи, а не разгребать легаси. Свобода управлять своим временем. Свобода жить.

Посмотрите на свой отдел. Посмотрите на свою семью. Какой у вас Bus Factor? Если он равен единице, то это не повод для гордости. Это время для рефакторинга.

P.S. Я продолжаю собирать библиотеку инженерных подходов к жизни в своем Telegram-канале. Заходите, если любите системный подход.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Симуляция: Вы улетели на необитаемый остров без связи на 14 дней. Что будет с проектом и семьей?
33.33%High Availability: Система работает штатно. Коллеги деплоят, семья платит по счетам. Я вернусь, а в личке только мемы.1
66.67%Degraded Mode: Система работает, но «троит». Бэклог вырос, жена/муж ругается, что не нашли соль, но критических аварий нет.2
0%SPOF (Герой): Всё рухнуло. Прод лежит, заказчик в ярости, дома отключили интернет за неуплату. Меня ищут с Интерполом.0
0%Job Security: Я специально запутал код и спрятал пароли, чтобы они страдали без меня. Это моя гарантия занятости.0
0%404 User Not Found: Если честно, никто даже не заметит моего отсутствия. (Грустный смайлик)0
Проголосовали 3 пользователя. Воздержался 1 пользователь.