Чем занимается тимлид разработки веб-проектов в ритейл-компании?

Михаил Бородин — о том, как разработать сервисы для нескольких тысяч магазинов и обучить кладовщиков Python

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

Чем я занимаюсь

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

Я работаю в крупной ритейл-компании. Мы разрабатываем сервисы, которые помогают сотрудникам следить за пополнением магазинов или распределительных центров. Как тимлид, я контролирую весь процесс создания проекта: проверяю, все ли мы успеваем, управляю ресурсами, планирую следующие проекты, обмениваюсь опытом с другими командами.

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

Курс

Python-разработчик

Пройдите 10-месячный курс, освойте Python с нуля и сделайте 2 больших кейса для портфолио. Дополнительная скидка 5% по промокоду BLOG.

Узнать больше

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

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

Мы объясняли на мемах, чем отличается frontend от backend.

Наша цель — вырастить разработчиков, а не использовать их как ресурс. Поэтому мы в компании запустили школу для начинающих программистов. Мы читаем курс по Python для сотрудников, которые хотят попасть в IT. Он разделен на две части: основы и продвинутый Python. На основах мы рассказываем про синтаксис, структуры, computer science, алгоритмы. На продвинутом мы углубляемся в прикладную разработку: изучаем Django, студенты учатся создавать сайты, приложения. В конце они защищают выпускной проект, и лучших мы рекомендуем внутри самой компании.

Кому и для чего нужен Python можно узнать в этой статье.

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

Какие инструменты мы используем

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

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

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

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

В асинхронном стеке нет крупных фреймворков, есть отдельные библиотеки: AIOHTTP для реализации HTTP-запросов; недавно появился FastAPI для создания API-сервисов; можно использовать Celery — это система для выполнения задач из очереди по расписанию.

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

Работа реляционных баз данных сильно замедляется, если собирать данные из разных таблиц одним запросом. Если часто работать с одним и тем же набором данных, его проще положить в хранилище, которым легко и быстро пользоваться, чтобы снять нагрузку с баз данных, ускорить чтение данных. Для этого можно кэшировать запросы либо прямо в базе, либо в отдельном хранилище; мы кэшируем данные в Redis.

Со временем мы также научились минимизировать потери и снижать риски. Бывало, что у нас падали сервера с сервисами, поэтому мы проводили ретроспективный анализ и решали, как не попасть снова в такую ситуацию: писали сразу unit-тесты (проверка отдельных частей кода), проверяли продукт перед релизом, переходили на Kubernetes (оркестратор для развертывания и управления контейнеризированных приложений) для безопасного запуска, делали бэкапы.

Так выглядит мое рабочее место

Как я стал тимлидом

Помимо Python я изучал HTML, JavaScript, поэтому был практически fullstack-разработчиком. Я разрабатывал платформы для визуализации анализа геопространственных данных, чтобы аграрии, экологи и лесники могли анализировать территории или, например, замерять урожайность.

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

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

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

Зачем идти на курсы и составлять портфолио

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

Судьба всех программистов — это вечная учеба. Я тоже стараюсь изучать новые технологии не только в программировании, но и в проектировании. Недавно изучил domain-driven design — это проектирование исходя из предметной области проекта, в котором ты работаешь. Благодаря ему можно создавать масштабируемые приложения, где все четко структурировано.

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

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

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

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

Курс 

Fullstack-разработчик на Python

Получите навыки программирования, освойте бэкенд на Python и фронтенд на JavaScript, чтобы стать востребованным специалистом в IT. 

  • длительность курса — 15 месяцев;
  • можно совмещать с работой и учебой;
  • сопровождение карьерного центра и подготовка к трудоустройству.

Узнать больше

Промокод «BLOG» +5% скидки

Какие курсы вам подходят

Профессия «Fullstack-разработчик на Python»

От 9000 Р/мес

15 мес

Подробнее о курсе

Профессия «Python-разработчик»

От 3375 Р/мес

10 мес

Подробнее о курсе

Профессия «Java-разработчик»

От 4650 Р/мес

14 мес

Подробнее о курсе
(рейтинг: 5, голосов: 3)
Добавить комментарий