Product Developer @product_developer Channel on Telegram

Product Developer

@product_developer


Канал о продуктовой разработке изнутри. Открыт для связи: @engineering_memeger

Product Developer (Russian)

Вы когда-нибудь задумывались, как создаются ваши любимые продукты? Хотели бы погрузиться в мир продуктовой разработки изнутри? Тогда канал "Product Developer" идеально подойдет для вас! Здесь вы найдете увлекательные истории о том, как создаются новые продукты, какие технологии используются, и какие этапы проходит процесс разработки

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

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

Product Developer

14 Feb, 09:37


Систематизация vs бюрократия

Талантливые ребята обычно умеют систематизировать, даже если делают это интуитивно.

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

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

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

Но обычно люди в команде очень разные. И все они ошибаются.

И вот менеджер видит, что не все «достаточно талантливые», и начинает вводить процессы, чтобы подстраховать от ошибок.

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

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

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

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

Вы действительно оптимизируете работу?
Или пытаетесь защититься от некомпетентных и неуправляемых сотрудников?

Точно ли нужно строить работу с некомпетентными сотрудниками через внедрение процессов?
А когда вы в последний раз пересматривали или отменяли какой-то процесс?

Product Developer

20 Jan, 08:54


StarMap — карта компетенций команды

Шаблон
Забрать себе: File -> Make a copy


В двух словах — это экселька, где строки — компетенции, столбцы — ФИО, а значения в ячейках — степень владения компетенцией:
— 0 — нет навыка
— 1 — учится
— 2 — умеет самостоятельно
— 3 — может учить

А еще в этом шаблоне автоматически считается бас-фактор и риски.

Зачем вам стармап?

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

Для тимлида:
— составить портрет команды «as is»
— увидеть бас-фактор и ботлнеки
— составить картинку «to be», целевой портрет
— проактивно пойти к разработчикам с запросом на прокачку конкретных навыков
— составить профиль кандидата для найма

———

4 года назад я уже писал пост про стармап — тогда это был способ продать его инженерам в моей команде с точки зрения пользы для них 🙂

С тех пор ни разу не заставил команду заполнять стармап, но сам как тимлид заполнил три стармапа для разных команд. По пути переосмыслил применимость инструмента.

Вот к чему я пришел:

1. Составлять стармап командой — дорого.
Не подумайте, я не отговариваю вас. Если команда сама хочет — буду только рад!
Но обычно разработчики не покупают это «менеджерское» упражнение. Приятнее фичу напилить 🙂

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

2. Составлять тимлидом — дешевле, и в большинстве случаев эффективнее

Во-первых, это оказался супер полезный инструмент для онбординга тимлида в новую команду.

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

Но есть минусы: без команды можно упустить компетенции. Поэтому так или иначе нужно собирать список с ребятами.

И тоже не всегда это упражнение оправдано:
— Если в команде 3 человека — скорее всего, компетенции можно удержать в голове.
— Если не планируется нового найма — то и профиль кандидата составлять не нужно.
— Если бэклог устаканился и очевидно, что все компетенции в команде есть.

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

———

Забирайте шаблон (File -> Make copy), составляйте стармапы, пишите комменты к посту 🙂

P.S. Шаблон — на самом деле реальный стармап одной из команд, в котором я поменял имена. Список компетенций может вас заинтересовать, но предостерегаю от прямого копирования.

Product Developer

09 Jan, 07:58


10 привычек растущих сотрудников

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

А пока — приношу бесплатную полезность: 2х-недельный марафон, который подойдет вообще всем: инженерам и тимлидам, аналитикам, продактам, СТО и фаундерам.
Начнется 13 января.
Спикерами и авторами будут команда тренеров Стратоплана, а также уважаемые товарищи по телеграм-каналам: Евгений Антонов («Тимлид очевидность»), Ольга Елисеева («Teamlead с места в career»), Александра Баптизманская («Нестыдная фасилитация»).

Каждый день будет либо эфир, либо лонгрид.

Вот некоторые привычки:

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

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

Участие бесплатное, доступ ко всем материалам останется навсегда.
Нужно только зарегистрироваться: https://stratoplan-school.com/habits/
13-25 января.

P.S. за этот пост мне не платили

Product Developer

08 Jan, 08:25


Талант vs системность и трудолюбие

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

Процессы и метрики для Васи — это оверхед. Лишняя нагрузка, мешающая творить:
— Зачем измерять велосити? Срок назвали, попадаем, чего еще надо?
— Зачем составлять профиль кандидата? Не так много хороших людей на рынке, чтобы к ним какую-то линеечку прикладывать.
— Какой такой cycle time? Вам шашечки или ехать?

Если Вася преуспевает с таким подходом, то скорее всего ему помогает талант.

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

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

Если я буду делать всё, как Вася, — то у меня получится хреново.

Поэтому я включаю системность и трудолюбие. Перестаю плеваться от «оверхеда» и ищу в нём пользу:
— При найме составляю целевой портрет команды и профиль кандидата, чтобы самому лучше понять, кого ищу.
— Слежу за метриками, чтобы вовремя заметить: команда берёт в спринт в 2 раза больше работы, чем может сделать.
— Планирую агенду встреч и веду заметки, пишу follow-up чтобы потом не гадать, о чем договорились.
— Выписываю плюсы, минусы и риски перед сложными решениями. По рискам сразу пишу план митигации.

Это отнимает кучу времени. На реальные дела остаётся только 50%.
Но это помогает не обосраться.

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

Product Developer

20 Dec, 08:30


Решение проблемы плохого WiFi

Пост не совсем про продуктовую разработку, но очень хочу поделиться.

На каждой работе у меня был коллега_с_хреновым_интернетом.

Кажется, это мелочь и его личная проблема. В конце концов, код пишется и дело делается, так что можно и потерпеть.

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

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

Привет, последние полтора года это я 😅

Я борюсь за интернет с соседями.
На прошлой неделе наконец-то победил!

Живу в многоквартирном доме, где ноут видит 20+ WiFi сетей. Ethernet розеток нет, а вход для роутера закладывался в одном месте во всех квартирах. Поэтому все роутеры соседей стоят в одном углу, а стены у нас тонкие.

Из-за этого WiFi нестабильный даже рядом с роутером.

И это люто бесит.
Расскажу, как боролся и как победил.

Помогло решение, к которому шел 1.5 года:
Ethernet over Powerline.

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

На другой стороне приёмник проделывает обратное преобразование: ловит радио сигнал из розетки и преобразует его в цифровой Ethernet.

Я слышал об этом еще лет 15 назад, но тогда подумал, что это какая-то хрень и работать нормально не будет.

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

Как же я охренел, когда это завелось.

Просто воткнул девайс в розетку, а Ethernet кабель в роутер и в ноут. И теперь ноут думает, что он напрямую подключен в роутер.

Да, обещанного 1ГБит не дало, но пинг до гугла 9мс и speedtest показал симметричные 170МБит.

Теперь это мой мастхэв для съемного жилья.
Потому что провод всегда стабильнее чем Wi-Fi!

———

Как пришел к этому решению?
Расскажу путь, чтобы вы могли его не повторять 🙂

1. Выбор канала WiFi.

В WiFi 2.4Ghz есть 100MHz и 11 каналов. При этом каждому каналу нужно минимум 20Mhz для модуляции сигнала. Получается, что каналы работают с перекрытием.
Поэтому по факту выбор стоит между 1, 6 и 11.
Если рядом стоят три и более роутера — они друг другу мешают.

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

В MacOS есть встроенная утилита «Беспроводная диагностика» (в меню «Окно» -> «Сканирование»), которая помогает найти менее зашумленный канал.

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

