Читать книгу: «Притчи для падаванов»

Шрифт:

Вступление

Я довольно много лет обучаю людей. В компаниях – когда работаю с командами. Вне компаний – когда консультирую, менторю, помогаю ребятам расти. И в какой-то момент заметил одну штуку.

Можно час объяснять человеку, почему нельзя переписывать проект с нуля. Рассказывать про риски, про потерю бизнес-логики, про то, как команды раз за разом наступают на одни и те же грабли. Он послушает, покивает – и через месяц придёт с предложением переписать проект с нуля.

А можно рассказать анекдот про три конверта. И он запомнит. Навсегда. Потому что в следующий раз, когда кто-то скажет «давайте всё выкинем и сделаем заново», у него в голове щёлкнет: «А, это первый конверт».

Метафоры, притчи, байки – они работают. Не потому что люди глупые и не понимают серьёзных объяснений. А потому что хорошая история цепляется за память совсем по-другому. Она не ложится в папку «полезная информация, которую я когда-нибудь применю». Она садится где-то на подкорке и всплывает в нужный момент сама.

На одной из моих работ в команде были в основном ребята уровня джун-плюс. И там это работало вообще идеально. Рассказываешь анекдот – всем смешно, всем весело. А через неделю слышишь на стендапе: «Слушай, мне кажется, мы сейчас как тот мужик с Чебурашкой – делаем что-то, лишь бы делать». И все сразу понимают, о чём речь. Без длинных объяснений, без презентаций на двадцать слайдов. Один анекдот заменяет час разговоров.

В какой-то момент ребята начали спрашивать: «Откуда ты столько анекдотов знаешь?» Для них все эти истории были новыми. А для меня – просто частью жизни. Я их собирал годами, не специально – просто запоминал то, что цепляло. И каждый раз, когда на работе возникала ситуация, в голове всплывала подходящая байка.

И я подумал: а было бы прикольно собрать это в одном месте. Не учебник по менеджменту. Не «10 советов для успешного разработчика». А просто – книжку с анекдотами. Только каждый анекдот привязан к реальной ситуации из IT. С историями из моего опыта, с примерами, которые я видел своими глазами.

Эта книга – для джунов и мидлов в первую очередь. Для тех, кто только начинает свой путь или уже идёт по нему, но ещё не успел собрать свою коллекцию шишек. Может, какие-то истории помогут обойти грабли. А может – просто дадут название тому, что ты уже чувствовал, но не мог сформулировать.

Сеньорам тоже может быть интересно – но скорее в режиме «ха-ха, точно, у меня такое было». Ты в эти ситуации уже попадал. Для тебя это возможность вспомнить свои истории, посмеяться и, может, утащить пару анекдотов для своей команды.

Книга разбита на шесть частей. Каждая – про один принцип: думай перед тем как делать, доводи до конца, разберись прежде чем говорить, всему своё время, договаривайся правильно, работай с умом. Внутри каждой части – несколько глав. Каждая глава начинается с анекдота или байки, а дальше – история из реальной жизни и мысли о том, как это связано с нашей работой.

Читать можно в любом порядке. Хочешь с начала – пожалуйста. Хочешь открыть на случайной странице – тоже нормально. Главы связаны между собой, но каждая работает и сама по себе.

Ну что, поехали?

Я тебе скажу кое-что, а ты подумай над этим!

У моей мамы была фраза, которая в детстве доводила меня до белого каления.

«Я тебе скажу кое-что, а ты подумай над этим!»

Как же она меня бесила. Потому что за ней всегда шёл какой-нибудь совет. Не делай так. Попробуй по-другому. Подумай, к чему это приведёт. А я – подросток, я же всё знаю лучше всех. Какие советы? Я сам разберусь.

И я, конечно, не думал. Отмахивался. Закатывал глаза. Ну мааам, ну хватит. Я уже взрослый.

Прошло много лет. И – кто бы мог подумать – мама оказалась права. Причём не в каком-то конкретном совете, хотя и в них тоже. А в самом подходе. В этом «подумай».

Ведь как обычно бывает? Тебе кто-то что-то говорит – особенно близкий человек, особенно из заботы – и первая реакция: иголки. «Да что ты понимаешь». «Я сам знаю». Это даже не злость – скорее рефлекс такой. Подростковый. Который, если честно, у многих никуда не девается и в тридцать, и в сорок.

