Здравствуйте! Меня зовут Данила, я фронтенд-разработчик.
Я занимаюсь вебом больше 15 лет — писал бэкенд на PHP и node, делал прототипы и сам дизайн, верстал и продавал, руководил небольшими (3 человека) командами, отвечал за продукт перед заказчиком, работал в больших и очень больших продуктовых командах в самых разных конфигурациях.
Хорошо знаю JavaScript и DOM/Browser API, пишу на React, Effector и Redux/MobX, ориентируюсь в современном стеке сборки и тестирования.
Скептически отношусь к использованию LLM для написания кода и внимательно слежу за осознанностью комментариев на код-ревью )
Мои сильные стороны - технический опыт, умение понимать задачи бизнеса, уравновешенное отношение к технологиям и умение быстро и самостоятельно разбираться в концепциях, технологиях и подходах.
Сейчас я ищу работу над интересным продуктом в компании с не душной корпоративной культурой. Отдельным пунктом люблю прозрачные коммуникации внутри компании, эджайловость в процессах, всяческие 360 ревью и прочие инструменты быстрого цикла обратной связи.
Мои знания — TS, JavaScript ESNext React, Effector.js, MobX, Redux, Webpack/Vite git, Mocha, CSS и препроцессоры, БЭМ, CSS-in-JS, HTML, UX/UI (Figma/Photoshop). Английский — Intermediate.
Ссылка на мой гитхаб — https://github.com/alpatovdanila
В компании я отвечаю за frontend-часть продукта Ecom, работающего в составе платформы OnePlatform. Со мной над фронтендом так же работают мои коллеги - два middle разработчика.
Своими основными достижениями считаю:
Полный перевод продукта на новый стек.
Это была плановая, большая и важная задача для компании. Фактически, это означало переписывания продукта с нуля. В этом проекте я отвечаю за архитектуру и фреймворк-часть проекта, соглашения и систему релизов, взаимодействие с бизнесом, кросс-командное взаимодействие, за интеграцию с другими продуктами платформы, провожу код-ревью, анализ задач, планирование.
Результат - многократно возросшая скорость разработки новых фич, простота поддержки существующих, стало возможным использовать тестирование, современные практики оптимизации бандлов, улучшилась скорость работы продукта. Текущий стек проекта - React + TS + Effector. Мы коммитим по Сonventional Commit, ведём проект по Feature Slices, используем авторелизы и доставку через gitlab ci.
Система релизов в новом проекте.
Из-за особенностей платформы, релизы нашего продукта под неё были сопряжены с большим количеством сложностей: для легаси-версии нашего продукта время «от IDE до Production» составляло до 10 часов и требовало много ручной работы ответственного сотрудника. Для улучшения этой ситуации я пересмотрел то, как наш продукт работает в составе платформы, предложил решение, участвовал в его разработке, и, совместно с командой платформы, довёл его до релиза. Задачу удалось решить, и теперь релизы фронтенд-части продукта может делать любой разработчик в команде. Время релиза сейчас составляет около 15 минут, а сам релиз и доставка происходят автоматически.
Межпродуктовое взаимодействие на фронтенде
Интересной была задача по интеграции нашего продукта с продуктом другой команды. Наши и их модули модули используются в рамках одной конечной страницы сайта и исторически имеют точки взаимной интеграции, однако раньше «взаимодействие» происходило через mutationobserver, перехват событий и другие хаки. Совместными усилиями мы разработали систему, похожую на микрофронтенд-подход, наладили общение между продуктами по отдельному fontend api, внедрили service-locator. Всё это улучшило качество и уменьшило количество кода, упростило логику взаимодействия, иными словами - сильно уменьшило множитель скорости накопления техдолга в этой части продукта.
Улучшение метрик производительности
Поскольку на новом проекте стало возможным использовать современные подходы к сборке проекта, удалось уделить вниманию размеру бандла и оптимизации при сборке. Я изначально внимательно следил за зависимостями проекта и старался свести их к разумному минимуму. Кроме этого, мы активно используем React.lazy-компоненты, методики ux-оптимизации - скелетоны, ленивую загрузку. В добавок к этому оставшаяся статическая часть бандла разбивается на чанки. С ростом количества клиентских сайтов, получивших новую версию нашего продукта общий прирост производительности будет заметен всё больше и больше.
Бандл легаси-версии пректа занимал около 1.5 мегабайт, сейчас размер чанка не превышает 200 килобайт, а общий вес всего бандла со всеми асинк-чанками находится на отметке около 700кб
Хочется так же упомянуть несколько моментов, которые не оказали непосредственного влияния на продукт, но важны для меня.
Релизы легаси-версии продукта приходилось (и всё ещё приходится) делать, и этот процесс для себя я автоматизировал - написал тулзы для упрощения и автоматизации процесса, сведя ручную работу при релизах к минимуму.
Взял на себя менторство начинающего JS-разработчика из команды поддержки нашей компании. Я уже вижу его прогресс и это круто )
Я в вебе очень давно. Не смогу назвать год начала работы, скажу лишь что первую HTML-страницу я сделал в 14 лет, и дальше все как в тумане :) Я занимался всем, но больше всего - дизайном, версткой и попытками запустить стартап мечты. Встречал рассвет блокчейна, встречал закат джаббера, встречал стаковерфлоу в 4 часа утра в попытках решить проблему с jquery и встречал совсем молодого Виталика Бутерина. :D Работал верстальщиком на конвеерной разработке, маркетологом в оптовых продажах, водителем-грузчиком и установщиком видеонаблюдения. Делал дизайн на вольных хлебах, убеждал больших дядечек выделить миллиончик на прототипчик обалденного b2b-продукта и получал только 100 тысяч. Писал систему для управления картодромом и постигал мир текущей памяти в JVM (я так ничего и не понял)
Со временем остепенился, заинтересовался продуктовой разработкой и фронтендом. Сначала мне удавалось создать видимость того что я крутой фронтендер за счет опыта в дизайне, но со временем я стал действительно неплох, потому что часами просиживал в ванильном js, изобретая собственные реализации vdom, реактивных библиотек с автоподписками, ui-китов и всякого такого.
А потом я попал на работу в UDP Auto, о чем написано в предыдущем блоке )