2. Смена роутера на WiFi 5GHz

Решил я попробовать современные технологии — WiFi 5GHz
Каналов больше, проблемы шумных соседей быть не должно.
Прекрасно, подумал я, и заказал новый роутер.

Но оказалось что до дальнего конца квартиры, где я работаю, WiFi 5 не долетает.

3. Провод

По квартире разведены телефонные розетки. Прекрасно, подумал я, и купил обжимку + 4-жильный телефонный кабель + горстку RJ45 и RJ11 коннекторов.

Я осознавал сразу, что это тупиковый путь, но всё равно решил попробовать Вот, пишу, можете не пробовать 🙂

Телефонные провода, даже 4-жильные, не подходят для передачи Ethernet сигнала. То ли изоляции нет и наводки слишком сильные, то ли кабель с большим сопротивлением.

В общем, устройства друг друга не видели.

Дальше думал уже ставить WiFi репитер, но идея использовать провод меня не отпускала.

———

Короче, если мучаетесь с WiFi — попробуйте Poweline Adapter!
Оно того стоит.

P.S. Поделитесь в комментах, какие еще есть варианты решения проблемы, которые я не попробовал?

Product Developer

16 Dec, 12:21


Fintech Product Meetup от ЮMoney 🔥
17 декабря, вторник, 19:00 мск. Бесплатно.

5 лет назад я работал в QIWI и внимательно следил за конкурентами — в частности, за ЮMoney (тогда это были Яндекс.Деньги). Помню, как мы решали одни и те же проблемы. Например, как выживали держали нагрузку в эпические ноябрьские распродажи.

Сейчас я в Авито, но тема финтеха не отпускает.

Поэтому 17 декабря буду смотреть бесплатный митап от ЮMoney

Вот, что будет:
🟣Кросс-платформенная разработка: Эксперимент с React Native, сравнение с нативом и что в итоге выгоднее
🟣Mobile Web Banking: разоблачение олдскульных мифов
🟣Редизайн главной страницы ЮKassa и какие ошибки собрали по пути
🟣Как держать фокус на стратегических задачах, когда много операционки и задач «для денег»

📍 17 декабря, вторник, 19:00 мск — приходите на митап в Санкт-Петербурге или смотрите трансляцию.

Бесплатно, но нужно регистрироваться.

Все подробности — на сайте Fintech Product Meetup.

Product Developer

09 Dec, 06:56


Стиль менеджмента Linux kernel

«Прежде всего, я бы посоветовал купить “Семь навыков высокоэффективных людей” и не читать. Сожгите, это отличный символический жест.»

Сижу хихикаю со статьи Линуса Торвальдса про менеджерские практики в разработке ядра линукса.

Персонаж эпотажный, запомнился мне словами «Nvidia, fuck you».
Статья, соответственно, написана в таком же стиле.

———

1️⃣ — Решения

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

Если кто-то говорит вам: “выбирайте (а) или (б), нам нужно, чтобы вы приняли решение”, — у вас проблема. Люди, которыми вы руководите, лучше знают детали, чем вы. Поэтому, если они обратятся к вам за техническим решением, вы не должны принимать это решение за них.



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

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

2️⃣ — Люди

Большинство людей — идиоты. Быть менеджером означает, что вам придется иметь с ними дело, и, что более важно, — им придется иметь дело с вами.

Оказывается, что посраться с людьми довольно легко, а вот завоевать доверие — сложно. Таким образом, срач немедленно подпадает под категорию “необратимых” решений и становится запретным в соответствии с п. 1. Решения.

Здесь есть всего несколько простых правил:

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

На самом деле, не существует возможности быть неизменно вежливым. Никто не будет доверять тому, кто так явно скрывает свой истинный характер.

3️⃣ — Люди — хорошие

Большинство людей - идиоты, и как следствие — вы тоже.
Поэтому всегда найдётся кто-то умнее.

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

Когда вы найдете кого-то умнее себя, ваши управленческие обязанности сводятся к тому, чтобы говорить: «Звучит как хорошая идея — дерзайте» или «Звучит хорошо, но что если xxx?»

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

4️⃣ — Поиск крайнего

Что-то обязательно пойдет не так, и люди захотят кого-нибудь обвинить. Это будете вы.

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

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

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

В первую очередь, именно поэтому вы становитесь менеджером, беря вину на себя. Это часть того, что заставляет людей доверять вам и дает вам возможность прославиться, потому что именно вы можете сказать: «Я облажался».

———

Это не все пункты, советую почитать оригинал.
Я не со всем согласен, местами у самого горит.

Должен ли менеджер принимать решения?
Должен ли разработчик нести ответственность за свои косяки?

Давайте обсудим в комментах 🙂

Product Developer

27 Nov, 12:15


Микросервисы в Kubernetes — это ответ!
… а какой был ваш вопрос?

Спонсор поста — Selectel.

Давайте порассуждаем, зачем вообще вам микросервисы и Kubernetes.

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

Но на мой взгляд основная причина очень простая — потребность пилить больше фич, а для этого расти в количестве разработчиков и не толкаться локтями.

Именно сложность параллельной разработки на монолите приводит всех к микросервисам.

Казалось бы, можно и в монолите выстроить хорошую архитектуру, которая четко разделит домены и проведет мостики между ними, чтобы обеспечить пресловутые low coupling & high cohesion.

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

Микросервисы и API как мостики для взаимодействия между ними — системное решение для low coupling & high cohesion.

Архитектура буквально заставляет нас делать поменьше запросов между сервисами, потому что разработка API — сложнее, чем подключение зависимости внутри кода.

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

Можно всё собирать самому. Начать с Docker-compose на трёх виртуалках, самому поднимать nginx, самому настраивать маршрутизацию. В какой-то момент нагрузка потребует добавления виртуалок и каждый раз — это будет ручная работа и накладные расходы:
— Арендовать еще железа
— Поднять там виртуалки
— Настроить на них все компоненты
— Включить в балансировку
— ….🤯

Можно автоматизировать развертывание своих велосипедов на независимых компонентах, но скорее всего в итоге всё равно придём к Kubernetes.

А это еще больше накладных расходов на сетап и обслуживание компонентов K8s.
Да и в целом правильное управление k8s — это отдельная большая область знаний.
Зачастую в компаниях есть отдельные «DevOps’ы», которые занимаются чисто кубером.

Но Kubernetes — реально отчуждаемая часть, где гораздо проще отдать ответственность хостеру и потом требовать выполнения SLA.

И здесь я верю, что с помощью Managed Kubernetes можно сэкономить и упростить себе жизнь.
Особенно если вы и так хоститесь не в своих датацентрах, а арендуете инфру.

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

Из плюсов именно Selectel — воркер-ноды работают не на виртуалках, а на выделенном железе. А это убегерает от спецэффектов «шумных соседей» и оверхеда виртуализации. Как итог — обещают экономию на 40% по сравнению с арендой виртуалок.

Подробнее — на лендосе Managed Kubernetes от Selectel.
Реклама, АО «Селектел», ИНН: 7810962785, ERID: 2Vtzqx9pGZm

———

Поделитесь в комментах — поднимали ли вы хоть раз кубер?
Сколько времени это заняло в первый раз и сколько времени тратите на поддержку?

Product Developer

25 Nov, 08:54


Идемпотентность
… То, о чем многие слышали, но стеснялись спросить 😁

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

Делаем платёжную систему.
Пользователь хочет отправить другу 1000р.
Но вдруг дрогнула рука, и он дважды нажал кнопку «оплатить».
В итоге отправилось два запроса и с карты списалось дважды.

