Бомбящий программист
383 subscribers
81 photos
81 links
Бывший разработчик, но все еще инженер.
Download Telegram
Пост про устойчивость.

Мой предыдущий руководитель в последний раз поставил мне цель на квартал - стать более устойчивым. Что означает устойчивость? По его словам, основные факторы устойчивости это:
- личные - в основном это семья;
- ИПР - наличие сильного руководителя, у которого есть чему учиться;
- наличие наставника;
- обратная связь с рынком (расширение сети контактов, участие в конференциях, ...).

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

Имеется в виду, что не важно, что произошло, не важно, с какими проблемами ты столкнулся на работе, главное, чтобы дома было всё хорошо, чтобы все были здоровы и счастливы. Если говорить о нас, как о роботах-пылесосах, то дом - это наша зарядная станция, которая должна функционировать стабильно и без сбоев. Хорошо, что моя "зарядная станция" меня не подводит.
🔥18👍75
Про монорепо vs полирепы

Что лучше микросервисы на базе монорепы или на база множестве репозиториев?

Я никогда не имел опыта работы разработчиком с монорепой, но слышал о таком подходе в Yandex/Facebook и еще ряде известных мест. Всегда этот рассказ или статья сопровождались каким-то набором дополнительного тулинга вокруг монорепы, который фактически ограничивает скоуп, с которым разработчику придется непосредственно вести работу. Один из аспектов, который мне точно нравится в монорепе, это возможность хранить техническую документацию, соглашения по разработке, API контракты, различные диаграммы взаимодействия и артефакты архитектуры непосредственно в самом монорепозитории. Я искренне верю, что чем ближе документация к коду, тем она более качественная, идеально когда она вообще генерируется из кода или наоборот.

При этом микросервисы, где у каждого свой репозиторий, кажется мне более понятным и логичным способом организации работы команды. Но этот подход обязательно требует соблюдения строгих соглашений между командами по использованию общих практик и соблюдения техрадара. Чтобы соглашения соблюдались, надо вести шаблон CI/CD, который не позволит команде или какому-то отдельному инженеру запустить сервис на каком-то другом стеке или использовать какой-то иной подход к запуску линтеров, тестов, генерации документации, проверки API контрактов на обратную совместимость, проверок докер образа на безопасность, деплою, и т.д. и т.п.

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

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

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

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

Из известных исследований на эту тему - это исследование Мартина Селигмана "The Effectiveness of Psychosocial Intervention for the Treatment of Unipolar Depression" в журнале "Journal of Abnormal Psychology" опубликованое в 1990 году. Один из выводов звучит примерно так:
Постепенное достижение маленьких успехов и поощрение позитивных результатов способствует формированию позитивной жизненной позиции у индивидуума.

Кстати, у нас в странах СНГ есть отличная фраза на этот счёт: "Едим слона по кусочкам". Каждый кусочек можно рассматривать как маленькую победу.
12👍6🔥3
Что такое senior инженер?

Несколько лет я наблюдаю тенденцию снижения уровня оценки senior инженера. Это проявляется в том, что кандидаты в возрасте 20-25 лет с опытом работы всего 2-3 года начинают самоопределять себя senior'ами. Конечно, возможно все, и если начать работать и писать код в, скажем, 16 лет, то к 20-25 годам действительно можно достичь уровня senior. Однако это скорее исключение из правил. Обычно видишь резюме с опытом работы всего 2-3 года, где кандидат сам оценивает себя как senior. Понятно, что сейчас рынок очень "голодный", и в свете оттока специалистов в период пандемии и после 2022 года общий уровень, по моему субъективному мнению, senior'ов существенно снизился. Раньше senior-инженер был таким "решалой" - сотрудником, который мог решить любую задачу без лишних вопросов, потребности в точном ТЗ/БТ, помощи от другого специалиста и т.д. и т.п. Ему можно было поручить задачу, забыть о ней, и вспомнить уже только тогда, когда он вернется с готовыми вариантами решения.

Как-то с бывшими коллегами из Магнит мы написали свое представление о senior инженере. Если интересно - welcome по ссылке.

"Люди, которые наиболее успешны в IT-индустрии, это те, кто приветствует перемены и готов признавать, что их знания устарели." - Стивен Хоффман, сооснователь LinkedIn


