Работал в команде Яндекс Маркета. Участвовал в нескольких проектах: удаление deprecated сетевого запроса (резолвера) и замена его на новый, внедрение новой дизайн-системы, переход от старой архитектуры бэкенда к новой, которая только рендерит html.
Написал многопоточный статический анализатор кода с конфигурируемыми правилами на основе парсера Babel. Он строит иерархию виджетов, резолверов, JSX-компонентов, CSS-файлов, а также собирает интересующую о них информацию; это позволяет понять, что, например, на странице X используется много устаревших компонентов, медленных резолверов, непроизводительных CSS селекторов. Места их использования, конечно, можно просто найти через поиск, но это не даст информации о том, что находится выше в иерархии - например, не все страницы одинаково важны, а из всех использований медленного резолвера Y на важную страницу X приходится только 20%, и если удалять его вслепую - 80% времени бы ушло впустую. Это, кстати, реальные цифры, и до парсера много времени уходило на ручной анализ цепочки зависимостей, так как в Маркете кода очень много, и уровень вложенности соответствующий. Автоматический анализ скоратил время, необходимое на выполнение проекта, без преуменьшения, как минимум на 40%; помимо этого, несколько мест, откуда этот резолвер попадал на страницу, были очень неочевидные.
Первый мой проект - замена старого резолвера на новый на странице продукта. Старый резолвер работал с устаревшей, избыточной моделью данных; моей задачей было проработать новую модель, которую сделают бэкендеры, и использовать ее в коде. В результате, скорость загрузки страницы увеличилась до 50 мс.
Внедрил анализатор кода в CI/CD, чтобы никто не добавил медленный резолвер на страницу продукта, так как информация о том, что его больше нельзя использовать, дошла не до всех.
Ускорил смену фильтров товаров на 100 мс путем упрощения и оптимизации кода и сетевых запросов.
Участвовал во внедрении новой дизайн-системы, писал компоненты по дизайнерским гайдлайнам, применил анализатор кода для ускорения процесса составления задач и избавления от некоторых паттернов написания стилей.
Завел cron-задачу для автоматического анализа свежего кода и выгрузки информации в базу данных, на основе которой я создал дашборд.
Избавился от большого количества легаси и дублирующегося кода, суммарно более 3000 строк.
Писал и чинил тесты и моки, ревьювил код, разбирался с инцидентами, провел онбординг новому члену команды.
Занимался разработкой веб-приложений для записи и анализа ЭКГ и Холтеровского мониторирования.
Проект ЭКГ уже был в разработке; я добился перехода с устаревших технологий (jQuery, Bootstrap, чистый HTML) на современный стек (TypeScript, React, Redux, Webpack), улучшив архитектуру, поддерживаемость приложения, и Developer Experience, что повлекло уменьшение метрики обнаруженных в тестировании багов и увеличении метрики скорости закрытия задач.
Реализовывал сложный функционал: работа с большими объемами данных (отображение ЭКГ на канвасе, масштабирование, скроллинг), интерактивные элементы (выделение, аннотации, разметка), интеграция с back-end (REST API, WebSocket), запись и отображение ЭКГ в реальном времени.
Часть функционала уже была реализована в старой версии приложения, однако код был сложным для понимания и сопровождения, а также низкопроизводительным. Я переписал эти части с нуля, улучшив читаемость кода, производительность и отзывчивость интерфейса. Как пример - расположение 12 отведений ЭКГ на экране, ранее для каждого варианта был отдельный if, с множеством дублирующегося кода, ненужных вычислений, которые можно кешировать, и аллокаций памяти; я заменил это на декларативный подход с конфигурацией, кешированием, и универсальным рендерером. Помимо этого, я сильно оптимизировал код отрисовки, что увеличило фрейм-тайм с 50 мс до <16 мс на больших наборах данных.
Помимо написания кода, продумывал технические и архитектурные решения для проектов.
Занимался написанием клиентской части веб-приложения для внутренних нужд компании.
Разрабатывал компоненты по дизайнерским гайдлайнам, следуя принципам адаптивной верстки.
Реализовывал функционал приложения - работа с формами, отображение данных, навигация, сетевые запросы к API.
Исправлял @ts-expect-error, фиксил баги, улучшал читаемость и поддержку кода.
Участвовал в командных обсуждениях и планировании задач.
Работал с системой контроля версий Git, проходил код-ревью, вел задачи в трекере.