Что делать?
— «Давайте отключать кнопку после первого нажатия!»

Это первое, что приходит на ум. Вариант хороший с точки зрения UX, но проблему решает не полностью.

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

— «Давайте дедуплицировать запросы по сумме и назначению!»

Вот мы и подобрались к понятию идемпотентности, но еще пока не совсем с правильной стороны.

Идемпотентность — это свойство операции, при котором повторное выполнение будет давать тот же результат, что и первое.

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

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

Попытки дедуплицировать по параметрам усложняют логику:
— Сколько времени хранить историю запросов?
— Что делать, если в запросе 100 параметров?
— Что если реально надо отправить подряд три транзакции по 1000р?

Ключ идемпотентности помогает решить эту проблему.

Идея простая:

1. Клиент генерирует уникальный ключ (например, UUID) для каждого запроса.
2. Все повторные попытки отправляются с этим же ключом.
3. Сервер хранит результат выполнения операции по этому ключу и возвращает его при повторных запросах.

Реализовать идемпотентность можно по-разному. Самое простое — кеширование ответов по ключу идемпотентности. Так, например, сделано у Stripe.
На картинке sequence-диаграмма с более сложным, но персистентным вариантом — ключ идемпотентности прикапывается в нашу транзакцию.

В качестве бонус-контента дам ссылку на моё любимое видео — Идемпотентность на коровах.
В двух словах — «Беременную корову нельзя осеменить повторно».

———

Надеюсь, я своими менеджерскими постами еще не всех подписчиков-технарей растерял 🙃
Надо бы почаще писать про всякое техническое.

А вы учитываете идемпотентность при проектировании?

Product Developer

22 Nov, 09:29


Цели на испытательный срок как OKR
для любой роли, не только для тимлидов.

Пример целей моего тимлида

———

Этот пост — завершающий в серии про онбординг -> Первый пост с шаблоном чеклиста онбординга.
Сегодня поговорим про цели на ИС.

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

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

Но есть риск: если ожидания от вас не сформулированы, то вы их можете неправильно понять и не попасть в них. И в итоге оказаться «так себе сотрудником», хотя работали усердно и по вашему мнению всё делали идеально.

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

💡Как составлять цели.

1️⃣ — Описать образ не только хорошего результата, но и превышения ожиданий, а также недостаточного результата.

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

Пример — составить долгосрочную техническую стратегию команды.

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

2️⃣ По возможности разделить на метричные и проектные.

Метричные дают больше свободы в достижении. В работе с тимлидом важно говорить «что» нужно достичь и оставить достаточно свободы, чтобы он решил сам, «как» это реализовать. Примеры метричных целей: SLI сервисов, % флакующих тестов, Scope Drop спринта, % выполнения квартальных OKR.

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

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

Итог

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

Цели на ИС — это способ переложить ожидания из головы руководителя в голову новичка, чтобы сфокусировать его на самом важном. Дать понять, по каким признакам будет оцениваться его работа.

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

Product Developer

20 Nov, 08:40


Что такое Кейс-интервью

Disclaimer: это реклама Кейс-клуба от Карьерного цеха

Наём — штука несправедливая, а процесс во многих случаях похож на сдачу экзамена. Это хреново, но такова жизнь.

В общем случае у компаний есть два способа проверить, что менеджер хорошо справится с работой:

1. Искать релевантный прошлый опыт и спрашивать детально, как дейстовал
2. Давать гипотетический кейс и спрашивать, как решал бы

И если в прошлом подобного опыта не было, тогда остается только кейс.

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

Почему? Простой ответ — потому что не умею решать кейсы.

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

Задать не слишком мало и не слишком много вопросов. При этом решать аргументированно и отстаивать свою позицию.

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

А тут как раз постучались старые друзья из Карьерного Цеха и предложили порекламировать их продукт — Кейс-клуб.

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

Для каждого уровня подбирается свой эксперт:
- Junior решают кейсы с Middle+ и Senior
- Middle & Senior с CPO, хедами и лидами.

Занимает 2 часа в неделю. Все кейсы решаются прямо на занятии, домашек нет.

Кейсы для продактов, но мне показалось релевантным и для тимлидов, поэтому я вписался!

Присоединяйтесь!

Product Developer

18 Nov, 07:40


Онбординг тимлида (и других менеджеров). Часть 2.

Этот пост — второй из серии про онбординг менеджера и цели на испытательный срок.
Пост про первый месяц тут.

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

1. Знакомимся с внешними людьми: другие менеджеры, HR BP, стейкхолдеры и заказчики. В разговоре стоит узнать, какие у них есть боли и ожидания от вашей работы.

Можно использовать стандартные вопросы:
— Чем занимаешься? Какие задачи стоят перед тобой или твоей командой?
— Чем мы можем быть друг другу полезны?
— Какие у тебя ожидания от меня? Чем я могу тебе помочь?
— Нужны ли нам регулярные встречи?

2. Зарабатываем авторитет

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

Вы должны ассоциироваться с пользой, которую приносите. Авторитет можно нарабатывать на маленьких полезных делах, которые улучшат жизнь команды, но не требуют больших усилий. Например, решить проблему с доступами или выдачей техники, или настроить ci/cd для автоматического деплоя. Быстро и «дёшево», но это повысит ваш авторитет среди команды.

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

3. Показываем результаты

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

Бывает так, что по некоторым целям показать результаты за 90 дней не получается. На то могут быть объективные причины: например, в команде накопилось много легаси или процессы до вас были настроены плохо и за оставшийся месяц их не исправить. Обязательно обсудите проблемы с руководителем и предупредите, что результатов через месяц не будет.

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

Итог

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

2. Планируйте свой онбординг. Хорошая идея — использовать для этого чек-лист. Можно воспользоваться шаблоном.

3. Зарабатывайте авторитет. Маленькими победами или с помощью авторитета неформальных лидеров.

4. Не страшно, если не получается показать результат за 90 дней. Главное, чтобы у вас был план, и вы ему следовали.

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

Следующий пост в серии — про то, как ставить цели на испытательный срок в виде OKR, и какие результаты реально показать за 3 месяца. Там же приведу пример из последнего онбординга тимлида в моем юните.

Product Developer

08 Nov, 08:31


Онбординг тимлида (и других менеджеров)
шаблон чеклиста

«Вот команда. тимлидь» — говорят тимлиду и возвращаются только через 3 месяца, чтобы сказать, что он молодец (или не очень).

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

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

В серии постов поговорим про план онбординга и цели. Это саммари выступления Толи Панова на Podlodka TL Crew, улучшенное и дополненное моими мыслями и материалами.

Первый месяц онбординга

— 1-я неделя: знакомство с командой

На общих встречах и индивидуально обменяться с ребятами ожиданиями, спросить о проблемах, где нужна помощь.

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

Мой любимый вопрос — «Зачем тебе тимлид?». Если у инженера есть содержательный ответ — это бесценный источник информации для онбординга.

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

— 2-я неделя: изучение целей команды

Сначала цели стоит разделить на командные и личные.

Командные — проекты, которые бизнес или заказчики ждут от вашей команды.

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

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

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

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

— 3-я неделя: формирование целей, определение приоритетов

Здесь всё зависит от предыдущего пункта.
Совет — фокусироваться на том, что не решится без вашего участия.
Личные цели — за вас никто не сделает.
Наём команды — самому все проекты не затащить.

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

— 3-я неделя: изучение команды
Когда вы знаете цели, какие проекты горят и какие есть проблемы, — пора предметно посмотреть на команду.
Есть ли все нужные компетенции?

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

— 4-я неделя: погружение в проекты

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

