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

fborshev@pm.me / borshev.com

Реклама не продаётся
Download Telegram
Как уменьшить количество кликов в зуме

После вынужденного перехода на удалёнку до меня стало долетать гораздо больше страданий, связанных с ужасным UI зума. Он на самом деле ужасный — требует не меньше трёх кликов, чтобы зайти на каждую встречу. Делюсь советом, который экономит целый клик (Самат, спасибо!).

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

P.S. Ещё это работает для ноушена — по умолчанию электроновское приложение ноушена не открывает ссылки notion.so, поэтому вы постоянно оказываетесь с двумя ноушенами вместо одного — в браузере и в электроне.
Не продавливать по срокам

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

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

Ну и, конечно, такие менеджеры не ценят своё время: гораздо проще получить предсказуемый результат через 5 дней, чем непредсказуемый через 3, но с риском потратить ещё 5 на исправление последствий техдолга или отношений с заказчиком.

Единственный нормальный способ уменьшить названный программистом срок — это спросить у него совета, какое требование из задачи выкинуть, чтобы стало легче работать. Все остальные — манипуляции, которые не приведут ни к чему, кроме сорванных дедлайнов.
Рассказал в новом совете про CI\CD на простом языке — что это такое и зачем нужно.

Покажите это своему менеджеру и дизайнеру, и скорее внедряйте.
Ремоут- и неремоут люди

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

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

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

В неумении общаться удалённо нет ничего страшного — карантин уже заканчивается, вещи потихоньку возвращаются на место. Если вы всё ещё вынуждены работать на удалёнке с «офисными» ребятами, попробуйте пожёстче внедрить ежедневные встречи, когда вся команда собирается с видео и проговаривает все мантры из стандартного скрамовского дейли: вчера я сделал X, сегодня сделаю Y, беспокоит меня Z — обычно помогает.
Стрим без темы

А давайте в этот понедельник в 19:00 соберёмся на ютубе? Будет не обычный образовательный стрим — в этот раз мы просто поболтаем в свободной форме. Темы общения задаёте вы сами — заходите на https://app.sli.do/event/d33ahdeg и задавайте вопросы, или голосуйте за уже заданные.

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

Тупое правило, которое здорово помогает менеджеру во всех спорных ситуациях.

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

На встрече договорились что-то сделать и не записали? Значит, никому не надо.

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

#тупое_правило: Не написано, значит, не было.
Что я делаю, когда простудился

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

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

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

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

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

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

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

igooods — это доставка продуктов из гипермаркетов. Сотни тысяч клиентов, тысячи заказов в день, миллиард оборота в месяц. 36 городов России. В партнерах — Метро, Лента, Призма, Вкусвилл, Ашан, Глобус, Карусель, Окей.

Техническая команда — 31 человек. Под капотом рельса и реакт, нативные мобильные приложения для iOS и Android.

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

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

Мы с Федей запустили эти процессы, но чтобы завершить работу, нужно жить в Питере.

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

Офис в Питере, помощь с переездом. Подчинение напрямую владельцу бизнеса; основной рабочий партнер — CPO Андрей Родин.

Пишите краткий рассказ о себе мне в личку или на s@samat.me.
А какую я добавил ценность?

Хороший менеджер задаёт этот вопрос во время каждой своей активности.

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

Если нечего ответить, значит пора переставать заниматься деятельностью, которая не приносит ценности: отказаться от встреч с командой, которой ты не нужен, не слать пустые отписки на письма, не отвлекать программистов. Или просто отдохнуть.
#вопрос Реально ли стартануть в качестве начинающего программиста в 50 лет?

У меня, к сожалению, нет успешных историй на эту тему, но мне кажется, что вполне реально. Всё, что нужно, чтобы стать программистом, лежит на поверхности: интерпретатор ставится за 5 минут на любой компьютер, а книги по-прежнему продаются в интернет-магазинах.

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

Единственный вариант, который я вижу, — повысить свою ценность до устройства на работу. Попробуйте сделать такое крутое портфолио, которое только можете, — много наконтрибьютьте в опенсорс или напишите какой-нибудь большой сложный проект, больше чем стандартный todo-mvc. Это тяжёлый путь: пойти джуном в нормальную компанию гораздо легче. Зато этот путь зависит целиком от вашего желания, а не от предрассудков окружающих.

