Десять лет кода руками
Прошлой зимой я собирался уволиться и больше никогда не работать программистом. Мне надоело писать код, надоело лидить, надоело всё.
Я не уволился. Вместо этого я начал работать с агентами, и вот уже несколько месяцев не пишу код руками. И не вижу, зачем: агент делает то же самое, только лучше и в сотню раз быстрее. Год назад я и близко не мог представить, что буду так работать.
Меньше чем за год моя работа изменилась полностью. Вместо скрам-команды — обычно из пяти–восьми человек, а иногда и из одиннадцати — два разработчика и бизнес-аналитик, а код пишут агенты. Я хочу написать об этом подробно, в четырёх постах. Этот — о том, как было раньше и как я дошёл до той зимы. Следующие — о том, как работа выглядит сейчас, почему обычная скрам-команда не получит такой скорости даже с агентами и чего это стоит.
Посты длинные и намеренно личные. Для меня это способ подвести черту под годами, когда я писал код своими руками. Руководства здесь не будет — про обвязку, с которой я работаю, есть отдельные посты (первый, что изменилось). Это другая сторона той же истории.
Путь
- до IT
- учёба
- EPAM
- 2006 – 2010 Реставрация исторических зданий в Петербурге
- 2010 – 2014 Гид на Пхукете Потом фотограф, виртуальные 3D-туры
- 2011 Промышленный альпинизм
- 2014 – 2016 Снова в России Йога, гипсовая лепнина, стройка
- 2015 Реставрация исторического интерьера
- Сентябрь 2016 Учу JavaScript
- Весна 2017 Первая работа, маленький стартап
- Осень 2017 EPAM
- 2019 – 2021 Большие интернет-магазины Кранч и выгорание
- 2021 – 2023 Внутренний портал, команда из четырёх
- Октябрь 2021 Отъезд из России
- 2024 – 2026 Команда мечты, WYSIWYG-редактор До января 2026
На верёвке
Промышленный альпинизм, фасад высотки
Помню, как первый раз повис на верёвке. Было очень страшно. Мне казалось, что я жутко боюсь высоты, и чтобы вывеситься в первый раз, мне понадобилось не меньше сорока минут борьбы со страхом. Потом это прошло, и я спокойно работал. Работа была тяжёлая, но мне очень нравилась: результат видишь сразу.
Это было не первое, чем я занимался, и не последнее. Путь в программирование был долгим и шёл через много мест, поэтому начну с начала.
До IT
Когда-то я много и долго путешествовал автостопом, и однажды меня занесло в Таиланд. Денег не было, нужна была работа, а мои друзья работали гидами. Я решил к ним присоединиться.
Сначала попробовал Паттайю, но она мне не понравилась. Потом поехал на Пхукет и где-то полтора года водил морские экскурсии: на Симиланские острова, на Пхи-Пхи и на другие острова, которых там много. Между сезонами знакомые позвали меня в промышленные альпинисты, и я уехал на одно лето. Со временем работа гидом мне надоела, и я решил попробовать себя в фотографии. Снимать людей у меня получалось не очень, и я стал делать виртуальные 3D-туры для коммерческой недвижимости — два из них до сих пор есть на странице «Обо мне». Это был небольшой и довольно успешный бизнес. Он закончился, когда в Таиланде случился очередной переворот, в 2014 году, и вместе с ним закончились деньги.
Две работы до программирования
Потом я вернулся в Россию. Там 3D-туры были почти никому не нужны. Я иногда преподавал йогу, вёл персональные занятия. Но денег перестало хватать совсем, и я решил пойти на стройку.
До этого я много работал на реставрации исторических фасадов в Петербурге. На этот раз это был монтаж новой гипсовой лепнины в новых квартирах. Я называю это тоже реставрацией, потому что мы часто приходили после других мастеров, которые сделали плохо, и наша бригада всё переделывала. Работать на стройке мне очень нравилось.
Большой минус этой работы — денег в ней мало, хотя и альпинистам, и реставраторам платят неплохо. Всё равно есть потолок, выше которого не подняться, разве что стать прорабом. К тому же работа физически очень тяжёлая, и здоровья на неё мне не хватало. Тогда я решил стать программистом.
Почему программирование
Зачем мне были нужны деньги, объяснить просто: семья выросла, и после возвращения в Россию денег стало совсем не хватать. Мы жили буквально на копейки и питались чем придётся.
Я думал, что вообще умею и чем могу зарабатывать. Было непонятно, куда идти дальше. Я выбрал программирование: мне всегда нравились компьютеры, с детства я любил игры. К тому же у меня уже был небольшой фриланс на WordPress и PHP, и какие-то деньги я на нём заработал.
Тогда в IT был большой бум. В программисты шло много людей, и они были очень нужны. Я вписался в эту волну просто потому, что рассудил рационально: это, наверное, самое эффективное, что я могу сделать.
Ещё я сделал одну полезную вещь: расспросил знакомых, кто из них каким программистом работает. Сначала я хотел заниматься Java, потому что там больше платят. Но оказалось, что войти в Java довольно сложно, и я решил стать фронтендером на JavaScript.
Одна книга и несколько месяцев
После одного крупного заказа у меня были деньги, чтобы два-три месяца сидеть дома и учиться. Точно не помню, но скорее всего это было с сентября по ноябрь 2016 года. Когда деньги стали заканчиваться, я вернулся к работе с гипсом и учился по вечерам. Без единого пропущенного дня.
Поначалу было очень тяжело: голову я к тому времени давно не нагружал. Я боялся, что не справлюсь. Но в методе не сомневался: при рациональном подходе успех почти неизбежен. А терпения и методичности у меня много. Главной книгой был «Выразительный JavaScript». Я брал главу, читал её и делал задания. Делал честно и не открывал следующую главу, пока не решил задания к предыдущей. Так и продвигался, медленно, перечитывая материал ещё раз, и ещё, и ещё, — пока не прошёл всю книгу.
Этот блог появился как раз тогда. Первый пост написан 31 декабря 2016 года: «Hello World!» и обещание скоро показать первый проект. Проект появился через четыре дня: «Жизнь», одно из упражнений из той же книги, на чистом JavaScript. Все одиннадцать демо 2017 года, которые до сих пор есть на сайте, — L-системы, розы, случайные блуждания — я написал руками, строчку за строчкой, в тот год, когда учился.
Сумасшедший гениальный директор
Как я нашёл первую работу, уже не помню; кажется, по какому-то объявлению. Это был стартап в Петербурге, своего рода посредник: он нанимал молодых разработчиков, которые хотели учиться, отбирал талантливых, обучал их и продавал их услуги на Upwork, оставляя себе процент. Вместе со мной туда пришли ещё двое. Мы были, можно сказать, супер-джунами.
Директор этой фирмы был действительно очень талантливым программистом. И абсолютно сумасшедшим. Например, его сутки длились не 24 часа, как у всех, а 26. Каждый день его ночь сдвигалась вперёд, и на работу он приходил в разное время. Иногда он ни с кем не разговаривал. Иногда кричал на нас.
Но именно он заложил фундамент, на котором я стою до сих пор. Он учил, как развиваются приложения, с чего начинать, где искать информацию. Как тестировать, на что опираться, на что обращать внимание, а на что нет. Как работать с людьми и с заказчиком. Что архитектура важна и что думать надо как инженер. Учил TDD и экстремальному программированию. Я сидел там до позднего вечера и учился.
У стартапа закончились деньги, и через друга меня взяли в EPAM.
Шесть месяцев, которые стали девятью годами
Я собирался задержаться максимум на полгода. И бам! Остался на девять лет. Именно из-за людей.
Люди, которых я встретил на первом проекте, были золотыми, фантастическими. Один офис, человек пятьдесят на проекте, и мы проработали вместе два с половиной года. У меня был прекрасный тимлид и прекрасный проджект-менеджер. Мы вместе пили пиво, проводили время, оставались после работы. Я правда ходил на работу с радостью. Все, с кем я тогда работал, стали моими друзьями, с некоторыми мы общаемся до сих пор.
И они были очень талантливыми. Я попал в команду, где все были на высоком уровне. Поэтому я довольно быстро освоился в программировании и получил опыт, который потом помог мне вырасти — сначала до сеньора, потом до тимлида, а потом заняться обучением.
Обучением в EPAM я занимался долго. Проводил много входных интервью. До сих пор провожу асессменты и готовлю к ним людей — то есть к переходу на следующий уровень. И да, звучит глупо, но компания отчасти стала мне семьёй и опорой, когда я уехал из России. Наверное, поэтому мне так трудно с ней расстаться. Она — отблеск того старого мира, которого уже нет.
Как работала скрам-команда
В самые загруженные времена мой день начинался в девять. Полчаса на кофе и почту. Потом четыре-пять часов встреч подряд, а между ними код-ревью и сообщения, которые приходили по ходу. На созвонах — статусы, разговоры с заказчиком, помощь застрявшим разработчикам. Созвоны и согласования съедали до 70% моего времени как лида; у обычного разработчика — 15–20%. Обед с коллегами в кафе. После работы — пара часов в школе архитекторов, внутреннем курсе EPAM. Дни пролетали, и людей в них было под завязку. Обычно такое мало кто любит, а мне это часто нравилось: дни не сводились к одному коду, было много переключений — общаться с людьми, проверять чужую работу, показывать свою.
Все эти годы я работал в аутсорсе: сначала e-commerce, большие интернет-магазины, потом life science. Последние пять лет я вёл команды. Типичная команда: два-три фронтендера, два бэкендера, один DevOps, два тестировщика, скрам-мастер, проджект-менеджер и бизнес-аналитик.
flowchart TB client["заказчик"] pm["проджект-менеджер"] ba["бизнес-аналитик"] sm["скрам-мастер"] lead["тимлид (я)"] fe["2–3 фронтендера"] be["2 бэкендера"] ops["1 DevOps"] qa["2 тестировщика"] client --> pm client --> ba pm --> lead ba --> lead sm --> lead lead --> fe lead --> be lead --> ops fe --> qa be --> qa
Процесс — стандартный скрам с множеством согласований. Работу делили на эпики, эпики на фичи, фичи на задачи; были WBS (разбивка работы на части), планирование спринта, рефайнмент, оценки в стори-поинтах. Фича шла в спринт, потом в тестирование. За типичный двухнедельный спринт мы сдавали одну страницу или один блок на странице. Бесконечный скролл с фасетами для магазина занял около трёх спринтов — полтора месяца. API был готов, мы делали только фронтенд. Сложность была в SEO: при прокрутке URL должен был меняться на нужную страницу. Карточки товаров были разной высоты, поэтому момент перехода на следующую страницу было трудно поймать. И скролл должен был работать в обе стороны. Сейчас такое делается примерно за день, но это тема следующего поста.
День разработчика уходил на код-ревью, которого было много, на демо тестировщикам и на отладку: поиск багов отнимал до 30–40% времени. Баги появлялись в основном из-за регрессий, невнимательности к деталям, не до конца проработанных контрактов с бэкендом и техдолга, который всегда путался под ногами. Тесты и техдолг обычно откладывали — на них никогда не было времени.
Велосити мы считали, но посреди спринта постоянно прилетали срочные задачи и ломали план, да и исправление багов портило картину. И оценки постоянно были занижены — из-за давления менеджмента, из-за того, что не понимали всей сложности задачи, и просто из оптимизма. Поэтому перед каждым релизом мы засиживались допоздна или выходили в выходные. Это было самое плохое.
Краков
Краков, январь 2019
Это было в январе 2019 года, ещё со старой командой в e-commerce, когда мы делали большой магазин. Заказчик пригласил нас к себе в офис в командировку. Днём мы занимались тем же, что и всегда, — работали, а вечером шли из гостиницы ужинать. На один из этих дней пришёлся мой день рождения, 21 января. Мы собрались все вместе — не то чтобы отмечать, день рождения был скорее приятным дополнением. Кажется, я даже никому не сказал, но точно не помню. Мы просто пили пиво в стейкхаусе и шутили. Было очень весело, был какой-то невероятный подъём и чувство единства. И очень вкусная еда — правда лучший бургер в моей жизни.
Команда за столом
Выгорание
Выгорание — сложная тема. Это был большой интернет-магазин, с мая 2020 по январь 2021 года, и меня позвали туда тимлидом. Опыта тимлидства у меня тогда было мало, и я плохо понимал, как распределять нагрузку. Я пытался быть и тимлидом, и архитектором, и проводить интервью, и учиться в школе архитекторов, и при этом ещё писать код. Наверное, если бы я выбрал что-то одно, то избежал бы выгорания — по крайней мере, в такой форме.
Мы очень спешили. Во многом потому, что при подписании договора мы — точнее, EPAM — пообещали, что к определённой дате всё будет готово. Но, как обычно, по ходу разработки возникли вопросы, которые долго утрясали. Отчасти это был переезд с легаси на новую технологию. Легаси был, кажется, на PHP или на Java — точно не помню. А переезжали мы на Next.js, для меня тогда новый, и под капотом в качестве API был GraphQL, тоже для меня новый. Технологии с массой деталей, которых я ещё не знал. А делать нужно было довольно сложные вещи: управлять контекстом данных из API, изменять их на фронтенде и следить, чтобы всё это не развалилось при серверном рендеринге.
И всё это — под давлением менеджеров, которые постоянно транслировали сверху: мы не успеваем, надо быть очень быстрыми, всё нужно было сделать ещё вчера, и виноваты в этом разработчики. Прямо этого никто не говорил, но это было лейтмотивом всей работы и, конечно, давило психологически. Проект горел и несколько раз пропускал дедлайн — не из-за ковида, а из-за слишком оптимистичных менеджеров, которые пообещали лишнего. Это был ад, пять-шесть месяцев без передышки.
Обычный день был просто тяжёлой работой. Открываешь ноутбук, закрываешь его через двенадцать часов и не помнишь, куда делся день, — он целиком ушёл туда. Иногда у меня не было ни сил, ни времени даже поесть. Слава богу, я тогда был не один, и дома мне очень помогали.
Всё навалилось одновременно. Школа архитекторов, в которую я тогда пошёл и толком не смог закончить, — закончил кое-как, для галочки. Интервью, которые я очень любил проводить: они были способом хоть немного отвлечься от проекта, который мне уже осточертел. И ковид, к которому я тогда относился серьёзно. Все сидели по домам в постоянном страхе заболеть. Всё это вместе и привело к выгоранию.
Постепенно я перестал выдерживать. Стал раздражительным, злым, срывался на близких. Началась депрессия, всё время было грустно. Но я продолжал работать — до тех пор, пока не начала очень сильно болеть голова. Дошло до того, что я открывал ноутбук, работал полчаса, и голова начинала болеть так, что работать дальше я просто не мог. Поднималось давление, лицо краснело.
Тогда я сказал своему лиду, скорее всего на личном созвоне: «Слушай, я не могу. Кажется, я серьёзно заболел». Я ушёл с проекта на бенч — так в EPAM называют оплачиваемое время между проектами. Тогда на бенче можно было какое-то время подождать проект и отдохнуть. Я пробыл там месяца два и понемногу начал восстанавливаться. Но вернуться к работе всё равно было тяжело: на новом проекте я долго не мог работать в полную силу и быстро уставал.
Спасибо потом никто так и не сказал. Думаю, из-за самой атмосферы: такая работа вызывает в команде общее раздражение. Люди просто устали друг от друга, и слов благодарности уже не находилось ни для кого. Прямо никто никого не винил, но обстановка была гнетущая.
Деревня
Жил я тогда в деревне. Уехал туда в 2020 году, спасаясь от локдаунов: подруга сдала мне дом, и я провёл в нём зиму 2020–2021 года — последние месяцы кранча, а потом бенч. На бенче я просто гулял, ходил в лес, жёг костры — природа всегда меня восстанавливает. Долгие ночи, камин, никакого программирования. Тогда же я после долгого перерыва вернулся к йоге и постепенно пришёл в себя. С тех пор я много внимания уделяю телу — спорт, нормальная еда.
Возвращался я тоже постепенно и начал ставить себе границы. На новом проекте я снизил нагрузку до минимума и занимался только им, без дополнительных обязанностей. Работал намеренно медленно, следил за балансом работы и жизни и уходил вовремя, что бы ни происходило. Потом перешёл на четырёхдневную рабочую неделю. Я и сейчас работаю четыре дня в неделю, и это очень помогает: у меня есть три дня, чтобы отдохнуть от работы. Платить за них приходится частью зарплаты, но я считаю, что оно того стоит.
На восстановление ушло, думаю, года полтора-два. А полностью я, кажется, так и не восстановился, но сейчас всё более или менее нормально. Главное, что я поменял, — границы. И теперь всем, кто попадает в такую же ситуацию, говорю, что так делать не надо.
Сейчас ситуация чем-то похожа. С агентами всё кажется лёгким, это как игровой автомат в казино: дёргаешь рычаг — получаешь очередную порцию дофамина. И от этого нужно сознательно отказываться, когда понимаешь, что пора: пора закрывать, пора заканчивать.
Тот, с кем никто не хотел работать
После бенча, с марта 2021 года и следующие два года, я вёл команду из четырёх разработчиков на корпоративном портале заказчика. Проект был так себе, не очень интересный. Но там я встретил парня, с которым никто не хотел работать.
Он пришёл в мою команду, и я сразу понял, что он талантлив: он глубоко разбирался в том, что делает, и всегда искал причину проблемы, а не просто чинил баг.
При этом с людьми он ладил очень плохо. Он был из небольшого города, никогда не работал в команде, и общаться ему было трудно. Английский у него был слабый, и работать с ним никто не хотел — он был очень нелюдимым. Он хотел уйти из компании. Я стал его ресурс-менеджером — в EPAM это человек, который следит за ростом разработчика и его проектами.
Никаких специальных тренингов я для него не устраивал. Мы просто много разговаривали и так или иначе касались командной работы. До этого он не работал в больших командах и не знал, насколько важно единство, которое в них возникает.
На самом деле нелюдимость была просто защитой. Ему нужно было время, чтобы оттаять и опустить щиты. Он замечательный, добрый человек. Когда он расслабился — а проработали мы вместе полтора года, — он стал отличным, полноценным членом команды. Сейчас он востребован везде, с ним хотят работать. Мы до сих пор дружим. Он живёт в Турции.
Почему мне нравилось быть лидом
Потому что это много работы с людьми. Мне всегда нравилось рассказывать, объяснять, помогать. Для лида это естественная и большая часть работы. И очень важная: ты разблокируешь людей, которые застряли и не знают или не понимают, что делать дальше.
Снимать барьеры, убирать препятствия, учить — это я люблю больше всего на свете. Для меня это очень важно и приносит огромное удовлетворение.
Так это выглядело с моей стороны. А вот как со стороны заказчика: в январе 2022 года архитектор заказчика написал мне рекомендацию в LinkedIn. Привожу её как есть, только без названия компании:
Igor is one of the best developers and tech consultants I know. At [the client] we are every day happy to work with him.
We are lucky to work as one team with people from EPAM, regional IT and corporate IT. This is of cause [sic] possible because everybody and specially Igor concentrates on results and quality. It is so great have a business relationship that is based on trust and not time consuming politics.
По-русски: «Игорь — один из лучших разработчиков и технических консультантов, которых я знаю. В [компании заказчика] мы каждый день рады с ним работать. Нам повезло работать одной командой с людьми из EPAM, регионального и корпоративного IT. Это возможно потому, что все, и особенно Игорь, сосредоточены на результате и качестве. Здорово, когда деловые отношения строятся на доверии, а не на политике, которая отнимает время».
Отъезд
Петербург. Я просто люблю этот город. Люблю его архитектуру — я много работал реставратором на разных исторических зданиях. Там я чувствую себя на своём месте. Мне нравятся каналы, река, которая течёт через весь город, гранит набережных. Я долго жил в центре. Это особенное место: туда со всей России едут люди, которые чем-то не похожи на остальных. Там встречаешь самых разных чудаков, и это здорово.
Я очень скучаю по Петербургу. Приезжаю туда раз в год и вижу, как сильно он изменился. Того города, который я любил, почти не осталось: все разъехались. Город стал другим. Но я всё равно его люблю и хотел бы когда-нибудь вернуться.
Октябрь 2021 года. Мне было тревожно: в России начались гонения на интернет, стали блокировать VPN, появилась цензура. Я решил, что ни к чему хорошему это не приведёт. После ковида мне захотелось взять паузу и пожить где-нибудь ещё. Такая возможность была: EPAM это позволял.
Я поехал на машине через Грузию в Турцию. Уезжать навсегда я не собирался, но вещи на всякий случай взял с собой. Куда именно еду, не знал, чёткого плана не было. Про Фетхие мне кто-то посоветовал, и мы просто туда приехали. Это оказался маленький, очень приятный и недорогой город у моря с прекрасным климатом.
Когда началась война и люди стали уезжать, в том числе в Турцию, мне, раз я уже был там, было совершенно естественно помогать. Та же разблокировка, то же снятие препятствий. Я всех звал в Фетхие, и там сложилось целое сообщество: коллеги из EPAM, люди из Петербурга. Одно время Фетхие был настоящим посёлком EPAM.
Но потом в Турции начались проблемы с документами и легализацией. Многие и так видели в ней перевалочный пункт перед Европой. Я тоже довольно быстро понял, что жить в Турции не хочу: слишком другая культура. Долго выбирал между Южной Америкой, Западной Европой и Сербией и в итоге остановился на Сербии — она близка России по культуре, и жить в ней приятно.
Команда мечты
Моя последняя настоящая скрам-команда. На пике, кажется, у нас было пять разработчиков: я как лид, один бэкендер и трое фронтендеров. Ещё проджект-менеджер, которая была и бизнес-аналитиком, и два тестировщика. Почему эта команда была прекрасной? Потому что мы все дружили и все были замечательными людьми.
Это были 2024–2026 годы, уже после ковида; все жили в разных местах, так что команда была удалённой. Проект из life science — WYSIWYG-редактор. Бывало, после работы мы созванивались и просто болтали. Все хорошо сработались, процесс был очень дружеским. Скрам-церемонии мы более или менее соблюдали, но дело было не в них, а в людях.
Мне очень повезло встретить этих людей. Моя последняя настоящая скрам-команда была идеальной — просто потрясающие люди, и я их всех люблю.
Последний код, который я написал руками
Проект команды мечты закончился, когда у заказчика кончились деньги и он решил заменить разработчиков из СНГ разработчиками из Индии. Люди стали уходить — по одному, по двое. Стало ясно, что всё заканчивается, и я ушёл тоже. Это был январь 2026 года. Было очень грустно. Но в аутсорсе это, к сожалению, неизбежно: проекты меняются, ты переходишь с одного на другой, хотя и привязываешься к людям. Я стараюсь держать с ними связь и не теряться в этом большом мире. Из-за войны все разъехались по разным странам; все до сих пор работают, хотя и не все в EPAM. Мы остались друзьями.
Тот WYSIWYG-редактор стал последним проектом, где я написал руками много кода. Я много профилировал и копался в Redux-сторе. Проект был очень сложным. После него был небольшой — софт для научных микроскопов: там руками я вносил только мелкие правки и писал тесты, а потом быстро перешёл на агентов. Последняя большая вещь, которую я помню написанной своими руками, — тот редактор.
И ещё одно я понял только сейчас. Когда я придумывал какой-нибудь свой проект, меня всегда останавливало то, что весь этот код придётся долго писать самому. Это был барьер, из-за которого я даже не начинал. Поэтому за годы в EPAM пет-проектов практически не было. Лучше всего это видно по GitHub:
В год, когда я учился, я начинал что-то новое раз в несколько недель. Потом восемь лет почти ничего. А потом 2026-й — о нём следующий пост.
Люди
Вести людей, разблокировать их, учить — это была тяжёлая работа, но благодарная. А теперь она не нужна. И это потеря.
Наверное, люди всегда были для меня главным в профессии. И мне грустно, что наша работа дробится, команды становятся меньше, а нас заменяет машина. Мы можем работать быстро и эффективно — очень быстро и очень эффективно. Но того братства, того сообщества фактически уже нет.