Важная ремарка: если руководитель сразу говорит, что проект Х — суперважный, то не стоит откладывать на 4ю неделю.

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

Погрузитесь в высокоуровневую архитектуру. Узнаете, какие есть модули, как взаимодействуют, какие узкие места, какую нагрузку она выдержит, и тд. Это поможет увидеть риски в проекте и заранее их отработать.

———

Итогом первого месяца должно стать понимание вводных, постановка реалистичных целей, и начало движения по этим целям.

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

Product Developer

29 Oct, 09:09


Сколько зарабатывают бэкендеры?
А продакты? А тимлиды?

Есть сервисы, где анонимно публикуют зарплату и отзывы о работодателях.
Из зарубежных известных — Glassdoor и levels.fуi
А вот у нас такого нет. Вернее, не было до недавнего времени.

Знакомые ребята запустили в телеге Glassdoor на минималках — Getmatch. Инсайдеры из российских IT-компаний анонимно расказывают о процессе собеседования в бигтехи, сколько на самом деле платят, приходится ли перерабатывать, есть ли токсики в команде, какие шансы вырасти по зарплате в компании и что для этого делать.

Там же ребята делятся опытом прохождения собесов, рассказывают, что спрашивают на секциях, какие этапы и какие офферы.

Мой любимый пост — про бэкендера с зп 950к.

А еще публикуют исследования, например «Как выросла зарплата продактов за 3 месяца?» или «Кто зарабатывает больше продакты или проджекты?».

Канал хорош, а комменты под постами — прямо огонь 😄 Видно, что тема цепляет. Чуваки набрали 15к подписчиков за 2 месяца. Я подписался.

@g_jobchannel

Product Developer

21 Oct, 15:35


Инцидент-менеджмент

«Инцидент» — что для вас в этом слове?

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

Вы когда-нибудь задумывались, что 99.99% доступность — это не больше 4 минут даунтайма в месяц?

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

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

Ведущие — Виктор Корейша, руководитель направления Managed Services в Ozon, и Евгений Антонов, ведущий технический менеджер в Yandex Infrastructure и автор канала «Тимлид Очевидность».

Гости подскаста — Андрей Борзов, заместитель технического директора по эксплуатации в Туту и Андрей Чупейкин, CTO блока платформы в Ozon.

Слушайте на удобной платформе

Product Developer

14 Oct, 09:01


Рост инженера в тимлида

1 октября один из наших инженеров стал менеджером.
Поздравим Никиту! 🚀
И немного посочувствуем ему 😅

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

Так компания может потерять хорошего инженера, а взамен получить плохого менеджера.

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

Есть системный подход, который повышает шансы на успех мероприятия.
На примере Никиты, который за 1.5 года после трудоустройства вырос до тимлида, посмотрим, как в Авито устроен процесс.


1️⃣ — Сначала стать отличным инженером
Из плохого инженера хороший менеджер не получится.

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


2️⃣ — Проявлять задатки менеджера
… а не быть самым технически прокачанным и авторитетным

Переход инженера в менеджера возможен начиная с грейда Е5. Для понимания, есть еще Е6-7-8.
Никита пришел как раз на Е5, и у него уже был опыт тимлидства на прошлом месте.

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

3️⃣ — Определить точку А
какие компетенции менеджера уже есть, а каким нужно учиться.

Для этого в Авито есть секция «Оценка менеджерского опыта», если кандидат был тимлидом в прошлом.
Либо «Кейс», если опыта заведомо нет.

На этапе «оценки опыта» мы определили, какие компетенции у Никиты не было возможности прокачать на прошлом месте, но Авито ожидает их от готовых тимлидов. Эти компетенции позже мы будем осознанно прокачивать.

4️⃣ — Должно быть обоюдное желание
Спустя полгода Никита сказал, что посмотрел на работу тимлида в Авито и передумал 😂. Поэтому мне пришлось открывать вакансию тимлида, когда тимлид Авторизации ушел в саббатикал.

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

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

5️⃣ — Получить теоретическую базу
Мы предложили Никите пройти внутренний курс Engineering TeamLead School. На курсе он узнал что-то новое и систематизировал то, что уже знал: про управление людьми, командами, процессами, целеполагание и бизнес.

6️⃣ — Попрактиковаться будучи инженером
Чтобы выполнять задачи тимлида, не обязательно официально им быть. Никита начал применять знания на практике: процессы потюнил, квартальный роадмап построил, в найме поучаствовал, в онбординге помог.

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

8️⃣ — Поздравляю, у вас тимлид.
Дальше — долгий путь перехода, «онбординг» и цели на «испытательный срок».
Бросать на этом этапе свежеиспеченного тимлида — очень рискованно.
Но об этом будет следующий пост.

———

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

Product Developer

13 Oct, 08:38


Матемаркетинг — конфа про цифры в продукте и маркетинге.

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

Поэтому вы читаете этот пост, а Женя пойдет на конфу 🙂

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

Примеры докладов:
1. Новая North Star метрика Авито — Максим Новиков, руководитель Аналитики кластера Communications.

2. Прогнозирование выручки — Алексей Веретенников, аналитик данных, Яндекс.

3. Как оценить GMV рынка на неполных и смещенных данных — Михаил Виданов, руководитель группы аналитики рынка, Яндекс.

4. Как понять, какая организация хранилища подходит вам? — Максим Стаценко, руководитель службы подготовки и анализа больших данных, Яндекс

И еще несколько десятков крутых тем от крутых спикеров из именитых компаний!

Треки:
— DWH и Data-платформы
— A/B-Тестирование
— Устойчивость
— Дашбординг и визуализация данных
— Прогнозирование и оценка рынка
— Аналитика реального финансового эффекта
— Карьера аналитика и коммуникация с командой
— Управление и аудит платных рекламных каналов
— Аналитическая инфраструктура в условиях импортозамещения
— Практический ML

Для подписчиков — промокод на скидку 15% на все типы билетов — PRODUCTDEV15
Бонус при покупке — доступ к записям всех докладов прошлых лет, которые аккуратно разложены по категориям.

7-8 ноября. МГУ, кластер «Ломоносов». Билеты на сайте.

Product Developer

09 Oct, 09:27


Предположения и жопа

When you assume, you make an ass of you and me.

Недавно наткнулся на эту фразу, решил поделиться 😅
Мой вольный перевод: «Когда ты предполагаешь, ты выставляешь дураком и себя и меня».
Смысл в том, что предположения могут приводить к ошибкам, из-за которых в итоге пострадают обе стороны.

Представим ситуацию:

1. Петя ждёт задачу Васи, чтобы приступить к своей. От этого зависит цель спринта.
2. Петя уходит на полспринта в отпуск, рассчитывая, что задача Васи будет готова к середине спринта.
3. Вася, между тем, решает начать с более интересных для себя задач. Ведь никто не уточнял приоритеты.
4. Петя выходит из отпуска и видит, что задача только взята в работу.
5. В итоге Вася успел все свои задачи, Петя не успел ничего, а цель спринта — провалена.

Что происходит дальше?

Петя злится на Васю, обвиняя его в непрофессионализме.
Вася чувствует себя несправедливо обвинённым, ведь он сделал все свои задачи.
Но при этом цель спринта провалена и Вася чувствует свою ответственность за это.

Оба оказывается в жопе неудобной ситуации.

Почему? Из-за того, что оба сделали предположения, но не потрудились обсудить реальные ожидания.

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

Product Developer

07 Oct, 09:14


Podlodka Techlead Crew с 14 по 18 октября

До Авито у меня не было опыта работы с канареечными релизами и graceful degradation, про circuit breaker я только слышал, а feature-toggles готовил неправильно.

