Федор Борщев

Кручу гайки. Пишу матом о книгах, саморазвитии и об управлении проектами. Настраиваю ин-хаус разработку в стартапах.

Не кидайся ссылками

2018 год и свой огородик

20 лет назад существовал такой класс софта — анализаторы логов. Это были развесистые скрипты на перле, которые парсили журналы веб-сервера и считали простейшие метрики, вроде глубины просмотра или популярности конкретных страниц. Чтобы их установить, нужен был Системный Администратор — чувак из центра затрат, который в добавок к синдрому вахтера обладал сакральными знаниями об установке модулей перла, настройке рейд-массивов и обновлении ядра.

Теперь анализаторы логов заменила Гугль-аналитика, сисадминов заменил докер, и появилось отдельное слово для обозначения невиртуальных серверов — bare metal. Однако я до сих пор встречаю компании, которые ставят себе «анализаторы логов» — корпоративный гитлаб вместо гитхаба, локальные версии дженкинса вместо серкла, свои хостинги, почтовые сервисы, трекеры задач и пр.

Слева — свой огород, справа — заемная инфраструктура

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

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

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

Неужели ваше время стоит дешевле?

Топ-даун и прогрессивный джипег для программистов

Правило Парето гласит, что 80% времени программиста тратится на 20% требований. К примеру, на любом современном фронтенд-фреймворке работающую корзину в интернет-магазине можно запилить за день — можно будет добавить/удалить товар и отправить заказ.

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

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

Инженеры называют этот подход top-down, дизайнеры — прогрессивным джипегом.

Проверь через два дня

Многим программистам (и менеджерам) не хватает простого навыка — проверить через два дня.

  • Сделал кнопку — проверь через два дня, нажимают ли ее вообще? Что видят, когда нажали?
  • Сделал интеграцию — проверь через два дня, сколько пришло данных? Пришли ли вообще?
  • Сделал новое уведомление — проверь логи. Что уходит пользователям? А много вообще ушло?

Проверка через два дня не требует никакого напряжения и предотвращает кучу долга — в проекте не копятся неработающие и невнедренные фичи.

Лучше через два дня самому узнать, что фича не работает, чем через неделю узнать то же самое от пользователей. Или не узнать вообще.

Кто должен проверять через два дня, если задачу делали впятером? Конечно ты.

Плато продуктивности

Обычно уровень работоспособности выглядит так: ∿∿∿∿. Подъёмы чередуются со спадами. На подъёме хорошо заниматься творчеством, на спаде — рутиной: закрывать долги, отвечать на письма, общаться с коллегами. Если на спаде сделать творческую работу, ее скорее всего придётся переделывать — вы проснетесь утром и поймёте, что результат никуда не годен.

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

Программист делает твою (да-да, твою) задачу

Работа с некачественным кодом сильно выматывает — вместо фокуса на цели приходится разбираться, о чем же думал «тот парень» (и тот, кто его подгонял). В таком режиме волна продуктивности превращается в болото: ∿∿—\____. Хочется уволиться и пойти работать машинистом метро.

Нормальная загрузка программиста похожа на плато: ——————. На плато нет всплесков вроде срочных задач и эмоциональных подъёмов. Но нет и болота с унылым разгребанием долгов. Программист на большом проекте — это марафонец.

Без срочных задач

Во всех своих командах я избавляюсь от срочных задач. Люблю, когда даже в трекере такого флага нет.

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

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

Мы разозли Время и теперь у нас всегда полчаса до дедлайна

Конечно, не все люди совместимы с таким графиком — даже среди высокоразвитых профессионалов много тех, кто зависит от внешних стимулов. Такие люди обычно выявляются за первые две недели испытательного срока. Зависимость от внешних стимулов — не порок, это скорее индивидуальные особенности. Есть же чуваки, которые наоборот, не совместимы с большими компаниями (как я), или в принципе не могут работать без личного контакта с коллегами.

Вот вам три шага, чтобы победить срочные задачи в вашей команде:

  • Разберитесь с техническими и управленческими долгами. Чаще всего срочные задачи возникают на уровне «я выкатил, а оно упало», и «я выкатил, а через неделю поняли, что нихуя не работает». Чтобы привести долги в порядок, нужна сила воли и пара месяцев. Если вы понимаете, что за два месяца не разберетесь — значит что-то в вашем проекте серьезно не в порядке, нужно все бросать и лечить.
  • Перестаньте оценивать задачи в часах. Если в вашей команде меньше 5 человек — совсем не оценивайте. Если больше, и план на неделю не удается обсудить с каждым лично — попробуйте оценивать днями.
  • Возьмите комфортный интервал планирования, на который вы можете построить четкий план, к примеру 1 неделю. Заложите запас и не трогайте ребят в течение этого интервала.