Может просто мои знания (понимание) о senior инженере устарели?
👍7🔥72
Последние две недели освежаю свои знания в подходах к построению организационной структуры.

Вопрос достаточно холиварный, или, как говорят в ЗЯ, лоливарный. Если объяснять на примерах, то есть две модели: модель Spotify и модель Avito. Я не утверждаю, что именно эти компании эти модели создали, просто их примеры самые яркие и имеют разные публичные документы и манифесты. Весь мой опыт до ЗЯ был, так или иначе, связан с моделью Avito и я был, и наверное все ещё являюсь, амбассадором этой модели при построении команд. Она мне кажется вполне логичной и, что более важно лично для меня, она крайне требовательна к роли тимлида команды. В ЗЯ модель построения команд похожа на Spotify. Для меня это с одной стороны тяжело, с другой стороны я чувствую, что получаю ответы на вопросы, на которые раньше не мог найти ответов. Понятно, что дьявол всегда кроется в деталях реализации и они у каждой компании свои, но тот факт, что в Spotify модели нет роли тимлида команды не даёт мне покоя.

Мне, как СТО, хочется опираться на руководителей, у которых за плечами есть большой инженерный опыт. В классической Spotify модели у продуктовых команд нет тимлидов. Как быть?

P.S.: как по мне, то роль тимлида отлично описана в https://tlroadmap.io/
👍6🤩4🔥1
SaintTeamleadConf2024, это было круто.
🔥7👏32👍2
Ходите в отпуск - точите свой топор!

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

Субъективно, на мой взгляд, это всё это имеет смысл для руководящих позиций, так как когда ты просто линейный инженер, пишешь код по 3-4 часа в день и периодически ходишь на разные agile-церемонии, то это не столь актуально, но актуально. Когда же твой контекст требует вмещения разных тем, вопросов и болей, превышающих число Миллера, то мыслетопливо стремительно заканчивается, и периодический поход в отпуск может быть единственным источником его восполнения.

Если лень читать, то вот выступление Дорофеева на HighLoad.
🔥9👍74🤓1
Пост про вторичность инструмента (нет)

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

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

Можно ли сказать, что инструмент первичен? Тоже нет. Я бы сказал, что инструмент не первичен и не вторичен. Выбор инструмента идет параллельно с постановкой цели. Возможно, надо определиться с некой этапностью, где этапом номер 0 будет стоять задача выбора правильного инструмента для достижения следующей цели. Иными словами, прежде чем начать копать яму, надо понять, чем и как вы будете ее копать: руками, лопатой, экскаватором.
👍9🔥3👏2
Про платформенные команды.

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

Итог. Добавил в playbook описание того, как я вижу платформенные команды, ее виды и задачи.

#playbook
👍5🔥53🤔1
Про парадокс opensource vs innersource.

На прошлом и текущем месте работы, да и на собственном опыте, заметил интересный парадокс. Как правило, все инженеры знают и понимают общую пользу и благо от практики opensource. Многие крупные проекты живут исключительно благодаря сообществу, которое готово принимать свежие идеи и новых людей. Я думаю, что многие из нас, может, и не контрибьютили в opensource, но очень хотели этого и были к этому готовы. Но почему же, когда речь идет про innersource внутри компании, то все переворачивается с ног на голову, начинается дележка "мое" vs "чужое" и т.д., и т.п. Даже когда идет речь про две команды, которые работают очень плотно друг с другом, речь про innersource встает в самый последний момент, когда других вариантов уже нет, а сделать очень надо. Откуда это? Почему написать код в чужом внешнем репозитории ментально проще, чем в соседнем репозитории соседней команды, с тимлидом которой ты ходишь ежедневно на обед?

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

Я был и остаюсь ярым амбассадором данной практики. В свое время в Магните нам, как мне кажется, удалось ее хорошо описать. Делюсь этим документом с вами.
👍9🔥3
Ностальгический пост о прошлом и мысли о будущем.

10 лет назад я, будучи обычным разработчиком, пришел в "Островок" делать backend для B2B-направления. Тогда еще особо никто не умел в скрам, а все просто писали код, роль тимлида только зарождалась, а в продукте шли споры о том, как правильно называть владельца продукта: Product Owner или Product Manager. Это были дикие времена, и мы выживали как могли.

