FEDOR BORSHEV
24.5K subscribers
36 photos
1 video
4 files
673 links
Рассказываю, как руководить программистами

[email protected] / borshev.com

Реклама не продаётся
Download Telegram
У канала новости — благодаря Саше Бизикову обновилась иконка. Саша успешно проходит сложный путь из разработчика в дизайнеры, ведет интересный канал @bizikovru, и любезно согласился помочь с иконкой.

Вторая новость: благодаря пинку от все того же Саши, наша дорогая редакция наконец-то определилась с форматом канала.

Все новые заметки будут посвящены одной (и моей любимой) теме — производству сложных проектов с позиции CTO. Тем много — инструментарий, управление командами разработки, построение отношений с бизнесом, проектный менеджмент. Иногда будут появляться новости про мой любимый стек — Python и vue.js.

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

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

Минус публичного календаря — сложно открывать его наружу компании, к примеру для собеседований или подрядчиков. Чтобы записаться, получателю приходится обязательно регистрироваться в гугль-каленадре. Процесс записи тоже сложен — как человеку извне можно понять, удобно ли мне созвониться в 21:00, или просто это время свободное?

Второй минус гугль-календаря — чтобы удобно настроить доступные часы, приходится действовать от противного: не ограничивать доступное время, а закрывать недоступное какими-нибудь фейковыми делами, вроде «занято».

Чтобы решать эти проблемы, существуют сервисы планирования, вроде calendly.com или appoint.ly. Основной продукт у этих сервисов предельно простой — создаешь в них расписание, подключаешь свой календарь и получаешь публичную ссылку, которую рассылаешь всем авторизованным.

Сервис сам определяет свободное время (в рамках расписания конечно), добавляет новые события в календарь, и даже рассылает уведомления. Большинство этих сервисов доступны бесплатно на весьма лояльных условиях.

Вот так к примеру выглядит ссылка на мой календарь сегодня:
​​Не любить новые фичи

Если вы работали с опытными продуктовыми менеджерами, то знаете, насколько они не любят новые фичи. Прежде, чем поставить фичу в план, продуктолог испробует все возможные способы от нее отказаться. У Интеркома даже целый мануал на эту тему есть.

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

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

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

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

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

Давайте экономить деньги и не любить фичи.
Я не знаю ни одного владельца нового макбука, который был бы доволен тачбаром. Написал статью, которая рассказывает, как не отвлекаться на ненужные кнопки и переключающиеся треки: https://telegra.ph/Kak-zhit-s-tachbarom-02-27-2
​​Стражники

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

Существует несколько сервисов для мониторинга таких вещей. Я рекомендую sentry.io или opbeat.com. Последний ещё и умеет мониторить производительность приложения. Оба сервиса бесплатны на небольших нагрузках.

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

Сервисы очень легко устанавливаются на фронтенд любого сайта. На бекенд, если у вас не битрикс — тоже.
Фундамент для автоматизации

Первая автоматизация, которая должна появиться в вашем проекте — непрерывная доставка.

CI/CD — это процесс, который после каждого коммита выполняет манипуляции над кодом: валидирует, тестирует и снимает метрики качества. В случае, если код ок, то CD автоматически раскатывает его по серверам.

CD спасает программистов от кучи рутины: не нужно хранить ключи от серверов, ждать выполнения проверок на локальной машине (любой SaaS умеет пускать тесты хоть в 10 потоков), настраивать окружение для деплоя.

Налаженный процесс CI/CD открывает дорогу к куче ускоряющих/удешевляющих практик: 10 релизов в день, gitflow, TDD/BDD. Даже Agile (простите) не работает без непрерывной доставки.

Вопреки заблуждению, которое я часто слышу от коллег, чтобы внедрить простейший CI/CD не нужно усложнять инфраструктуру. В начальном варианте не нужны даже docker и ansible — достаточно пары скриптов, которые может написать любой знакомый с bash программист.

Прямо сейчас начните отправлять через CD все — ваш лендинг, сайт и приложение, скрипты для воксимпланта.

Самый крутой CI — circleci.com. Полный каталог всех сервисов — на гитхабе.
​​Теория игр

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

Стратегии нужны не только в шахматах и Heroes III — теория игр отлично проецируется на все ситуации, где нужно принимать решения — ценовые войны, выборы, переговоры, и даже семейные отношения.

Единственная книга, которую я знаю на русском — одноименная «Теория игр». Книга — сложная. Авторы, видимо под влиянием преподавательского прошлого, наполнили книгу выдуманными примерами, сложными настолько, что не держатся в памяти — пока дочитаешь доказательство, забываешь, что оно доказывает, приходится возвращаться назад.

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

Уже несколько лет я практикую классное правило продуктивности — ни с кем не встречаться по понедельникам.

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

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

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

В терминологии ГТД мой личный понедельник называется «еженедельный обзор».
По-моему это актуально не только для дизайна интерфейсов, но ещё для программирования, торговли помидорами и любой другой сферы, где можно измерить качество.
Forwarded from Без шелухи
​​😈 Потрясающий интерфейс и отвратительная морда

За последние недели несколько человек написали мне сообщения с общей темой «ты вот топишь за хорошие интерфейсы, а что толку — менеджмент всё равно всегда выбирает какаху, лишь бы подешевле».