Надеюсь, у вас всё получится!
Цель встречи

Отличный способ сэкономить время на любой встрече — это писать её цель. Типа «я сейчас иду к заказчику, чтобы договориться об изменении вот этих требований: раз, два, три». Или «я выступаю перед командой, чтобы донести вот эти, эти и эти мысли». Или «Я созваниваюсь 1:1, чтобы узнать, насколько мой сотрудник чувствует себя счастливым в рамках текущего проекта».

Цель — это не агенда: скорее это внутренняя задача, не достигнув которой со встречи лучше не уходить.

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

Дополнение от Марьяны Онысько: «А еще, когда ты прописываешь цель встречи, то становится понятно, нужна ли она вообще. Иногда вопрос решается просто парой сообщений в чате»
#вакансия

Продакт и проджект в igooods

Мы ищем двух менеджеров:

Продакт на поиск и сервис рекомендаций
Проджект в команду ритейла

Работа в офисе в Питере. Денег — норм, офис отличный, коллектив — огонь, остальные подробности — по ссылкам.
Эволюция парольных менеджеров

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

Потом было два года Dashlane — красивого монстра со встроенным VPN и мониторингом дарквеба. К сожалению, за красотой скрывалась очень кривая реализация: автозаполнение (главная функция парольного менеджера) иногда просто переставало работать. Больше всего меня бесил театр безопасности, когда меня просили ввести цифры с картинки, чтобы «авторизовать» браузер. При этом, если цифры не вводить, всё продолжало работать.

В какой-то момент я настолько начал страдать от Dashlane, что всерьёз рассматривал переход на Bitwarden — кто не знает, это такая система хранения паролей для собственного сервера.

В итоге после очередной перезагрузки из-за зависшего менеджера паролей я перешёл на 1Password: менее красивый, но надёжный как топор. Автозаполнение работает везде, кроме сайта Тинькофф, синхронизируется моментально, не зависало вообще ни разу. Уже третий год на нём, очень советую.
#вопрос Стоит ли менять работу, если уже порядком поднадоело, но есть новые проекты и в целом хоть какой‑то прогресс ощутим?

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

Слушайте в Apple, Google, Castbox, Яндекс, Spotify, Overcast, ютуб и в веб-версии.
#вопрос Я руководитель web-разработки и собираюсь перейти в другую компанию, где будет другая команда и другие проекты. Как можно смягчить и сделать этот переход наиболее комфортным с точки зрения стресса?

Кажется, самый большой источник фрустрации для руководителя, который приходит в новую команду, — это сама команда. Люди ставят не те статусы в жире, пишут код по airbnb вместо standard, беспокоятся о непривычных проблемах, а по пятницам пьют стауты вместо IPA. Самое главное — не начать судорожно это всё менять.

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

Или ещё хуже — команда работает по трёхнедельным спринтам, а вы привыкли к недельным, но менять боитесь (как бы чего не вышло) и страдаете.

Первый шаг в новой команде — это привыкнуть: не пытаться что-то поменять в первую же неделю, а понять и с уважением принять текущий процесс и привычки. То есть сначала научиться играть по их правилам, а потом уже внедрять свои. Если у вас нет аллергии к русскому селф-хелпу, почитайте на эту тему 45 татуировок менеджера — там есть целая глава про это.
Обойти сбоку

Когда мы запускали UIG, я потратил 4 часа на одну простую задачу — закрыть демосайт на Basic-авторизацию. Дело в том, что у нас внутри уже был свой механизм авторизации на JWT, и фронтенд слал эти самые JWT прямо в HTTP-хедере Authorization. Basic-авторизация точно так же использует этот хедер, посылая там логин и пароль, которые вы вводите в стандартное окно. Получился конфликт: фронтенд хочет послать один заголовок Authorization, а браузер — другой. Вылезла куча проблем — то сайт отваливался на мобилках, то бекенд отвечал 403 при SSR.

