#инженерная культура

6 постов
пост №1634Технологии и общество

Диалог уровня Тарантино из недавно рассекреченных документов судебного дела о приватности в фейсбуке. Special master — эксперт назначенный судом, расспрашивает двух супер-опытных инженеров фейсбука под присягой (один из них уровня директора) про то, как фб хранит и обрабатывает данные.

Мой вольный перевод исходника.

Эксперт: у нас ведь есть блок-схема? Вы ведь когда прогаете — наверняка у кого-то должна быть схема, где эти данные хранятся?

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

Эксперт: то есть нужно смотреть в исходный код, чтобы понять... я имею в виду...

Зарашоу: честно говоря, я тоже был в ужасе, когда только устроился на работу.

пост №1451Разработка и инженерия

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

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

Через 3-6 лет в компании уже 50 разработчиков. Продукт при этом практически не развивается, фичи доставляются разработкой в продакшен со скорость улитки. Добавьте к этому зарплаты разработчиков в 100-400 тысяч в месяц и вы можете представить, что чувствует бизнес. Почему так?

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

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

В общем, искать виноватого смысла нет, а варианты решений следующие:

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

2. Если же вам нужно развивать то, что есть — то впереди вас ждут пот и слёзы.

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

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

Организационно, вам придётся выделять на это адское количество времени и сил. Речь о 30-50% времени ваших инженеров. Результаты, в плане увеличения скорости разработки, вы увидите через месяцы в лучшем случае. Другого пути я не знаю.

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

В общем, это — путь смелых.

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

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

пост №1328Управление и команды

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

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

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

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

А ещё, я впервые увидел большие горы и встретил день рождения в горах ❤️

пост №1167Управление и команды

Чего делать точно не стоит — это пытаться выдать аварию за штатную профилактику.

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

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

пост №1076Личное

Увольняюсь из Пьюр.

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

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

Плохие пользователи (bad actors) бывают двух типов: те, кто стригут мелкую монету с массовых рассылок и те, кто шантажируют точечно, но на крупные суммы. За эти полгода мы ударили по обоим категориям.

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

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

Внутри чатов Pure мы предупреждаем о том, что собеседник снял скриншот чата и когда он предлагает перейти в другой мессенджер. В способе предупреждений — весь интерфейсный кайф Pure. Это не системное уведомление, а один из 7 классных рисованных персонажей, который вклинивается в переписку и на понятном языке объясняет риски. В последнем релизе мы добавили чумовые стандартные аватарки и отключили возможность загружать картинки из галереи (только фото здесь и сейчас).

Ещё на нас была хакерская атака, которую мы успешно отразили (к сожалению, пока без подробностей).

Но главная моя работа в другом. Когда я пришел в компанию, в ней было 19 технарей. Много формальной документации, но мало реального общения, инициативы и ответственности за результат. Ухожу я из команды в 9 человек, с гораздо более живыми процессами. Буквально месяца не хватило запустить полноценный продуктовый цикл с новым, очень многообещающим дизайнером (привет, Надя!), но я знаю, что Pure на правильном пути.

До этого я работал в компаниях, в которых уже был правильный дух в технической команде. Я чувствовал его и пытался не сломать, но как его создать? Как целенаправленно поддерживать? Для меня это было загадкой и я боготворил людей, которые умеют его создавать — Егора Хмелева и Андрея Зайцева-Зотова, например.

Оказывается, нет никакой магии, недоступной мне, простому смертному. Достаточно не бояться говорить «нет» и верить своим чувствам. Это из области, которую трудно формализовать, но легко увидеть и почувствовать. Как это прекрасно сказал судья конституционного суда США, I know it when I see it. Если ваши разработчики ясно излагают свои мысли (ясно мыслят), свободны и инициативны — то всё в порядке. Если чего-то из этого не хватает — у вас будут проблемы. Я не говорю тут о hard skills вроде умения программировать — с этим проблемы возникают куда реже. Сложнее всего правильно договориться, что мы будем программировать и для чего.

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

Менять мир вокруг себя страшно, но эти изменения и есть жизнь.

Воу, программный пост получился. Аминь и с рождеством вас 🎄

пост №1029Управление и команды

Представьте, вы - столяр. Перед вами свободный рабочий стол, вокруг по порядку расставлены инструменты. Это рабочее место профессионала.

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

К сожалению, отличить эти две ситуации в IT неспециалисту не просто.

Оценить скорость работы в IT, её объем — очень трудно.

Следите за качеством. Качество — надежный и заметный неспециалисту прокси инженерной культуры. Если качество страдает — значит под техническим капотом и в процессах есть проблемы.

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

Почему ломается инженерная культура? Я знаю две основные причины:

1. Руководители не дают времени на наведение порядка. Вина в таком случае обычно не только на руководителе, но на и на инженере, который не смог донести важность _рефакторинга_ (это термин для наведения порядка в IT). Классический рецепт катастрофы: продакт знает, каких изменений хочет в продукте, а про технологии понимает мало, умеет убеждать; технари плохо доносят необходимость постоянных инвестиций в наведение технического порядка. Говорить с бизнесом о своей работе понятным языком — часть профессиональной компетенции программиста. 🧨 Быстрый способ: не доверять программистам, считать, что они идиоты и/или не иметь с ними диалога.
2. Технари недостаточно компетентны и оказываются погребены под сложностью монстра, которого сами соорудили. Бонус очки, если инженер имеет завышенную самооценку и/или боится признаться в ошибке.

——

Что делать?

Хорошо бы исправить ситуацию с текущими программистами. Они обладают знанием вашей системы, вашей предметной области. Это дорого стоит

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

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

———

Мне везло работать в компаниях, где с инженерной культурой всё ок. Сделать в Pure классно — для меня профессиональный вызов. Интересно и сложно.