А человек-то не выделывается. Он просто делится тем, что сам прошёл. Тем, что ему далось непросто – и он не хочет, чтобы ты наступил на те же грабли. Это не нападение. Это забота. Просто она иногда приходит в неудобной упаковке.

Но есть ещё одна штука, поинтереснее.

Я провожу консультации. И довольно часто бывает так: приходит человек с конкретным запросом, я ему раскладываю по шагам – делаем раз, два, три, четыре, пять, вот почему это сработает. И знаете, какой самый частый ответ?

«Да, я это знаю».

Знает. Но не делает.

И это же не только про консультации. Это вообще про всё. Все знают, что чтобы похудеть – надо меньше есть и больше двигаться. Все знают, что надо высыпаться. Что надо откладывать деньги. И что? Ну вот честно – кто всё это делает?

Те, у кого есть результат, в какой-то момент поняли простую вещь: никакой магии нет. Результат – это набор простых действий. Берёшь и делаешь, раз за разом. А те, у кого пока не получается, часто ищут какой-то секрет. Лайфхак. Волшебную таблетку, которая всё изменит без усилий.

И вот тут мамина фраза заиграла для меня совсем по-другому. «Подумай над этим» – это ведь не про то, что ты чего-то не знаешь. Это такое мягкое приглашение остановиться и честно посмотреть на какую-то часть своей жизни. Может, тут что-то не так? Может, ты знаешь, что делать, но почему-то не делаешь? И может, стоит задуматься – а почему?

Родители-то нас любят! Они видят то, что мы сами замечать не хотим. И когда мама говорит «подумай над этим» – она не даёт готовый ответ. Она говорит: остановись. Посмотри. Может, стоит что-то с этим сделать.

Так что если по ходу чтения захочется сказать «да я это знаю» – попробуй остановиться на секунду. Может, и знаешь. А может, стоит подумать ещё раз.

Часть 1. Думай, потом делай

Ну что-то же нужно делать!

Гена с Чебурашкой опаздывают на поезд. Поезд уже отошёл, набирает скорость. Они что есть сил бегут за ним с чемоданами по перрону, кричат. Уже понятно, что не успеют.

И тут Гена бросает чемоданы и с размаху бьёт Чебурашке в бубен.

– Гена, за что?!

– Но ведь надо же что-то делать!!!

У меня был разработчик – назовём его Костя – который в спокойной обстановке работал нормально. Но стоило появиться давлению – сроки горят, все ждут результат, руководство нервничает – он начинал делать то, что я называл «биться головой о клавиатуру».

Появился баг – сервер в какой-то момент начинал жёстко грузить. Улетал по памяти, каскадная нагрузка, всё ложилось. Раньше не грузило, теперь грузит – фиг знает почему.

И вот что делает Костя. Смотрит на код, находит метод, который кажется ему подозрительным, переписывает и запускает нагрузочное тестирование. Тест идёт полтора-два часа. Результат – не помогло. Берёт другой метод. Переписывает. Два часа. Не помогло. Подключает коллегу – теперь они вдвоём сидят и переписывают всё, что кажется большим или подозрительным. Без гипотез, без логики – просто «ну вот это выглядит стрёмно, давай перепишем».

Четыре дня. Два человека. Я это называю monkey development – как monkey testing, только вместо тыканья в интерфейс ты тыкаешь в код наугад.

Сел с ними, говорю: окей, давайте попробуем по-другому. Раньше не грузило – теперь грузит. Значит что-то изменилось, правильно?

Откатились по коммитам до момента, где всё работало. Проверили – работает. Дальше даже думать не надо – тупое половинное деление. Коммит посередине – работает или нет? Нет – первая половина. Да – вторая. Ещё раз пополам. Ещё раз.

Минут через сорок нашли конкретный коммит, конкретный метод, который всё положил.

Сорок минут. Против четырёх дней двух человек.

И я понимаю, почему так получилось. Баг есть, прод страдает, все нервничают. Сидеть и думать – это как будто ничего не делаешь. А переписать метод и запустить тест – это действие, это прогресс, это можно на дейли сказать «мы работаем, проверяем гипотезы». Только это не гипотезы. Это Гена бьёт Чебурашку. Поезд-то уже ушёл, но надо же что-то делать.

Всё стадо

Стоят на холме два быка – старый и молодой. Внизу проходит стадо коров. Молодой пихает старого под бок:

– Ну давай, ну давай быстренько сбежим с холма! Вон ту, молоденькую, видишь? Или вон ту, стройненькую! Ну давай, быстренько!

Старый бык долго слушает, качает головой и говорит:

– Нет. Мы медленно спустимся с холма и медленно покроем всё стадо.

У нас был сервис с чатами. Личные сообщения, групповые чаты – всё стандартное. И в какой-то момент посыпались баги, связанные с прочитанностью сообщений. Сообщение показывается непрочитанным, хотя ты его открывал. Или наоборот – прочиталось, а потом снова стало непрочитанным. Или в группе показывает три непрочитанных, открываешь – а там пусто.

И каждый раз ребята реагировали как молодой бык. Прибежал баг – побежали чинить. Пофиксили. Через неделю новый баг – опять побежали. Потом ещё один. И ещё. Каждый раз – реактивно, каждый раз – точечный фикс конкретной проблемы.

А проблемы не кончались. Потому что каждый фикс – это ещё одна заплатка на франкенштейне.

Система сообщений когда-то писалась наспех. Просто чтобы работало. И для простых чатов – работало нормально. Но потом появились групповые чаты. Потом каналы. Потом треды. Потом супер-чаты с топиками. Каждую новую фичу прикручивали к старому фундаменту, который на неё не был рассчитан. И фундамент начал трещать.

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

И мы остановились. Сели. Разобрались, как вообще должна работать механика прочитанности – в личных чатах, в группах, в каналах, в тредах. Не как она работает у нас, а как она должна работать в принципе. Посмотрели, как это устроено архитектурно. Продумали data-модель. Нарисовали, как это должно выглядеть на концептуальном уровне.

А потом сравнили с тем, что у нас есть.

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

Полностью переписали всю архитектуру работы с сообщениями. С нуля. Один раз – но правильно. После этого целый класс багов просто исчез. Не потому что мы их пофиксили – а потому что в новой архитектуре им негде было жить.

Самое сложное было – не дёргаться. Баги сыпятся, все нервничают, а ты сидишь и рисуешь data-модель. Но старый бык на то и старый, что умеет не дёргаться.

Шлюх менять, а не кровати

Утро в офисе. Сотрудники двигают мебель – расставляют по местам, выравнивают по линеечке. Посреди этого хаоса стоит бабушка-уборщица со шваброй и наблюдает.

– Сынки, а чего это вы делаете? Переезжаете?

– Не, бабуль, мебель расставляем по фэншую. Когда всё правильно расставим – сразу выручка вырастет!

Бабушка качает головой:

– Сынки, я тут давно работаю. Ещё до революции это здание убирала. А был тут раньше публичный дом. И когда у них падала прибыль – они кровати не переставляли. Они сразу девочек меняли.

Пришёл я как-то на проект, а там весь код – один большой клубок. Тронул в одном месте – посыпалось в пяти других. Каждая фича стоила безумных усилий, всё шло медленно и больно.

Ну и что делать? Можно писать регламенты, договариваться о правилах, внимательнее ревьюить. Короче, двигать кровати.

Посмотрел я на это и думаю: не, так не пойдёт. Проблема же не в том, как мы работаем. Проблема в самом коде.

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

Причём делали не так, что сели на полгода и заморозили всё. Нет, каждый спринт брали один модуль, переводили его, оставляли интерфейс для связи со старым кодом. Потихоньку, кусок за куском, всё и поменяли.

Людей, конечно, пришлось переучивать думать по-другому. Но зато потом – красота. Комбинируешь данные откуда хочешь, ничего не сыпется.

С командами, кстати, бывает похоже.

Сидит команда, костяк не хочет работать. Ну вот так сложилось – не мотивированы, делают спустя рукава. Можно с ними разговаривать, пытаться раскачать, тимбилдинги устраивать.

А можно по-другому. Собрать рядом вторую команду – небольшую, замотивированную. Начать потихоньку передавать ей задачи. Она показывает результат, забирает всё больше. А первая либо подтягивается, глядя на это, либо сама расходится.

Жёстко? Ну да. Но иногда проблема не в процессах, а в том, кто работает. И тут уж сколько мебель ни двигай – не поможет.

Бесплатный фрагмент закончился.

Текст, доступен аудиоформат
4,0
4 оценки
229 ₽
Бесплатно

Начислим +7

Покупайте книги и получайте бонусы в Литрес, Читай-городе и Буквоеде.

Участвовать в бонусной программе