Найм backend разработчика — в штат или на аутсорс?
От того, что «под капотом» у вашего продукта зависит не только текущая стабильность, но и будущая масштабируемость. Бэкенд-разработчик или даже целая бэкенд-команда должны обладать иметь высокий уровень знаний и компетенций, вне зависимости от того, нанимаете ли вы их в свою команду или на аутсорс. Этот гид поможет вам понять всё необходимое о бэкенд разработке: как найти разработчика нужного уровня и понять, что он идеально подходит для работы на вашем проекте.
Кто такой бэкенд-разработчик и какие задачи решает
Бэкенд-разработчик занимается внутренним (серверным) устройством продукта: организует быструю работу сервиса, хранение данных и передачу информации пользователю, отвечает за правильное функционирование продукта и его логику.
Бэкенд (от англ. backend) сайта, приложения или сервиса — это всё, что работает на сервере, программно-аппаратная часть продукта. Любой запрос пользователя на сайте или отправка им данных передаются на сервер, где они обрабатываются и фильтруются. Ответ возвращается в виде текста или изображения, в зависимости от запроса и того, что находится в базе данных. Например, бэкенд отвечает за отправку сообщений, поиск информации, регистрацию пользователей, хранение данных о содержимом корзин, настройку платежей и другие функции.
Задачи и ответственность
- реализует логику продукта, проектирует архитектуру и алгоритмы;
- обеспечивает корректную работу функционала сайта или приложения;
- создает и организовывает базы данных (СУБД);
- проектирует API - интерфейсы взаимодействия, куда выводится информация, полученная с сервера;
- интегрирует продукт с внешними сервисами;
- тестирует и отлаживает серверную часть;
- оптимизирует или рефакторит код, чтобы повысить его эффективность;
- разрабатывает и интегрирует различные модули, например аутентификации;
- ведет техническую документацию.
В зависимости от ниши и опыта набор обязанностей бэкенд-программиста может меняться. При этом бэкенд-разработчик не создаёт продукт в одиночку и плотно взаимодействует с другими специалистами: frontend-разработчиками, UX/UI-дизайнерами, тестировщиками, аналитиками, SEO и т.п.
Какими языками нужно владеть backend-разработчику
Чтобы создать серверную часть, можно использовать практически любой язык программирования. Самые популярные для разработки: Ruby, PHP, Python, Erlang/Elixir, Golang, Java/Kotlin/Scala, JavaScript/Node,.NET, C#.
Мы в своей работе чаще всего используем четыре языка: Ruby, Python, Go, Elixir. Некоторые из проектов, которые мы создали на этих языках:
Cryptopay — B2B-платформа для криптопровайдера.
Machinio — агрегатор предложений и поисковая система для сервиса по продаже техники.
Fresh Auto — ERP-система для автодилера.
KFC — система персонализации для сети ресторанов.
Полный перечень проектов, для которых разработчики Evrone делали backend вы можете посмотреть в разделе Кейсы.
Бэкенд-программист не обязательно владеет большинством этих языков. Но он знает базовые парадигмы и способен быстро освоить новый язык программирования, чтобы с его помощью решить поставленные задачи.
Что должен уметь бэкенд-разработчик
В отличие от рекрутеров сами разработчики оценивают опыт не в годах, а в уровне квалификации.
- Junior справляется с небольшими односложными задачами, учится в процессе, нуждается в контроле со стороны более опытных коллег.
- Middle может справиться практически с любой задачей, ему можно доверить полностью бэкенд продукта.
- Senior имеет большой опыт работы над инженерными задачами, у него широкий арсенал навыков, он может делиться своей технической экспертизой с мидлом и вести проект от начала до конца.
- Lead — ведущий разработчик, которой управляет командой, ставит задачи, следит за выполнением плана работ и качеством продукта. Может быть техлидом и писать код руками или тимлидом с высоким уровнем soft skills — для эффективного управления проектом и выстраивания коммуникации. Принимает и проверяет код, разрабатывает документацию, помогает решать трудные задачи, работает с системами с высокой нагрузкой.
Основные требования к программистам и как их проверить на собеседовании
- Junior
Компетенция: знание хотя бы одного языка программирования: Python, Ruby или Golang
Что спросить: На каких языках вы программируете?
Компетенция: работа с системами управления базами данных (практически любой сервис использует хранилище данных)
Что спросить: С какими типами баз данных вы работали? Что бы вы выбрали для решения нашей задачи — MySQL, PostgreSQL, MongoDB, Cassandra, Redis, Memcached? Расскажите, как бы оптимизировали базу данных и запросы к ней?
Компетенция: опыт работы с системами контроля версий, например Git
Что спросить: Какую систему контроля версий вы использовали в разработке?
Компетенция: понимание, как работают сервера
Что спросить: С какими серверами вы работали? Какие особенности у Apache, NGINX, IIS?
Компетенция: знание Linux
Что спросить: Какой у вас опыт работы с Linux? Какие дистрибутивы знаете?
Компетенция: трудоспособность
Что спросить: Как долго вы работаете над кодом? Что будете делать, если нужно сдать проект в сжатые сроки? Часто ли вы отвлекаетесь в процессе работы?
Компетенция: навыки планирования и исполнения плана
Что спросить: Как вы планируете свою работу? Что будете делать, если случится аврал, срыв сроков? Были у вас уже такие ситуации? Как справились?
Компетенция: знание английского языка, на уровне от intermediate
Что спросить: Предложить прочитать техническую документацию и объяснить её. Или пройти небольшой тест.
- От Middle и выше
Компетенция: для интеграции веб-продукта со сторонними сервисами требуется знание API, REST, SOAP (последние два используются всё реже)
Что спросить: Какие функциональные API вы писали? Для каких задач?
Компетенция: для ускорения процесса разработки нужно знание фреймворков: Ruby on Rails, Erlang/OTP, Django.
Что спросить: С какими фреймворками вы работали?
Компетенция: умение проводить тестирование
Что спросить: какие тесты вы создавали? Какие библиотеки для тестирования вы используете? Писали юнит-тесты?
Компетенция: знание основ сетевой безопасности
Что спросить: Какие инструменты, обеспечивающие безопасность, вы знаете? Какие проблемы могут с ней возникнуть? Какие методы их решения вы знаете?
Компетенция: умение оценивать и улучшать производительность веб-сервиса
Что спросить: Если продукт плохо работал, как вы улучшали его эффективность? Какой у вас опыт в рефакторинге кода?
Есть опыт в масштабировании проекта?
Компетенция: навыки составления чёткого ТЗ и его оценка
Что спросить: Составляли ли вы ТЗ? Для каких задач? С какими ошибками чаще всего встречались в ТЗ?
Компетенция: знание основ фронтенда: может возникнуть необходимость отладки с использованием клиентской части сервиса
Что спросить: Какие принципы работы у протоколов TCP/IP, HTTP? Что такое REST? Как работают HTML, CSS, JavaScript?
Софт скилл: умение доводить дело до конца
Что спросить: Все ли продукты, которые вы разрабатывали, запускались и корректно работали? Если какие-то из них не запустились, почему?
Софт скилл: умение работать в команде
Что спросить: Как вы строите коммуникацию с коллегами? Что делаете, когда заканчиваете свою часть работы? Что вы сделаете, если кто-то совершит, на ваш взгляд, глупую ошибку?
- Senior и Lead
Компетенция: глубокие знания нескольких языков программирования для разработки серверной части (например, Ruby, Go, Python, Elixir, Node JS, Rust, Haskell)
Что спросить: Какие языки вам нравятся и чем?
Компетенция: знание фронтенда и/или fullstack
Что спросить: Какой у вас опыт в веб-разработке полного цикла?
Компетенция: умение решать проблемы и снимать технологические риски
Что спросить: С какими проблемами и сложными задачами вы встречались? Приходилось ли вам доносить до руководства/заказчика риски, которые вы предвидели до начала разработки проекта?
Софт скилл: умение ставить задачи команде и управлять ей
Что спросить: Какой у вас опыт в управлении командой? Как вы распределяете нагрузку? Как часто отправляете код на доработку?
Софт скилл: постоянно развивается, в курсе изменений в отрасли
Что спросить: Что и как вы делаете для своего развития? На какие каналы подписаны, какие блоги/профильные сайты читаете? Какие митапы и конференции посещали?
Софт скилл: умение делиться своим опытом с новичками и командой
Что спросить: Были ли вы наставником для других разработчиков? С какими сложностями сталкивались?
Софт скилл: хорошие коммуникативные навыки и умение убеждать.
Что спросить: Как вы доносили до команды/заказчиков своё решение? Как убеждали в своей правоте? Как вы объясняли команде свои решения?
Где можно найти бэкенд-разработчика
Есть несколько вариантов подбора специалиста: в штат, на аутсорс, на аутстафф. В штат сотрудников ищут на сайтах профильных IT-сообществ, сайтах с вакансиями, биржах фрилансеров. На аутсорс и аутстафф сотрудников можно найти в веб-студии. Рассмотрим подробнее все варианты, где искать backend-разработчиков на проект.
Сайты с вакансиями и резюме, такие как Мой круг (Хабр Карьера) и Head Hunter. Здесь можно изучить резюме и другие вакансии бэкенд-программистов, понять, какие навыки востребованы и сколько стоят разработчики разного уровня.
Профильные IT сайты, биржи фриланса и удалённой работы. Самые популярные среди разработчиков:
- Хабр Фриланс — биржа для специалистов от известного в IT-среде портала;
- FL.ru — крупная биржа IT-фрилансеров;
- vc.ru — здесь можно разместить вакансию;
- Кворк — на сайте можно заказать определённую услугу (например, разработку на Python}.
Мессенджеры и социальные сети. в первую очередь - это Телеграм каналы с вакансиями и группы на Facebook.
Профессиональные конференции, митапы, хакатоны. На этих мероприятиях можно выйти на кандидатов, которых невозможно найти в интернете.
Если вам требуется разработка бэкенда, расскажите нам о своём проекте.
Инхаус-команда, аутсорс или аутстафф?
Инхаус — это найм разработчика или целой команды штат. Аутстафф — это аренда у агентства дополнительных разработчиков или CTO в вашу команду. Аутсорсинг разработчиков — вы формулируете задачу, а студия разработки выполняет ее силами своих сотрудников, включае управление проектом и подбор людей в команду.
Процесс найма backend разработчика
Процесс найма зависит от того, есть ли у вас команда, которую просто нужно дополнить backend разработчиком на аутсорсе или же вы хотите собрать команду с нуля и обращаетесь к нам за технической экспертизой.
Мы можем выделить для решения вашей задачи одного программиста, CTO или целую команду backend-разработчиков. Напишите нам о вашем проекте — мы оценим сроки и поможем выбрать подходящий вариант сотрудничества.