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

fborshev@pm.me / borshev.com

Реклама не продаётся
Download Telegram
Live stream finished (1 hour)
Почему у меня нет автомобиля

Я люблю автомобили и неплохо умею управлять ими. От вождения я получаю удовольствие — это расслабляет и переключает. И несмотря на всю свою любовь к автомобилям, своей машины у меня нет уже 8 лет, и я пока не собираюсь это менять.

Дело в том, что современный мир позволяет получать все функции машины, не имея её в собственности. Если мне надо поехать из точки А в точку Б — есть такси и каршеринг, в пробки — метро. Хочется расслабиться за рулём — есть аренда, можно взять хоть Гелендваген АМГ, если деньги позволяют. То есть я спокойно езжу, но не трачу время на страховку, шиномонтаж и парковку. Последнее в Москве — самое сложное: можно доехать за 15 минут, а потом искать парковку ещё 30. Ну и, конечно, я не замораживаю несколько миллионов в неликвидной железке, которую можно разбить или вообще стать жертвой угонщиков.

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

Вопрос к тем, у кого машина есть, — а вы хотели бы от неё избавиться?
Вышел подкаст, где я не матерюсь и говорю по делу! Вместе с Саматом поотвечали на неудобные вопросы Юли Яковлевой, редактора Запуска Завтра, рассказали, почему так трудно найти программистов и почему все профачивают сроки.
В сегодняшнем эпизоде подкаста мы с Федей делимся своими факапами и страдаем по поводу несовершенства IT индустрии. Ведёт этот выпуск непревзойденная Юля Яковлева. Юля редактирует все выпуски, а в этом садится за микрофон и задаёт нам с Федей вопросы: почему в разработке все так плохо, почему мы не можем найти себе программистов и ещё кучу других.

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

Слушайте и подписывайтесь: Apple, Google, Castbox, Spotify, Яндекс, Overcast, веб-версия.
Иногда проекты делаются и без нормальных процессов — люди просто делают свою работу и что-то успевают.

Но чаще всего так не получается — не так идёт примерно всё. Смотрите, к примеру, что пошло не так у нас в школе при запуске второго потока «Стать Тимлидом»: на прошлой неделе я заболел и не мог работать несколько дней; у Вани в больницу загремела супруга, и он остался сидеть с ребёнком; а Марьяна сейчас ждёт многодневный перелёт через какие-то экзотические места, чтобы вернуться домой из Турции.

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

Если хотите научиться так же — приходите на курс: завтра стартует второй поток, ещё можно успеть.
Make fetchdb

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

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

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

Обычно на небольших проектах это делается очень просто: вот пример реализации на django и sqlite для нашей школы.
Завтра в 11:00 в клабхаусе (простите, я не выбирал площадку) говорю с кучей интересных ребят про зерокод: когда можно, а когда нельзя, где граница и как найти баланс.
Руководитель разработки, рубист и ещё пара вакансий

Друзья, мы с Саматом продолжаем нанимать людей. У нас две новые вакансии:
Руководитель разработки. Это вакансия — к нам, а не к клиентам: мы целиком доверим вам разработку одного из наших клиентов. Сейчас у нас есть Всеволод, но мы хотим сделать ещё как минимум 2 таких же контура. Контур — это самостоятельное подразделение нашей компании, которое в один момент ведёт одного клиента. Руководитель контура — это программист с любовью к хорошему коду, который не боится людей. Всему остальному — научим.

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

— Ну и Сноб: нанятые в прошлый раз ребята уже заканчивают онбординг, так что ищем бекендера на питоне и фронтендера на vue.

За рекомендацию сотрудника, который пройдёт испытательный срок, заплачу лично вам 50 000 рублей.
Инструменты: things

У меня часто спрашивают, какими инструментами я пользуюсь, чтобы всё успевать (как будто бы я всё успеваю, хе-хе). Расскажу про основной и самый любимый — things.

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

Things я выбрал за его внешний вид и нативность: приложения работают быстро под все платформы.

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

Кроме основного приложения, я периодически пользуюсь things.sh — простым скриптом, который позволяет вытащить в эксель данные из внутренней SQLite.
#вопрос Как понять, что сегодня я поработал достаточно и можно идти отдыхать? Условное «не обманываю ли я своего работодателя».

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

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

Каждый понедельник я отвечаю на один конкретно поставленный вопрос. Задавайте на fedor@borshev.com
Сервисы: healthchecks.io

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

100% способ убедиться в надёжности бекапов — учения: взять и восстановить копию продакшена где-нибудь рядом с основной площадкой. Способ этот — ручной, а значит, дорогой и медленный. Чтобы не проводить учения каждую неделю, бекапы нужно мониторить. Самый простой (и бесплатный) вариант — healthchecks.io.

Сервис работает по принципу мёртвой руки — вы задаёте периодичность бекапов и получаете эндпоинт, который нужно дёргать с этой периодичностью. Сделали бекап — дёрнули эндпоинт. Если ваш скрипт не дёрнет эндпоинт за нужный период, вы получаете уведомление. Получается, что этим вы покрываете все возможные неисправности. Неважно, сломался доступ к БД, закончилось место на диске, скрипт упал: результат один — недёрнутый эндпоинт и уведомление. Только (set -e) не забывайте.
12 факторов: дев как прод

