Телефонный звонок. Трубку берет отец трех дочерей и слышит:
— Это ты, мой лягушонок?
— Нет. Это хозяин пруда.

В последнее время стало привычно ссылаться на бас-фактор, как на что-то, что обязательно похоронит ваш проект, если вы наймете хоть одного толкового специалиста. Бизнесу, якобы, нужны сплошь взаимозаменяемые винтики, с правильно вывернутым гетеродином лайф-ворк баланса, способные хорошо использовать данные свыше фреймворки и библиотеки.

К сожалению, если у вас в команде нет звезд, вы никогда не сделаете звездный продукт. Магазин мягкой игрушки в Бирюлево, который будет вас худо-бедно кормить — запросто. А что-нибудь посерьезнее, поамбициознее и поприбыльнее — навряд ли. Потому что во всех серьёзных продуктах есть части, которые требуют оригинальных, пока необиблиотеченных, сложных решений.

Я не говорю о бас-факторе (назовем его БФ первого рода, или БФ-1, в честь клея), который полностью спровоцирован дегенеративным дядькой, боящимся потерять работу, и оттого пишущем нечитаемый, только ему одному (им вдвоем с поллитрой) понятный, запутанный код. Если любой разработчик в команде не может, или не желает, объяснять свой код коллегам — его надо не просто выгнать, а повесить на позорном столбе перед воротам в ойти, чтобы всяк сюда входящий видел и знал, что бывает с такими вот саботажниками.

К сожалению, такими нелицеприятными персонажами не исчерпываются все истоки возникновения бас-фактора. Основной, гораздо более частой, причиной — является то, что в команде есть только один человек, способный понять задачу корректно и воплотить ее в коде элегантно и безотказно.

В вышеупомянутом онлайн-магазине мягкой игрушки — таких задач может не случиться никогда. В серьезном бизнесе — они возникнают буквально из воздуха каждый месяц. Гугл вон специальный язык разработал для дебилов, чтобы они не попортили сделанное профессионалами, продолжая приносить хоть какую-то пользу компании.

Бас-фактор — это проблема не только и не столько гуру разработки, сколько их коллег. Настоящий профессионал всегда счастлив рассказать о тонкостях предложенного и воплощенного им решения. Научить. Разъяснить. Помочь. Но коллегам зачастую просто не хватает навыков, опыта, образования, наконец, чтобы это самое решение понять.

Тут на горизонте появляются инфоцыгане, наподобие Мартина и Фаулера (pun intended), которые обещают, что чистый код — панацея, решающая любые проблемы недопонимания, исцеляющая репозиторий и вообще всячески прочищающая карбюратор. Хех. Возьмите любую реализацию криптографии на эллиптических кривых и попробуйте упростить ее чистым кодом. Обещаю, что буду носить вам апельсины в Скровцова-Степанова все десять лет вашего рехаба.

Все разработчики делятся на две категории: тех, кто полагает, будто действительно сложные задачи давно решены опенсорсными библиотеками, не нужно изобретать свои велосипеды,… и тех, кто уже нет. В любой отрасли, кроме печати онлайн-магащинов под копирку, полно́ нерешенных задач. Которые можно прототипно решить в лоб прямо сейчас, но если бизнес окажется успешным — их придется решать по-настоящему.

«Давайте от входа запендюрим в наш магазинчик на три покупателя кафку и постгрес на три инстанса в разных регионах» — так себе вариант пути к успеху. Если вас не финансирует лично Греф, конечно. Кубер, оказывается, не решает задачу горизонтального масштабирования, если в кластере присутствует хоть какая-то связность. Сто тысяч параллельных потоков (гринтредов, корутин, горутин, процессов) — не слишком-то просто отлаживать. 3rd parties начинают чудить в самый неподходящий момент. И так далее.

Тут, как гласит старинная шарада, дорога раз-два-яйца. Если у вас в команде нет инженера(-ов), способного придумать архитектурное решение и реализовать его — происходит окостыливание вплоть до следующего факапа. Если таких инженеров несколько — они набрасываются на проблему со всех сторон, решают ее, верифицируют решение, и телега катится дальше. Обычно, к сожалению, если таких инженеров и есть, то их — один. Чтобы архитектурно правильно решить сложную задачу, бывает необходим такой сплав компетенций, опыта, интеллекта и практических навыков, что ��ешение получается немного кхм… непростым. Но верным, при том.

Так и возникает тот самый бас-фактор второго рода (БФ-2). Ведущий инженер и рад бы (счастлив, если честно), все растолковать коллегам, он и документацию написал, и тестами обсыпал, и примерами использования код повсеместно снабдил, и вообще все сделал правильно. Но одним коллегам недосуг, другим лень, а третие просто слишком тупы — понять это решение и правильно его использовать везде, где оно уместно.

В БФ-2 ведущий инженер не виноват, а случаи такого плана — возникают гораздо чаще, чем саботаж, и нас не учат, как с ними справляться. Вообще говоря, этот текст — чуть ли не первый в интернете, в котором оба типа не лепятся в одну кучу. БФ-1 довольно просто вылечить, потому что там одно узкое место: саботажник. Которого можно исправить, выгнать, отлупить розгами — что-нибудь да поможет. В случае БФ-2 место отказа — вся команда, включая менеджеров и лида, если таковой есть (да, так бывает, что прекрасный лид не в состоянии понять сложное решение, он не для того рос).

Что делать в этой второй ситуации — неясно. Я регулярно вел курсы прямо на рабочем месте: ситуация зеркальная. Кому-то лень, кто-то не тянет, у кого-то голова другим занята. Да и козырное «какие еще курсы от коллеги бесплатно, курсы — это говорящая голова и интернете задорого» — никуда не девается.

Я привозил в офис митапы и устраивал внутренние TechTalks. — Ровно то же самое. Во славу Парето 20% коллег ничему учить практически и не нужно, а 80% — учиться не хотят. Что делать в такой ситуации? Как победить апатию, активное стремление избежать ответственности, нежелание развиваться, если за это сразу не выписывают чек?

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

Когда конторы en masse поймут, что на одного синьёра должно приходиться три-пять мидлов, и примерно 10 джунов, — БФ-2 исчезнет сам собой. Но когда вокруг одни грёбаные синьёры, получившие лычку просто за выслугу лет, а не за решения, — пиши пропало.

А вы что думаете?