Но было классно! Можно было просто подойти к кому угодно в офисе и что-то у него спросить. Можно было после работы пойти с командой в бар, а все встречи проходили в переговорках или рядом с чьим-то рабочим столом, и не нужно было беспокоиться о камере, качестве микрофона, шаринге экрана и актуализации своего календаря. Сейчас, после ковида и геополитических изменений, это звучит как какой-то "каменный век", но это был чертовски приятный "век". Никто не заботился о метриках эффективности, так как их никто не умел считать. Никто не думал об импортозамещении, так как не было повода и смысла об этом думать. Никто не спорил, какой корпоративный мессенджер лучше, потому что ни Slack, ни MS Teams еще не вышли в свет. Никто не ломал голову о выборе облачного провайдера, так как из нормальных был только AWS.

Что будет еще через 10 лет? Все перейдут с Jira на какой-нибудь TeamStorm? gitverse заменит GitHub? А backend будем писать на Rust? Или же профессия разработчика вообще умрет и останутся операторы AI? Поглядим!

Кстати, частично эту тему затронули на последнем TechLeadConf в рамках доклада Как техлиду выжать максимум из ChatGPT.
🔥125👍5
Пост размышления о лидерстве.

Лидерство — это когда где-то внутри есть большое НАДО и яркое ХОЧУ.

НАДО — это тактика. НАДО говорит тебе, что ещё нужно сделать вот это, это и это, чтобы тактически решить проблему, исправить ситуацию, получить краткосрочную победу.
ХОЧУ — это стратегия. ХОЧУ смотрит гораздо дальше и шире, чем НАДО. ХОЧУ знает, когда что-то нужно захотеть, чтобы либо быстро сконвертировать ХОЧУ в НАДО, либо наоборот, погасить одно из текущих НАДО ради какого-то другого НАДО.

Пример.
Я знаю, что мне сейчас НАДО инвестировать своё время в подготовку к высокому сезону. Моё НАДО говорит мне: «Антон, иди разберись, как обстоят дела в командах по подготовке к сезону, проверь, что все всё сделали. Проконтролируй! Проверь! Помикроменеджь!»
При этом есть ХОЧУ. ХОЧУ хочет, чтобы я выстраивал культуру, процессы и роли в командах, чтобы достичь такого уровня зрелости и осознанности, при котором о подготовке к сезону не нужно было бы говорить, чтобы это было базовой гигиеной.

Лидер умеет отличать ХОЧУ от НАДО и НАДО от ХОЧУ. Лидер умеет приоритизировать два и более НАДО между собой. Лидер умеет прогнозировать, когда каким ХОЧУ пора начинать заниматься. Лидер готов инвестировать своё личное время в реализацию своих ХОЧУ.

P.S.: данный пост написан под влиянием яркого ХОЧУ =)
👍86🔥5👏3
Возвращаюсь к истокам данного канала.

вот же пи....
👎7🤡4😁3
Я к своему стыду, даже когда был разработчиком, не мог похвастаться высоким уровнем знаний в Git.

Не потому что мне было лень это изучать, я просто искренне не понимал, зачем нужны все эти rebase, revoke и прочие непонятные команды, когда фактически все, что мне нужно, это:
- git checkout -b
- git push
- git pull
- влить изменения (merge в интерфейсе gitlab)

Крайне-крайне редко я мог воспользоваться cherry-pick и diff/apply.

Всё. Я никогда не понимал, зачем нужны dev-ветки, если всё, что мне нужно, — это отвести ветку от master, а потом вмержить её в master.

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

На последнем TLConf был, на мой взгляд, эталонный доклад про TBD. Ничего аналогичного на просторах Рунета в видеоформате нет. Автору респект. Максимально рекомендую всем!

P.S.: этот доклад получил самую высокую оценку среди докладов ветки TechLead
👍102🔥1👏1
Пост про использование консоли.

Я четко помню тот момент, когда я, еще будучи в вузе, перешел с Windows на Ubuntu. Момент я помню, но что послужило причиной этому - уже нет. То ли потому, что мне надо было что-то запускать из-под Unix, то ли просто потому, что все окружение вокруг работало под Unix-системами. Не суть. Суть в том, что я четко помню тот восторг, который я ощутил, когда смог пользоваться нормальной консолью. А tiling window manager типа awesome, ммм, сказка. Конечно, уже потом я перешел на Mac, так как консоль - это, конечно, хорошо, но вот собирать драйвера и разбираться с прочими приколами дистрибутивов Linux желания не было.