Мне бы помог следующий сезон Techlead Crew — «Проектируем надёжность»!

Смотрите, какие крутые сессии и спикеры:

1️⃣ — Архитектурная ката «Проектируем надежность»
Будем в командах решать реальные архитектурные задачи, изучать новые методы и подходы.

Проведут:
— Павел Лакосников, руководитель Arch Governance в Авито;
— Игорь Антонов, Тимлид в Т-Банке;
— Григорий Скобелев, Techlead в Plata и директор ПК Techlead Crew;

2️⃣ — Доклад «Канареечный деплой: от стратегии к надежности»
— Илья Садыков, Senior Backend Engineer в Авито,
поделится опытом развития канареек в Авито. Считаю, тут это очень круто сделано, и доклад будет полезен мне самому, чтобы понять особенности механизма.

3️⃣ — Круглый стол «Архитектура на старте: подготовка к успеху»
— Александр Поломодов (Т-Банк) и Олег Бондарь (Яндекс) обсудят ключевые принципы надежной архитектуры и механизмы самоисцеления и повторных попыток.

4️⃣ — Публичное собеседование Техлида
Проведет Григорий Кошелев. В ходе интервью проверим, насколько техлиды понимают важность надёжности систем.

И еще 6 крутых сессий! Я делал HR Crew и Teamlead Crew в составе программного комитета и могу сказать, что ПК подлодки старается сделать каждый сезон лучше предыдущего.

От всей души рекомендую https://podlodka.io/techcrew
Для моих подписчиков — промокод techlead_crew_7_2HRicB

Product Developer

02 Oct, 08:13


OAuth 2.0 в картинках: sequence-диаграмма.

Эту инфографику я перевел специально для поста.
Оригинал см в статье ув. тов. Phil Boutros.

Product Developer

02 Oct, 08:11


OAuth 2.0 в картинках

Иногда бывает сложно объяснить, как работает OAuth. Инфы в интернете много, но она вся мудрёная и порой противоречивая. Кажется, что некоторые авторы специально усложняют тему, чтобы выглядеть умнее.

А тема-то не такая сложная — успешный сценарий можно объяснить за один пост в телеге с одной sequence-диаграммой.

Участники:

👤 Пользователь — владеет ресурсами и авторизует ваше приложение на доступ к ним. Например, ему нужно разместить объявление, но вместо регистрации с логином и паролем он хочет «войти через Google».

💻 Ваше клиент-серверное приложение — например, доска объявлений, где вы хотите разрешить вход через Google.

🔐 OAuth провайдер — предоставляет сервер для авторизации и сервер для доступа к ресурсу. Например, Google предоставляет доступ к имени, email и ID пользователя.


🛠️ 5 шагов, чтобы реализовать «вход через Google»:

1️⃣ — Получить конфигурацию OAuth
Провайдеры предоставляют discovery-endpoint, который вернет актуальные url для OAuth протокола.
Рекомендуется запрашивать конфигурацию вместо хардкода или сохранения в конфиге.
Проверьте сами: https://accounts.google.com/.well-known/openid-configuration

2️⃣ — Отправить запрос на авторизацию
После нажатия на кнопку «Войти через Google» ваше клиентское приложение выполняет запрос в ваш бэкенд.
Ваш бэкенд перенаправляет клиента на URL, составленный с помощью authorization_endpoint из 1️⃣ и стандартных oauth-параметров:

1. response_type=(code|token) — Определяет flow: Auth Code или Implicit. Используйте code, т.к. иначе токен передается на клиент в query string, оставаясь в логах веб-серверов, и может быть украден с клиента

2. client_id — Публичный идентификатор вашего приложения, который вы получили через веб-интерфейс OAuth провайдера для разработчиков.

3. state Уникальный случайный код, который генерирует ваш бэкенд. Нужен, чтобы предотвратить CSRF атаки. В конце флоу помогает убедиться, что изначальный запрос был инициирован вашим приложением.

4. scope — Список типов ресурсов, к которым приложение запрашивает доступ. openid — для доступа к userinfo_endpoint из 1️⃣. calendar_read — чтение календаря.

3️⃣ — Пользователь взаимодействует с OAuth провайдером.
Обычно здесь пользователь вводит логин-пароль, проходит 2fa через sms, и т.д. Если пользователь уже залогинен на этом устройстве, то увидит просто кнопку "Предоставить доступ YourApp к информации о вас".

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

4️⃣ — Получение токена
OAuth провайдер перенаправляет браузер обратно к вашему сервису, используя redirect_uri, который передал ваш бэкенд на шаге 2️⃣.

Параметры redirect_uri:
1. state — Должен соответствовать тому, который передал ваш бэкенд на шаге 2️⃣. Если не совпадает, — значит пользователь подвергся CSRF атаке.
2. code — Одноразовый код, сгенерированный oauth провайдером.

Ваш бэкенд делает запрос в OAuth Auth server для получения access_token и других.
После получения access_token ваш бэкенд использует его для запросов к ресурсам.

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

5️⃣ — Получение ресурсов
Когда ваш сервис получает access_token, он может быть использован для вызова API сервера ресурсов сразу или в будущем.

access_token имеет ограниченный срок действия и его нужно регулярно обновлять с помощью refresh_token.

Доказательством аутентификации служит id_token. ID пользователя можно достать из поля sub (subject), раскодировав base64 JWT id_token.
Или обратиться к userinfo_uri, используя access_token.


Вот собственно и всё.
OAuth — это просто.
Распространите.

——

Специально для поста я перевел инфографику из статьи ув. тов. Phil Boutros.
На картинке к посту — превью. Сам pdf файл — чуть ниже.

Для закрепления материала можно поиграться в официальной OAuth 2.0 Playground

Product Developer

30 Sep, 12:09


Servant leadership vs Управляемость команды

Disclaimer: это реклама бесплатного вебинара от Soft Skills Lab. Ребят уважаю, тема откликается, сам пойду.

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

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

Даже без таких радикальных мер я знаю много тимлидов, которые стараются работать в стиле servant leadership. И я сам поддерживаю вовлечение инженеров и чувствую, что ребята тоже проявляют инициативу.

Этот подход может сплотить команду, поднять мотивацию и привести к росту перформанса и скорости достижения результатов.

Но…

Есть некая грань, после которой команда садится на шею и становится неуправляемой:

▫️ исключения из правил становятся нормой — опоздать, забыть, не прийти
▫️ требования к тимлиду/продакту/… растут, а эффективность команды падает
▫️ отговорок больше, чем сделанных задач

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

3 октября в 20:00 по мск Саша Клименко, основательница Soft Skills Lab, проведет открытый воркшоп «Как не потерять управляемость команды? 5 ошибок в коммуникации и как их исправлять».

Это будет бесплатное занятие в Zoom с практикой на реальных кейсах и общением голосом (приносите свои ситуации и вопросы!)

За 1,5 часа вы узнаете:

▫️ Какие ошибки в коммуникации не дают наладить контакт с командой?

▫️ Как отследить потерю управляемости и не допустить ее?

▫️ Что делать, если вы уже чувствуете, что сотрудники сели на шею?

Ссылку на встречу отправят в бота. Зарегистрироваться.

Реклама. ИП Клименко А.А. ИНН 772077460576 erid: 2Vtzqx6CbxM

Product Developer

23 Sep, 07:10


SMART для ИПР и не только — фреймворк для постановки целей

Это пост-дополнение к посту с шаблоном ИПР. По нему возникли вопросы — «что за заголовки Конкретные, Измеримые,… Что туда писать»?