Когда я только начинал разрабатывать на джанго, я радовался, как клёво она абстрагируется от баз данных: можно, к примеру, при разработке или в CI использовать sqlite, чтобы было быстро, а на проде — postgres. Делать так я перестал сразу же после того, как у меня упал прод из-за регистра символов в названии какой-то сущности: постгрес был case-sensitive, а sqlite — нет.

Или представьте, что на проде у вас используется Amazon SQS как сервер очередей, а локально и на стейджинге вы используете Redis. Если вы вдруг поставите версию celery, в которой сломан какой-нибудь редкий кейс с SQS, но эта ошибка не воспроизводится в вашем Redis, думаю, вам будет весело.

Поддерживайте весь тулинг одинаковым — пишите для программистов длинные docker-compose, которые содержат максимально близкую копию прода. Если деплоитесь в облака, не стесняйтесь брать localstack.
Смотрите, куда мы с Саматом докатились
У нас с Федей вчера был очень трудный разговор. Мы решили, что готовы делать аутсорс-разработку для наших клиентов. То есть у нас появилась новая услуга — мы разрабатываем сайты и приложения без передачи программистов клиенту. Текущие услуги запуска проекта с передачей команды внутрь и по аудиту и улучшению существующих команд разработки — никуда не делись, добавилась ещё одна услуга.

Причины две:

1) Нанимать программистов клиентам трудно. Трудно потому, что многие разработчики-крутаны хотят работать с нами, а переходить навсегда к нашему клиенту — не хотят.

2) Не всем клиентам нужна своя внутренняя команда разработки. Часто клиент хочет запустить первую версию продукта, проверить гипотезу и только в случае успеха будет нанимать программистов на постоянку.

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

Что это значит практически?

💼 Для клиентов: можно нанять нас на разработку MVP, а уже потом заказать у нас себе найм команды внутрь, по необходимости. Пишите мне в личку. Очередь из клиентов на 3 месяца вперед, но оно того стоит.

🛠 Для программистов: мы открываем большой найм в команду «Федя и Самат». Много разных проектов, технологий, бизнес-задач и непременно высокий уровень качества. Стек — python и js. Пишите Феде на fedor@borshev.com.

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

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

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

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

Ну а если вы честно признаётесь себе, что безрезультатное хобби — это лучшее вложение времени — вам очень повезло.

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

На курсе «Стать Тимлидом» в одном из уроков у нас есть домашка — написать вакансию для своей компании. Одна из самых частых ошибок — невкусный шаблонный рассказ о компании.

Конечно, «динамично развивающихся» давно уже нет, но вот «Проптех для b2b в США» или «Финтех-стартап с мировыми амбициями» — вполне ещё встречаются. Понятно, что кандидату эти заклинания не говорят ни о чём — он скорее откликнется в компанию, которая занимается чем-то понятным, к примеру делает самый большой в России поисковик или самое лучшее в мире банковское приложение.

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

Говорите о своей компании так, как будто вы сидите в баре.
Гайд по pytest

Я редко публикую здесь ссылки, но иногда попадаются вещи, которые приводят меня в восторг. Недавно наткнулся на полный гайд по pytest — https://stribny.name/blog/pytest/

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

Описана почти вся экосистема — из того, что я активно использую, нет только про pytest-django, pytest-env и pytest-freezegun чтобы мокать даты. В остальном — настоятельно рекомендую.
#вопрос Можно ли на собеседовании выяснить не только теоретические знания претендента, но и то, насколько быстро он деливерит задачи от 0 до 100?

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

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

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

Подробнее о двух неделях читайте мой старый пост.

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

Из ГТД я вынес для себя три вещи: ежедневные обзоры дел, пустой инбокс и письма самому себе.

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

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

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

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

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

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

Бот, кстати, бесплатный и открытый, так что если вы ГТД-шник — смело пользуйтесь: @selfmailbot.
Не требовать, а создавать контекст

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

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

Если у вас нет такого контекста, вы по большому счёту ничем не отличаетесь от прораба из курса «Самому не проще» — вроде и делаете дела, но стоит вам отвернуться, как рабочие уронят ванну и криво приклеят плитку. Так и до сна в обнимку с телефоном и отпуска с ноутбуком в рюкзаке недалеко.
#вопрос Как расти ПМу в агентстве, если цель — работа в крупной технологической компании? Какие скиллы качать, чтобы быть привлекательным на этом рынке?

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

Если вы хотите работать кем-то большим, чем менеджер, всю работу которого можно свести к получению задачи в одном месте и передаче её в другое, ваш путь — это продакт-менеджмент. Разбирайтесь в том, откуда берутся деньги: что такое финмодель, как в неё закладываются метрики, чем ARPU отличается от ARPPU и т. д. Идеально — если у вас будет свой коммерческий опыт, пусть даже какие-нибудь смешные курсы кройки и шитья или платные маски в инстаграме: если вы сможете сами себе заработать хотя бы 20к рублей за месяц, ваша ценность как продакта будет уже выше.

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