К чему это я? К тому, что удивлен, насколько современное молодое поколение разработчиков то ли не умеет пользоваться консолью, то ли она им просто не нужна. Вокруг одни интерфейсы типа продуктов JetBrains, а я как дурачок радуюсь тому, что открыл для себя консоль нового поколения Warp, которая собрала в себе уже из коробки все нужные мне плагины.

Раньше, при собеседовании разработчиков, я приятно удивлялся, что оставались еще те, кто умеет работать с vim. Видимо, через какое-то время можно будет удивляться тем, кто все еще умеет в grep / awk / cat в командной строке.

Кстати. Как выйти из vim? =)
🔥4👍3👏2
Про визуализацию графиков отпусков.

За все время работы в разных компаниях я нигде не видел удобного и наглядного инструмента для визуализации отпусков и dayoff'ов сотрудников команды/отдела/департамента. Никакие внутренние самописные интранеты, ни СБИС, ни VKDoc не могут предоставить мне простейшую возможность увидеть график отпусков разных сотрудников в виде календаря с разбивкой по дням, неделям и месяцам, чтобы найти какие-либо пересечения.

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

Вроде бы простейшая задача, но никакой инструмент на рынке сейчас такую проблему не решает. Или я такого пока не видел.
👍4😢2
Пост про важность проведения демо.

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

Демо рождает здоровую и честную конкуренцию между командами за похвалу и общее признание как со стороны бизнеса/продукта, так и среди инженеров IT. Потому что если ты, как тимлид, выступаешь на демо раз в квартал, а в соседней команде условный Петя выступает каждый раз и показывает реальные результаты, то если ты нормальный, то должен задаться вопросом: почему у Пети все так классно, а у меня нет? Может, я что-то делаю не так? Или у меня в команде что-то не так? Хочу, чтобы у меня было как у Пети в команде. Все аргументы в духе «все команды разные и у всех есть свои особенности» идут лесом, потому что "признание специфичности смерти подобно". Все мы особенные, а когда все особенные, то никто не особенный.

Понятно, что само демо надо уметь проводить, чтобы оно было в радость, а не в тягость, но это тема отдельного поста.

P.S.: Еще я обожал в каждое демо прятать "пасхалку", нахождение которой всегда было интересным и веселым челленджем для слушателей.
👍6🔥42👏2
Трудности перевода.

Есть достаточно старый, но не менее смешной стикер-пак CTO in Rage. Я никогда себе не позволял использовать оттуда стикеры, хотя очень хотелось. В какой-то момент я поймал себя на мысли, что фразы оттуда можно заменить вполне грамотной русской речью. Привожу свою интерпретацию перевода. Мат есть в оригинале, простите.

- Бля, реши вопрос - Слушай, я сейчас занят, разберись, пожалуйста, сам.
- Хули вы тут мусолите в этом чате - Диалог идет не в том направлении, вернитесь пожалуйста к сути.
- Прием блять - Привет, получилось что-то выяснить?
- Блять, как же вы меня заебали - Ох, я что-то подустал.
- У меня сейчас 0 доверия к тех команде - Я сомневаюсь, что мы сможем решить эту проблему самостоятельно.
- Штрафуйте - Кто-то может остаться без бонусов.
- Кто проебал? - Кто упустил?
- Вы реально не отбиваете - Я вижу, что у вас нет понимания.
- Вся разработка и куа у нас хуйня - Я считаю, что нам нужно больше инвестировать в зрелость наших инженеров.
- Какого хуя не откатили релиз? - Можно же было просто откатить, забыли?
- Ты со мной поспорить решил? - Давай обсудим, я готов привести свои аргументы.
- Меня это ебланство заебало - Ой, кажется, у нас есть общая проблема с ответственностью за свою работу.
- Я щас нахуй опять вас всех оштрафую - Видимо мы снова останемся без бонусов.
- Не ебите мне мозги - Разберитесь, пожалуйста. сами с проблемой.
- Та мне похуй - Я не в контексте.
- Нахуй ты мне это пишешь? - Ты хочешь чтобы я тебе чем-то помог?
- Нихуя не игрушки - Внимательнее, пожалуйста.
- В пизду такой мониторинг вообще - У меня есть вопросы к качеству нашего мониторинга.
- Позор - Я вижу тут точки роста.
😁17🔥6👏2