В мире красивых аббревиатур много булшита, но эти 5 букв считаю достаточно ценными, чтобы о них рассказать.

Если просто записать в ИПР «Прокачаться в базах данных» — это будет достаточно абстрактно и породит кучу вопросов:
— Зачем?
— Как поймешь, что прокачался?
— А когда?

Вот SMART — как раз чтобы ответить на эти вопросы при постановке цели.

1️⃣ Specific (конкретная) — Цель должна быть понятной и чёткой
Пример, вместо «Прокачаться в базах данных» — «Научиться оптимизировать SQL запросы».
Чем более детализирована цель, тем легче к ней идти.

2️⃣ Measurable (измеримая) — Цель должна иметь чёткие показатели успеха.
Пример: «Уменьшить время выполнения SQL-запросов в синхронных пользовательских сценариях до 500 миллисекунд максимум при нагрузке в 1М пользователей».
Чем больше конкретных цифр получится дать — тем лучше.

Если получится выполнить цель в изначальной постановке — круто! Но это редкость.
Не беда, если в процессе придет понимание, что в текущем виде цель не получается выполнить.
Расценивайте это как вектор. Направление, куда двигаться. И да, с появлением новых вводных вектор может меняться.
Лучше двигаться с вектором, чем по кругу или по траектории как на картинке к посту.

3️⃣ Achievable (достижимая) — Реалистична ли цель в текущих условиях?
Есть ли обучающие материалы, эксперты за которыми можно наблюдать, и задачи, на которых применить новые знания?
Пример: «Пройти курс по оптимизации SQL-запросов и внедрить улучшения в течение двух спринтов, привлекать эксперта Васю для ревью»
Важно не перегружать себя и оценивать реальные возможности.

4️⃣ Relevant (релевантная/согласованная) — Цель должна быть важной для ваших текущих задач и карьеры.
Пример: «Запросы нужно оптимизировать для того, чтобы сервис держал нагрузку на 1 миллионе пользователей — с текущим ростом это будет через полгода»
Важно, чтобы цель приносила пользу лично вам и вашей команде.

5️⃣ Time-bound (ограниченная по времени) — Определите дедлайн.
Пример: "Закончить курс по SQL за 2 недели и оптимизировать запросы до конца месяца".
Причем план может быть отложенным — здесь не сказано, что это должно происходить в следующие два спринта. Это может быть план развития на полугодие, где конкретно эта цель стартует в следующем квартале.
Сроки мотивируют и помогают не откладывать выполнение задач.

———

SMART пригождается не только в ИПР, но и в постановке целей на квартал для команды или личных целей.

Важная ремарка: бывают цели, к которым очень сложно приложить линеечку.
У нас был рефакторинг, эффект от которого мы не смогли оцифровать. Но! сама попытка дала важные мысли о том, как скорректировать план рефакторинга.

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

Product Developer

18 Sep, 08:46


Как составить индивидуальный план развития

Один товарищ спросил, как самому составить себе ИПР. Я пытался найти и скинуть ему какую-нибудь годную статью, но не смог.

Поэтому пишу пост и выкладываю шаблон ИПР, который мне дали в QIWI 4 года назад — он всё еще лучший ♥️

Вот простой фреймворк из 3 шагов:

1️⃣ — Точка А — Где мы сейчас

Самодиагностика, собес или сессия с ментором помогут определить текущий уровень.

Для самодиагностики можно примерить на себя матрицы компетенций из Avito Playbook:

— Разработчики (Там есть даже шаблон Windrose, добавленный мною)
— Аналитики данных
— Продакты
— Дизайнеры
— Тимлиды и инжиниринг менеджеры
— Data-Science инженеры

2️⃣ — Точка Б — Куда хотим попасть

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

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

Важно понимать цель, сроки и ожидаемый результат:

1. Какой эффект даст прокачка навыка?
2. Когда хотите увидеть результат?
3. В чем польза?

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

Эффектом может быть либо прокачка в решении интересной рабочей задачи, либо смена работы. Выбор за Васей.

3️⃣ — Строим маршрут А -> Б

Если хотите прокачаться именно в рабочих задачах, то можно пойти по модели Дженнингса:
— 10% теория. Это могут быть статьи, поход на конференцию, просмотр записей докладов, ну или курс.
— 20% наблюдение за другими. Найдите коллегу, который хорошо делает то, чему хотите научиться.
— 70% практика с обратной связью от ментора. Ну тут всё просто. Берешь и делаешь 🙂. Потом собираешь обратную связь и переделываешь.

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

———

Если вы всё хотели составить себе ИПР, но никак не добирались до этого и ждали знака — вот он. Составьте себе ИПР 🙃

Шаблон ИПР поможет побороть проблему белого листа.

Product Developer

16 Sep, 08:21


E-CODE by Ozon Tech | 28 и 29 сентября

Больше бесплатных оффлайн конференций от бигтехов!
2 дня, 4 параллельных трека, 50 выступлений.
Москва, 28-29 сентября.
Онлайн трансляция, конечно же, будет.

28 сентября — Менеджмент, Бэкенд, Инфра, Наука и жизнь.

Точно буду смотреть:
1️⃣ — Алексей Пименов / Neogenda —Трехуровневая система управления

Алексея всегда интересно послушать, хожу на его доклады на всех конференциях 🙂

2️⃣ — Александр Бирюков / Т-Банк — SageDB: зачем мы пишем свою базу данных

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

3️⃣ — ClickHouse как пример DBaaS во внутреннем облаке / Евгений Сударчиков / Ozon

В Авито у нас есть ClickHouse в DBaaS, хочу сравнить реализацию и возможности для разработчиков.

4️⃣ — Квантовые вычисления: основные идеи и современное состояние технологии / Станислав Страупе / Сбер/МГУ/РКЦ

На доклад про квантовый компьютер я ходил на HighLoad++ в 2020 году. Было очень познавательно, и сейчас для меня это шанс быстро освежить тему и узнать прогресс за прошедшее время.

29 сентября — QA, Mobile, ML&DS, Наука и жизнь.

Меня заинтересовали:
1️⃣ — Нагрузочное тестирование в Ozon: прошлое, настоящее и будущее / Иван Приходько / Ozon

Все готовят нагрузочное тестирование по-разному. Буду набираться насмотренности.

2️⃣ — Figma Mockup to Server-Driven UI / Владислав Чешенко / Альфа-Банк.

Знаю, что в Альфе Server-Driven UI начали делать еще до санкций, и очень интересно посмотреть на их опыт.

3️⃣ — История развития архитектуры системы рекомендаций Ozon / Алексей Гурьянов / Ozon

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

Москва. 28 и 29 сентября. Оффлайн и онлайн.
Зарегистрироваться

Product Developer

13 Sep, 09:23


Как лечить пять дисфункций команды: практические шаги

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

1️⃣ Отсутствие доверия
Лечение:

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

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

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

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

2️⃣ Боязнь конфликтов
Лечение:

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

— Перед важными решениями можно проводить анонимные опросы, чтобы выявить сомнения

— Обучайте команду конструктивной обратной связи. Тут советую всем Методичку по ненасильственному общению и Фреймворки обратной связи

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

3️⃣ Отсутствие обязательств
Лечение:

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

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

— Для экшн-айтемов четко прописывайте: кто, что и до какого момента должен сделать

Признаки улучшения: Решения принимаются быстрее, команда более последовательна в их выполнении. Экшн-айтемы с ретроспектив не накапливаются, а своевременно выполняются.

4️⃣ Уклонение от ответственности
Лечение:

— Проводите регулярные сессии обратной связи в формате 360