Мне кажется, тут недопонимание.

На самом деле, нет выбора между «божественно прекрасный интерфейс задорого» и «самое убогое во вселенной отстоище задёшево». Обычно есть как минимум такие варианты:

1. Сделать плохо, потратив N ресурсов.
2. Сделать нормально, потратив те же N (или чуть больше) ресурсов.
3. Сделать отлично, потратив k*N ресурсов.

Понимать принципы создания хороших интерфейсов стоит хотя бы для того, чтобы видеть вариант 2. Иначе вы остаётесь только со «сделать плохо».

Действительно, далеко не всегда вы пойдёте по варианту 3 — потому что есть ограничения и есть приоритеты. Но почти никогда не останетесь с вариантом 1, потому что между «сделать плохо» и «сделать нормально за те же деньги» нормальный менеджер всегда выберет «сделать нормально».
Два года назад я подобрал замену эверноуту — Simplenote в связке с nvALT. С тех пор эверноут стал еще жирнее, Apple в 10 раз улучшил Notes, но я все еще пользуюсь своей связкой.

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

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

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

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

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

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

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

В стартапах все по-другому. Программист в стартапе должен обладать нетипичными для больших компаний навыками:
— Быстро въехать. Легаси у меня нет, и я не хочу, чтобы кто-то за деньги инвесторов просто изучал новые технологии.
— Не бояться отрывать жопу от стула и выходить за рамки. Это стартап, тут CTO может подменить грузчика.
— Уметь доводить дела до конца. Менеджеров, которые с палкой следят за дедлайнами, у нас тоже нет.

Хороший профиль на гитхабе (с контрибьютами и запущенными проектами) косвенно подтверждает все эти умения. Отсутствие профиля вынуждает нанимателя проверять их наличие за деньги.

#работамечты
Нерешаемая задача

В общении с плохими программистами (и сантехниками) часто проскакивает тон «это нерешаемая задача»:

— Давай сделаем, чтобы по нажатию на кнопку уходило письмо клиенту? Не, не получится, мы в этот момент ещё не авторизованы на бекенде.

— Давай передавать данные о телефонных заказах в Гугль-аналитику? Не получится, мы для таких заказов не знаем ИД аналитики.

Это — плохие ответы. Для хороших ответов есть простое правило: в любом письме предлагай решение. Даже если оно будет безумным и нерациональным — не бойся: предложи и напиши об этом.

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

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

Будьте решателями проблем, а не создавателями.
​​Рациональная фантастика

Редко читаю (а тем более советую) художку, но мимо этой серии пройти невозможно. Трилогия называется «Воспоминания о прошлом земли», написал ее китаец Лю Цысинь.

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

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

О художественной части я могу судить только на уровне «интересно-не интересно». «Воспоминания» — интересно.

Похоже всю серию на русском так и не выпустили, так что гуглите английскую The Remembrance of Earth's Past.
Процесс → результат

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

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

Перефокусироваться с процесса на результат — тяжело: это связано с индивидуальными особенностями личности. Мне в свое время помогали простые вопросы про бизнес:
— Зачем я вообще делаю эту задачу? Кто ожидает от нее результат? Как этот результат выглядит?
— Как бизнес получал бы результат, если бы меня не было? Как бы я мог бы им в этом помочь?
— Если бы я мог потратить на эту задачу всего 30 минут, какими бы ее частями я пожертвовал, чтобы бизнесу было наименее больно?
— Какая самая сложная часть задачи? Что можно изменить в постановке, чтобы избавиться от нее?

Если вы — процессник, и будете задавать себе такие вопросы про каждую полученную задачу, то со временем научитесь ставить задачи лучше, чем бизнес, и вас начнут ценить как синьора. А говнокодить все равно не начнете.
​​Сервис: netlify.com

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

Ребята выявили и идеально закрыли конкретную боль фронтендеров — до появления сервиса, чтобы опубликовать даже самое простое приложение, приходилось идти к девопсам — поднимать CI, разбираться в хостинге и DNS.

Нетлифай закрывает вопрос полностью — в нем есть CI (который не надо настраивать!), быстрый хостинг на амазоне, автоматический DNS и деплой-превью. Если остается желание, то в каждую часть процесса можно влезть и что-нибудь покрутить — сделать домен верхнего уровня, настроить редиректы или проксирование, докрутить CI.

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

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

Скиньте эту ссылку прямо сейчас в свой рабочий слек — https://borshev.com/slack-productivity/
Продолжение вчерашней темы. В слеке не работает важнейшее правило электронного общения: одно сообщение — один вопрос. Почитайте Тему вот:
Наиболее эффективная коммуникация

У всех людей разные привычки и возможности общения. Я для себя открыл наиболее эффективный способ общения: одно дело в одном сообщении.

Чтобы максимально быстро получить ответ от меня, нужно прислать ровно одно письмо ровно с одним вопросом или ровно с одной картинкой.

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

Люди, которые задают в одном письме четыре вопроса, обречены на неответ с моей стороны. (Люди, которые присылают четыре письма подряд, тоже обречены на неответ, если я их не приглашал писать мне.)

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

- Это поэтому ты так много успеваешь? А ты сам придумал этот лайфхак? А как мне научиться делать как ты?
- ...