Критика

Когда я только попал в Студию Лебедева, меня больше всего удивил не музей старья, и даже не кот Филя.

Меня шокировал объем критики. В студии принято поправлять новичков во всем — в письмах, документах, в общении с командой, в разговоре с клиентом. Чтобы понять количество критики, загляните в любой «процесс» — и это только видимая часть замечаний, которые получает дизайнер от арт-директора.

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

Только не кричите, как эти стоковые мужики

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

Критикуйте. Настраивайте жёсткий код-ревью. Делайте системы согласований. Собирайте обратную связь и ещё раз критикуйте.

Как называть новый срок, если проебал старый

Что глупого можно сделать, когда опаздываешь на встречу? Предупредить об опоздании за пять минут до начала. А еще глупее? Пообещать прийти через 10 минут, а прийти через 20 — опоздаешь дважды.

Когда я опаздываю, я волнуюсь. А когда я взволнован, я неверно воспринимаю реальность — переоцениваю свои силы и называю заниженные сроки. В новые сроки невозможно уложиться, и все повторяется по кругу — доверие разваливается вместе с проектом.

Но я же

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

Ошибиться со сроком — не страшно. Страшно — ошибиться второй раз: тебе перестанут доверять.

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

Хуйня Настоящая причина
Я неверно оценил свои силы Я долго разбирался с новым плагином для Ангуляра
Изменились условия задачи Я не учел, что потребуется переверстывать шапку
Я неверно понял задачу Я не обсудил задачу с постановщиком

Подумай, что еще упустил при планировании. Выспись — новый срок назовешь завтра, не страшно. А если менеджер прижимает к стенке и требует дату прямо сейчас — умножай срок, который хотел назвать, на три.

Длинные ТЗ не работают

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

От этих монументальных документов никто потом не отклонялся — в плановой экономике нет конкуренции, можно выпускать одни и те же жигули хоть 30 лет подряд.

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

Не заморачивайтесь на этапе проектирования — все равно в реальной жизни все пойдёт не так, и ваше ТЗ станет никому не нужным.

Чтобы запустить интернет-магазин, не обязательно продумывать 20 состояний корзины. Разбейте проект на короткие итерации и концентрируйте усилия только на текущей:

  • Концептуальная страница-заглушка с телефоном
  • Страница с контактами и десятком самых продаваемых товаров
  • Каталог товаров, «купить в один клик»
  • Корзина
  • Синхронизация с црм, 1с

С каждой новой итерацией вы сверяете часы с бизнесом — выясняете невысказанные требования, анализируете поведение пользователей и корректируете планы. Кажется такой подход ещё называют «аджайл».

Не совсем пустой инбокс и почтовое банкротство

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

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

После перехода на пустой инбокс, когда в ящике становится меньше 10 000 писем, почтовый клиент начинает работать как монитор со стикерами:

  1. залезаем в почту, чтобы найти старое письмо от клиента;
  2. видим письмо о подарке коллеге на свадьбу, которое не удалили, чтобы не забыть скинуть 100 рублей;
  3. задумываемся о подарке;
  4. просыпаемся в компании котиков из фейсбука.

В моем случае копились письма-цели: долгие задачи вроде согласования документов или сложных фич на проектах. На удаление этих писем стояла какая-то внутренняя блокировка: как же, ведь это письмо от Самого Главного! Задачи из таких писем я не добавлял в задачник, a хранил во входящих. Мой пустой инбокс никогда не был по-настоящему чистым — всегда оставалось 3–4 письма, которые я привычно игнорировал. Только отвлекался на них несколько раз в день, чтобы вспомнить от кого они и зачем.

Привычка исчезла как только я 2 раза за неделю применил почтовое банкротство — удалил по 40–50 писем не читая, чтобы не размывать фокус. И, представьте себе, небо не упало на землю — все, кому действительно было что-то от меня нужно, не поленились и написали еще раз. Документы не потерялись, цели не сместились дедлайны не проебались. Не произошло вообще ничего!

Почтовый клиент хорошего менеджера

Почтовое банкротство похоже на кровопускание — по неосторожности можно и убиться. Но мне оно помогло победить старую вредную привычку.