— Поощряйте культуру "вызова", где каждый член команды может задать вопрос о действиях коллеги. Тут важно не переборщить 🙂

— При возникновении ситуаций как в прошлом посте, например один разработчик слишком часто берет дейоффы, спрашивайте у ребят на 1-1 — что мешает им высказаться

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

5️⃣ Невнимание к результатам
Лечение:

— Визуализируйте общие цели команды и регулярно обсуждайте прогресс

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

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

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

———

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

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

Product Developer

11 Sep, 15:55


Yet Another Level плейлист!

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

Прям советую посмотреть:

📌 Георгий Могелашвили, Lead Developer / ex Engineering Manager @ Booking.com — «Как расти, когда не растят». Сильный доклад о самостоятельном составлении плана развития.

📌 Александр Афенов, мой коллега, Technical Cluster Lead в Авито Доставке.
«Жока и Бока: две очень разные судьбы тимлидов». Сравнение двух подходов к роли тимлида:
— с естественной склонностью, но без плана,
— без склонности, но с чётким планом.
Спойлер: есть подводные камни в обоих вариантах.

📌 Евгений Антонов, мой товарищ, технический менеджер в Yandex Infrastructure.
«Играющий тренер: выиграет или проиграет?» Личная история о том, как быть тимлидом, который пишет код, и в какой момент это перестаёт работать.

📌 Анастасия Абрашитова, руководитель отдела DevTools, Яндекс — «Без ботвы: растим тимлидов правильно» — как повышать разработчиков до тимлидов, чтобы это не превратилось в лотерею.

Ссылки на плейлист:
📺 — YouTube

📺 — VK Видео

Product Developer

09 Sep, 09:16


Пять пороков команды

— это концепция пирамиды из книги Патрика Ленсиони Five Dysfunctions of a Team. Мне кажется, что cлово «порок» — не совсем корректная локализация, поэтому буду писать «дисфункция».

Пост получился объёмным, поэтому я его разделил на две части: здесь обзор и примеры, а в следующем — о методах «лечения».

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

Итак, вот они, слева-направо, люблю их снизу-вверх:

1️⃣ Отсутствие доверия — члены команды боятся ошибиться, т.к. предполагают, что за ошибку их сначала публично отчитают, а потом и вовсе уволят (и из-за этого они умрут от голода).

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

Это базовая дисфункция, лежащая в корне всех остальных проблем. Поэтому «лечение» команды нужно начинать именно с неё.


2️⃣ Боязнь конфликтов — команда избегает конструктивных споров: либо поверхностно соглашается с решением, либо быстро идет на компромисс, который в итоге никому не выгоден. Лишь бы не вступать в конфликт

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

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


3️⃣ Отсутствие обязательств — команда не берет на себя ответственность за решения и договоренности.

Кто не принимает решений, тот не ошибается — Удобно.

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


4️⃣ Уклонение от ответственности — члены команды не призывают друг друга к ответу за действия и результаты.

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

Например, никто не обращает внимания на то, что коллега постоянно нарушает код-стайл, аргументируя это спешкой. Техдолг растет, но все молчат.
Другой пример — один из разработчиков слишком часто берет дейоффы и «болеет». При этом никто из команды этого не замечает.


5️⃣ Невнимание к результатам — личные цели ставятся выше командных.

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



В итоге, это всё про страх потерять работу. Сиди на попе ровно, получай зарплату, не делай много / не высовывайся, не требуй много с других / не докапывайся.
И всё будет хорошо.

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

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

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

Product Developer

06 Sep, 09:21


Yandex Scale — бесплатная конференция по облачным технологиям

25 сентября в Москве пройдет конференция, где будут выступать не только сотрудники Яндекса, но и спикеры из Райфа, Lamoda, Mindbox и других компаний.

Конференция организована по всем канонам: целый день, 5 параллельных треков, перерывы для нетворкинга и афтерпати в завершение.

Среди докладов меня заинтересовали:

— Новые возможности PostgreSQL 17
— Сломать, чтобы починить: парадокс хаос-инжиниринга в действии
— Новые горизонты платформы YDB: DWH, оптимизации, варианты поставки
— Ускоряем построение высоконагруженных решений на базе serverless YDB

Участие в конференции бесплатное, но требуется предварительная регистрация.

Лично я планирую смотреть онлайн. А вы присоединитесь?

Product Developer

04 Sep, 09:14


Podlodka Podcast: Авторизация

Вышел эпизод подлодки со мной!

Позвали рассказать про Авторизацию, а говорили 90% времени про Аутентификацию.
Про то, насколько всё проклято, и какое нас ждёт светлое будущее без паролей.

Ну и немного про авторизацию. И совсем чуть про технику.

С Podlodka Crew мы дружим давно: в составе программного комитета я делал конференции HR Crew и несколько сезонов Teamlead Crew.

А вот до подкаста дорос только сейчас. Все-таки Podlodka — это подкаст №1 в русскоязычном айти. Высший пилотаж, так сказать.

Спасибо Егору и Жене, что позвали. Приятно поговорить с умными людьми 🙂

🎧 Послушать

👀 Посмотреть на ютубе

Product Developer

30 Aug, 15:21


Как подготовиться к собесу на тимлида?
… в продолжение к предыдущему посту.

Читать каналы из тимлидской папки, конечно же!

☀️Мой любимый Роадмап тимлида в канале Teamlead Good Reads — огромная база знаний по разным аспектам работы тимлида. Это очень толковый инструмент для собственного развития. А для собеса Роадмап поможет структурировать рассказ о себе.

☀️ Тимлид Очевидность — кладезь опыта. Ведет мой товарищ — Евгений Антонов. С удовольствием читаю сам и 100% могу рекомендовать.
— Как тимлиду собеседовать работодателя
— Подготовка к собеседованию по STAR
— Как оценить результат работы тимлида — эпизод подкаста, который поможетосознать свои заслуги и толково о них рассказать.

☀️ Ув. тов. Шароватов. — Вопросы работодателю на собесе. Невероятно харизматичный тимлид и просто аутентичный человек, с которым приятно общаться и перенимать опыт.

☀️TeamLead. С места в career. — Собеседование руководителей. К Ольге я приходил за советом еще когда стартовал свой канал 🙂 Точно рекомендую.

В папке 19 каналов. Верю, что каждый сможет найти для себя интересное.

Подписывайтесь: https://t.me/addlist/CidpeALk4WJiODJi

Product Developer

26 Aug, 10:01


DevOps в продуктовой разработке: outsource vs in-house

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

Продуктовая разработка и аутсорс DevOps могут показаться несовместимыми. На первый взгляд, это даже антонимы 🙂
Ведь DevOps — это не профессия, а культура совместной работы разработки и эксплуатации.
Однако давайте взглянем на это с другой стороны.

В Авито, например, есть внутренняя PaaS (Platform as a Service). Она позволяет разработчикам сосредоточиться на бизнес-логике, абстрагируясь от нюансов инфраструктуры в большинстве случаев.

$ avito service create
И вот — новый микросервис в 3 кластерах с настроенным CI/CD, логами, метриками и трассировкой.

$ avito service add postgresql
Готово — PgSQL развернут, секреты в Vault, подключения настроены.

Это экономит кучу времени и ускоряет разработку. Но не отменяет DevOps культуру. Доступ ко всем конфигам кубера в наличии, а с постгресом можно работать в режиме full access, если очень нужно.

Во всех предыдущих компаниях, где я работал — в оценки по задачам мы закладывали разворачивание и настройку инфры — кубера, баз данных, систем для трассировки, …
И это было существенное время.

В том, чтобы отдать инфру на аутсорс, есть куча плюсов:

1. Фокус разработчиков на продукте: Разработчики сосредоточены на продуктовом коде, не отвлекаясь на инфраструктурные задачи.

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

3. Экономия ресурсов: Не нужно содержать штат инженеров инфраструктуры. Аутсорсер заботится о найме, мотивации, обучении, отпусках, рабочем ноутбуке и пенсионных отчислениях.

4. Финансовая ответственность за SLA: при проседании ниже 99.95% аутсорсер выплачивает компенсацию.

Оптимальное решение часто находится посередине. Базовую инфраструктуру можно отдать на аутсорс, сохранив при этом in-house команду для критичных компонентов и поддержания DevOps-культуры.

Важно помнить: DevOps — это про людей и процессы, а не только про инструменты.

Подробнее — на лендосе DevOps-as-a-Service.

Поделитесь в комментах — насколько вы погружены в инфру? Сколько % времени разработки занимает DevOps?

———
Реклама АО «Селектел». ИНН: 7810962785 Erid:2VtzqvYLck5

Product Developer

23 Aug, 09:08


Культура код-ревью: приоритеты и скорость

Можно ли обойтись без ревью ради ускорения Time-to-Market? Теоретически да, но:
1. Можно пропустить косяки
2. Код станет труднее поддерживать
3. Уход единственного разработчика может остановить проект

Альтернативы есть: парное программирование или TDR. Но они подходят не всем.

Поэтому большинство проводит код-ревью. И у большинства есть боль — «зависание» задачи на ревью.

Порефлексировал, почему кодревью затягивается, и что мы делали, чтобы это порешать.
Спойлер: мысли почерпнул в Google’s Code Review Guidelines. Далее буду ссылаться на конкретные части.

👨‍💻 Удовлетворение на этапе открытия PR

Speed of Code Reviews

Разработчик отправляет код на ревью и с чувством выполненной работы берётся за новую задачу.
Очень легко говорить «никто не ревьювит мой PR». Но кто будет ревьюить, если все кодят?

Так происходит, если написание нового кода поощряется больше, чем ревью.

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

А чтобы доводить цель до прода — код-ревью должно быть быстрым.
Задача тимлида и самих разработчиков — создать культуру, поощряющую быстрое ревью.
«Начал день — сделай ревью, прежде чем сесть кодить. На дейли обсудите спорные моменты.»

🤌 Огромные PR

Why Write Small CLs

Ревьюить атомарные PR на несколько файлов и сотню строк гораздо проще и быстрее, чем 10k строк.

- Маленькие PR ревьювят быстрее и тщательнее.
- Меньше переделывать, быстрее правки по комментам.
- Проще мержить и разрешать конфликты.
- Проще раскатывать в прод и откатывать изменения

Фича кажется «неделимой»? Попробуйте Trunk-based development: слияние в мастер не всегда рабочего кода, закрытого фича-флагами. Начало разработки с абстракций, слияние, затем написание имплементаций.

🏓 Ревью-пинг-понг

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

1️⃣ — Новые комменты к нетронутому коду

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

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

Хорошее правило: «PR не должен быть идеальным — он должен улучшать код проекта на одну ступеньку».

Могут помочь статьи What to look for in a code review и Navigating in ChangeList.

2️⃣ — Комменты к исправлениям

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

- Стоит объяснять, почему просишь изменений.

- Стоит разделять обязательные к исправлению пункты и опциональные.

- Стоит в явном виде писать, как предлагаешь изменить. Можно даже с частями кода.
«Критикуешь — предлагай».

How to write Review Comments

===

Итог

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

Это не все причины, почему задачи могут зависать на ревью.
Поделитесь опытом в комментах — какие проблемы с ревью были у вас и как решали?

Product Developer

20 Aug, 10:11


ProductSense

Прежде чем писать этот пост, я спросил у нашего продакта: Илья, это ценная конфа?

«Обычно да, так как довольно требовательно отбирают спикеров и темы. Я был один раз, но остались очень крутые впечатления от воркшопов»

Поэтому я согласился порекламировать в обмен на билет.
И да, Илья идёт на неё, а я буду смотреть в онлайне 🙂

5-6 сентября, оффлайн в Москве или онлайн

Конфа для продактов и не только: есть доклады и про управление командой и проектом, а еще про взаимодействие Discovery <-> Delivery.

Спикеры и темы в расписании

Я бы сходил послушать Александра Вазюкова из Т-Банка с докладом “Приключение на 20 минут, или прогнозирование сроков проекта” (спойлер: прогнозирование не ради самого прогноза, а ради рефлексии)

А еще Александру Клименко из Soft Skills Lab — с докладом “Продакту не нужны софт скиллы?”. Кстати, еще у них будет воркшоп про переговоры.

В общем, советую посмотреть темы и прикупить билетик, хотя бы на онлайн.

17 августа подняли цены на билеты, но у меня есть промокод для билетов Digital Pass и Professional, который возвращает цену к прошлой. Промокод действует три дня, пишите мне в личку @engineering_memeger.

Вот ссылка на лендос конференции

Product Developer

13 Aug, 08:43


Technical Design Review (TDR)

Зачем нужно кодревью — понятно. У каждой компании есть инструмент для кодревью. У многих команд есть договоренности и практики по кодревью. Например, «смотреть PR до стендапа», «критикуешь — предлагай» и тд.

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

Эту проблему решает TDR — Technical Design Review.
Это как кодревью, но про архитектуру и заранее: инженер описывает в Confluence предлагаемое решение и собирает обратную связь с команды и внешних ребят.

Как и в кодревью, есть плюсы, минусы и подводные камни.

Плюсы:

1️⃣ Более проработанное решение будет быстрее разработано и с меньшими проблемами.
Серьёзная проработка архитектуры до старта разработки даёт возможность полноценно попроектировать и учесть обратную связь.

2️⃣ Обмен знаниями и гарантия документирования.
Есть возможность научиться проектировать архитектуру у более опытных ребят. Проектировать может один, а разрабатывать — другой. Полноценная дока появляется еще до старта разработки.

3️⃣ Осведомленность команды и соседей.
При разработке будет меньше вопросов. Не будет проблем с интеграцией и вопросов «а что это вы тут делаете?». Не возникнет блокирующих рисков.

Минусы:

1️⃣ Увеличивает Time2market
Это компенсируется временем, сэкономленным на поддержке и рефакторингах. TDR = контроль за техдолгом.

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

Способы решения этой проблемы — аналогичные для долгих кодревью:
— Договориться о сроках с ревьюерами.
— Определить в команде приоритет. В идеале, ревью кода и ревью TDR — приоритетнее, чем написание нового кода по своим задачам.
«Сел утром за работу — посмотри пулл реквесты и TDR».
— Заранее предупреждать о предстоящем ревью в следующем спринте. Просить запланировать ревью.
— Иметь четкую систему оценок и критичности комментов: что обязательно к исправлению, а что опционально.
— Иметь гайдлайны о том, что должно быть в TDR: компонентные и sequence-диаграммы, оценки объема данных и нагрузки, оценки рисков, план миграции, план отката. Это снимет часть вопросов, возникающих на большинстве TDR.


2️⃣ Иногда TDR делают там, где он не нужен, замедляя разработку. А иногда не делают там, где нужен, порождают риски.
Проблема в отсутствии договоренностей, какие изменения должны проходить через TDR.

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


Итог

Мы провели около 10 TDR за полгода.

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

Но в целом польза от TDR точно перевешивает.
Советую ли я читателю TDR?
— Однозначно, стоит попробовать!

Если у вас есть похожий опыт — делитесь в комментариях.