Я попробовал кучу разных вариантов, от установки nginx (которого изначально в архитектуре не было) и до того, что написал прослойку для express, которая вырезала хедер Authorization так, чтобы его видел только стоящий выше traefik. В итоге, потратив 4 часа, я предпочёл объяснить заказчику, что сайт мы, скорее всего, закрыть не сможем — так и забили, висели с открытой демкой.

А потом пришёл Самат и за 5 минут прямо на встрече предложил сделать дополнительную авторизацию не Basic, а просто на куках: всех дел на 15 минут.

В этой ситуации я повёл себя как плохой программист: увидел проблему (два хедера Authorization) и пошёл её решать, размахивая всеми инструментами, которые только знаю. Самат повёл себя как менеджер: не владея горой инструментов, он просто обошёл проблему сбоку.

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

У меня наконец дошли руки добавить тайм-кодов, так что ловите запись.

Вот, что было интересного:

02:53 Как работаешь с техдолгом в команде?
08:50 Как планировать спринты, чтобы всё успевать?
11:01 Как выращивать людей в команде?
14:31 Что делать с легаси? Пример igooods
20:45 Как разработчику увеличить свой доход в 10 раз?
26:42 Получилось ли с Саматом заработать кучу денег?
27:04 Когда лучше брать джунов,
31:19 Как архитектурно правильно начинать новый проект?
37:24 Как следишь за производительностью программистов в команде?
40:41 Как видишь перспективы развития no-code?
45:54 Как понять, что у проекта исчерпывающая документация?
47:23 Где искать мотивацию работать, когда начинаешь ненавидеть проект?
51:44 Нет хобби кроме работы
52:24 Что значит взять на себя ответственность? Как и чем отвечать за неудачу?
57:46 Что будет с фронтендом и бекендом через 20–30 лет?
59:52 Куда лучше пойти джуну — на галеру или в стартап?
01:02:22 Переквалифицироваться в программисты после 40, миф или реальность?
01:05:36 Как тимлиду правильно устроить процесс делегирования задач, чтобы самому всё не контролировать?
01:08:45 Как развиваться project-менеджеру? Будет ли профессия актуальна в будущем?
01:10:29 Как продакту понять, о чём говорят разработчики?
01:12:16 Как думаешь, схлопнется ли скоро пузырь AI и ML?
01:14:30 Как совмещать семью и работу?
01:15:54 Как лучше учиться фундаментальным знаниям? Посоветуешь доступные гуманитарию книги и курсы?
01:18:18 Как найти и распознать техлида, способного лидить бек, фронт и тест-активности?
01:21:45 Важна ли декомпозиция задач, или это вмешательство в художественный процесс разработки?
01:25:19 Куда и как развиваться синьёру (в техническом плане)?
01:26:45 Инвестириуешь? Через какого брокера? В кого?
01:28:10 Что делать, если понимаешь, что коллеги технически не растут?
01:30:29 Как ты повышаешь у разработчиков ответственность за задачи?
01:32:39 В чём тебе стоило бы улучшить свои навыки? Какие области роста видишь у себя?
01:36:27 Как онбордить новых разработчиков, если документации и сервисов с интеграциями очень много?
01:37:20 Резко упало качество и скорость разработки, выросла сложность задач. Что делать?
01:39:08 Девопс в команде. Дань хайпу или есть польза?
01:41:20 Какие технические знания не устареют через 10 лет?
01:42:14 Есть ли жизнь без скрама и спринтов?
01:43:21 Как проджект-менеджеру перейти во фронтенд? Может сначала в QA?
01:44:11 Как ты вёл два беклога, для бизнеса в трелло, а для команды — в гитхабе?
01:46:53 Что такое высокая инженерная культура и как её распознать?
01:49:52 Как выбираешь на чём сфокусировать команду в устаревающем проекте на саппорте?
01:50:34 Как приучал себя к регулярным повторяющимся активностям, таким как блог или телеграм?
01:51:41 Можно ли долго вести проект без код-ревью? Как уменьшить временные затраты на этот этап?
01:53:44 О чём писать в блоге разработчика?

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


Ну и спасибо всем, кто пришёл!