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

fborshev@pm.me / borshev.com

Реклама не продаётся
Download Telegram
Мой супер-патч к django-money попал в историю — его записали на плёнку и сложили вместе с кучей другого опенсорсного кода в подземное хранилище где-то в Арктике.

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

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

Что только не хранят программисты во float — деньги, количество и вес, сотни всего. Особенно умиляют координаты — неужели они их реально складывать и вычитать собираются?

Если кто не знает, float — это числа с плавающей точкой, которые не гарантируют точности. Верно, вам никто не обещает, что 0.1 + 0.2 будет равно 0.3. Если говорить грубо, причина в том, что в компьютере нет нецелых чисел — там вообще только нули и единицы.

Если вам надо хранить десятичные дроби, используйте специальные типы данных, которые для этого разрабатывались: Decimal, или что там у вас в языке. Подробнее почитайте на https://0.30000000000000004.com.
Давай решай уже

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

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

А что случится, если уволить такого сотрудника по ошибке? Парадоксально, но, скорее всего, ничего: просто найдёшь нового.

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

Мой выбор — поскорее принимать решения, чтобы поскорее получить результат или поскорее исправить последствия своей ошибки. Do not make right decisions, but make decisions and then make them right.
Стрим: настрока CI\CD в Docker Swarm

Совсем забыл вас предупредить, но завтра в 14:00 будет очередной стрим! В прямом эфире настроим непрервыную доставку микросервиса на node.js в кластер на docker swarm, в конце поотвечаю на вопросы по теме.
#вопрос Расскажи, зачем стоит покупать кастомный SSL-сертификат?

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

Конечно, если вы банк или Яндекс, вы, наверное, купите себе дорогой сертификат и будете хранить ключи на каком-нибудь хитром носителе — но в таком случае вы не задавали бы этот вопрос. Так что, если сомневаетесь — не берите, оставайтесь на letsencrypt.

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

Каждый понедельник я отвечаю на один чётко поставленный насущный вопрос про ИТ. Присылайте вопросы на fedor@borshev.com
Как уменьшить количество кликов в зуме

После вынужденного перехода на удалёнку до меня стало долетать гораздо больше страданий, связанных с ужасным 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

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

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

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