Описание
Costo.ru — агрегатор интернет-магазинов и маркетплейсов России: каталог товаров, сравнение цен от десятков магазинов, характеристики, рейтинги и отзывы. Под капотом — собственная платформа на PHP 8.3, на которой работает не один проект: помимо Costo на том же движке живёт второй бренд со своей базой, своим сервером и своей темой оформления. Каждое изменение в ядре затрагивает оба бизнеса — это накладывает отпечаток на то, как мы работаем.
Проект состоит из трёх приложений:
•costo.ru — публичная витрина, рендерится на сервере (PHP + собственный шаблонизатор)
•admin.costo.ru — административная панель (Vue 3 SPA)
•seller.costo.ru — кабинет продавца (Vue 3 SPA)
Backend обслуживает все три и отвечает как за HTML-рендеринг витрины, так и за REST API для админок.
Задачи
•Разработка и развитие модулей: каталог, карточки товаров, ценовые предложения, атрибуты и фильтры, кабинеты продавцов, биллинг
•Развитие конвейера обработки товарных данных: парсеры прайсов и фидов, алгоритмы идентификации и сопоставления товаров
•Оптимизация работы с базой: профилирование и переработка тяжёлых SQL-запросов, проектирование индексов и структур таблиц
•Развитие REST API для админки и кабинета продавца
•Развитие серверного рендеринга публичной витрины
•Работа с фоновыми задачами: CLI-команды, Job-классы, очереди на Redis, воркеры
•Интеграции с внешними системами: ЭДО (Диадок), Яндекс.Маркет, IndexNow, платёжные и почтовые сервисы
•Написание миграций (Phinx) и тестов (PHPUnit)
•Настройка и поддержка логирования, мониторинга и алертинга (Sentry)
•Постепенное улучшение архитектуры и снижение техдолга — у нас нет иллюзий по поводу состояния некоторых частей системы
•Участие в код-ревью, планировании задач и выработке архитектурных решений
•Совместная работа с frontend-разработчиками и QA
Требования
•Опыт коммерческой разработки на PHP от 3 лет, уверенное знание PHP 8.x
•Уверенная работа с MySQL: написание и оптимизация сложных запросов, чтение планов выполнения (EXPLAIN), индексы, блокировки, транзакции
•Опыт работы с нативным SQL и PDO без ORM: подготовленные выражения, защита от инъекций, осознанная работа с транзакциями
•Опыт работы с миграциями БД (Phinx, Doctrine Migrations или аналоги)
•Опыт проектирования и разработки REST API
•Опыт работы с Redis (кэш, сессии, очереди)
•Опыт написания CLI-команд и фоновых воркеров, понимание особенностей долгоживущих PHP-процессов: потребление памяти, идемпотентность, поведение при падениях
•Опыт обработки больших объёмов данных: пакетная обработка, потоковое чтение файлов, контроль памяти
•Опыт реализации интеграций по HTTP (Guzzle или аналоги), работа с нестабильными внешними API: таймауты, ретраи, обработка ошибок
•Опыт написания unit- и функциональных тестов (PHPUnit)
•Знание Composer, Git
•Умение читать и анализировать логи backend-сервисов
•Способность разбираться в чужом коде и дорабатывать существующую систему без полного переписывания
•Умение самостоятельно разбираться в сложных задачах, принимать решения и аргументировать выбранный подход
•Ответственное отношение к архитектуре, качеству кода и долгосрочной поддержке продукта
Будет плюсом
•Опыт работы с агрегаторами, маркетплейсами, крупными каталогами или e-commerce
•Опыт написания парсеров прайс-листов и товарных фидов (YML, XML, XLSX, CSV), задач сопоставления и дедупликации товаров
•Опыт реализации фасетного поиска и фильтрации по большому числу параметров
•Опыт постепенного рефакторинга легаси: выделение слоя доступа к данным, снижение связанности, покрытие тестами
•Знание Doctrine DBAL/ORM — рассматриваем поэтапное внедрение
•Опыт работы со статическим анализом (Psalm, PHPStan)
•Опыт работы с очередями (RabbitMQ, Kafka) — на случай развития текущей очереди на Redis
•Опыт настройки CI/CD (GitHub Actions), Docker
•Опыт работы с системами мониторинга (Grafana, Prometheus, Sentry)
•Понимание SEO для крупных каталогов и серверного рендеринга
•Опыт работы с мультитенантными платформами
Условия
Мы работаем в офисе по понедельникам и пятницам, ориентировочно с 10:00 до 17:30. Офис находится в собственности компании — это не арендное пространство. Мы постарались сделать его максимально комфортным и уютным: скорее он напоминает небольшой бутик, чем классический офис.