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

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

Шаг первый: осознал, что пора переходить в бэкенд

Сначала я определил для себя первопричину этого желания. 

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

У нас в Авито это нормально — поделать что-то в чужой специальности, если нужно помочь команде. Так я решил попробовать свои силы в бэкенде, понять, как работает смежная область, освоить новые для себя подходы в разработке и прокачать инженерные скиллы. Заодно это помогло бы разгрузить бэкенд-разработчиков в команде и выполнить OKR, которые в большей степени концентрировались на бэкенде.

Шаг второй: получил «благословение» от тимлида и сформулировал цели

Я озвучил своё желание тимлиду, мы обсудили с ним все варианты и риски. Он был не против того, чтобы я выполнял задачи с перевесом в бэкенд и «благословил» меня на это. 

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

  • понимать базовые вещи бэкенда: языки, паттерны проектирования;

  • понимать контекст задач;

  • поговорить с другими командами с чужой функциональностью;

  • выяснить все неопределённости для решения задач;

  • описать и декомпозировать задачи;

  • реализовать их в рамках дедлайнов.

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

Я советую описывать цель более конкретно по системе S.M.A.R.T., например, так:

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

M — measurable, измеримая. По какому показателю я пойму, что цель достигнута. Защититься на калибровках как бэкенд-инженер или пройти собеседование в %COMPANYNAME% на бэкендера.

A — attainable, достижимая и реалистичная. Хватает ли мне ресурсов, чтобы достичь цели. У меня есть всё рабочее время, плюс я готов посвящать достижению цели часть свободного времени. Команда и компания меня в этом поддерживают и готовы помогать. Поэтому — да.

R — relevant, актуальная. Как моя цель соотносится с глобальными целями компании. Компании нужны универсальные разработчики, которые готовы выполнять задачи в смежных областях. Им буду я.

T — time-bound, ограниченная во времени. Когда именно я хочу прийти к цели. Через полгода.

Шаг третий: изучил основы языка и нашёл ментора

Чтобы понимать, что происходит в коде, нужно понимать основы языка и иметь навык написания простых запросов в базу. У меня был опыт работы с другими языками программирования, поэтому проблем не возникло. За пару недель я перешёл с JavaScript’a и TypeScript’a на Go.

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

Шаг четвёртый: начало практики и посвящение в бэкендеры

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

Первые задачи были из разряда «добавить поле», «обогатить ответ на ещё один параметр» и так далее. Такие задачи дали легкий старт. Я видел, что и как написано, и по этому образу и подобию выполнял первые бэкендерские таски. 

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

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

Также я прошёл посвящение в бекендеры, как же без него :)

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

Это график работы сервиса, который отдаёт отзывы на карточку объявления. В 19:36 я запустил эксперимент, в 19:37 всё стало ухудшаться. В 19:52 сервис уже работал в штатном режиме.

Результаты и впечатления

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

Самым трудным для меня было приобрести мышление бэкенд-разработчика. Бэкендеры в задачах более высокоуровнево смотрят на вещи, а мне этого не хватало. Вообще это решается просто: надо начать вести себя как бэкендер, проектировать сервисы, защищать их перед коллегами и разрабатывать. Оно плавает как уточка, крякает как уточка, ведёт себя как уточка, значит, это уточка :)

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

Мои планы на будущее

В ближайшие полгода я планирую доосвоить знания в нужных для работы областях:

  • базы данных;

  • высокоуровневая архитектура;

  • Go на продвинутом уровне. 

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

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

Что делать, если ваша компания против горизонтальных переходов

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

Если среди коллег не удалось найти ментора — идите в социальные сети, например, LinkedIn. Наверняка там найдётся какой-то проактивный бэкендер, который шарит знание и готов помогать новичкам. Ещё есть сайт по поиску менторов — Solvery. Там можно найти менторов по фронтенду, бэкенду, QA и другим специальностям, не только по разработке. Например, по продакт-менеджменту. 

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

Предыдущая статья: Ультимативный гайд по HTTP. HTTP/1.1

Комментарии (10)


  1. Enfriz
    01.06.2023 22:30
    +1

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


    1. 143672
      01.06.2023 22:30

      В статье написано, что автор перешёл с js/ts на go.


      1. Enfriz
        01.06.2023 22:30

        Да, я сам проглядел, сорри. Видимо искал глазами куски кода по привычке.


    1. Arves
      01.06.2023 22:30

      С фронта можно перейти в бекенд на NestJS, там есть и микросервисы, и типизированный язык, и ООП, и дженерики, и DDD, и CQRS с Event Sourcing, и даже кое-как с тредами можно работать.


  1. r45h
    01.06.2023 22:30
    +1

    Зачётная статья)


    1. komarovPS Автор
      01.06.2023 22:30
      +1

      Спасибо)


  1. tamazyanarsen
    01.06.2023 22:30
    +1

    Конечно, не хочется иметь синдром самозванца, но знать всё в бэкенде — просто нереально, в сравнении с фронтендом.

    Вы прям уверены, что разница настолько огромная?)

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

    Если что, это не попытка выставить фронтенд очень сложным направлением в разработке. Просто интересно услышать Ваше мнение, почему Вы считаете, что всё разобрали или можете разобрать на фронтенде, но не можете на бэкенде?


    1. komarovPS Автор
      01.06.2023 22:30
      +1

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

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

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


  1. 1kuzroman
    01.06.2023 22:30

    Во фронтенде нет сложностей и вызовов? Хм. Я понимаю когда можно сбежать от сложностей фронтенда к другим но на беке. 15 лет в разработке, 10 последних из которых делаю задачи фронта. Для меня неожиданно, когда слышу такие высказывания.


  1. noodles
    01.06.2023 22:30

    Оба направления разработки сложны и невозможно или близко к невозможному разобрать все в этих областях.

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