Вакансия: ведущий разработчик Сравнятора (закрыта)
Привет! Меня зовут Вова, я руковожу разработкой медиапроектов Тинькофф.
Ищу опытного фулстек-разработчика на JS, который возьмется за перезапуск и дальнейшее развитие Сравнятора.
Кто такой ваш Сравнятор
Сравнятор — продукт Тинькофф-журнала, который помогает покупать осознанно. У продукта две фишки:
- Проверенные отзывы. У нас строгая модерация отзывов, где мы просим автора подтвердить, что он действительно приобрел товар или услугу, о которой пишет.
- Независимые авторы. Продавцы и производители не влияют на наши обзоры товаров и услуг.
Зарабатываем по реферальной или CPA-модели. Сам продукт состоит из двух частей: медиа и сервиса. Медиа — лента с материалами, которые выходят в журнале. Сервис — раздел с базой курсов и отзывами на них.
Что предстоит сделать
Перезапустить сервис, чтобы расширить его не только на образовательные продукты, но и на товары и услуги в целом. Для этого придется ввести другую модель абстракций, которыми оперируем в сервисе, запрогать это все, а по пути избавиться от компромиссов, которые позволили нам быстрее запустить продукт, но тормозят его развитие. Если списком, то как-то так:
- Разработать новую систему сущностей и их бизнес-логики: товары, категории, отзывы, авторы отзывов, продавцы aka магазины. Заложить масштабирование на будущее для отзывов из других источников и производителей.
- Отредизайнить существующие страницы, разработать страницы товаров, списки товаров в категории и навигацию по категориям.
- Разработать систему парсинга, которая поможет автоматизировать заполнение базы товаров.
- Забрать целиком ответственность за сценарии внешних пользователей и внутренних: модераторов отзывов и контента.
- По необходимости оптимизировать рендеринг: время ответа, настройки кэша и прочие штуки, чтобы выбить как можно лучшие показатели в PageSpeed.
С медиа все ок, его хотим развивать дальше:
- Улучшить возможности ленты.
- Добавить категории товаров и отзывы на страницу с лентой.
- Вставлять в материалы виджеты с контентом сервиса.
Что по технологиям
На фронте React. На бэке Node.js и Nest.js. И там и там TypeScript. Клиенты общаются с сервисами по REST, для удобства подрубили Swagger. Между собой бэкенды общаются по шине на Google Pub/Sub, но мы переделываем это на Кафку. Админка на React-admin.
Сервисы развернуты в «Яндекс-облаке». Там же крутятся managed-базы: Postgres и Redis. У нас настроены пайплайны на Gitlab CI, в которых запускаются линтеры и тесты. Сервисы собираются в Docker и деплоятся с помощью ArgoCD в Kubernetes-кластеры.
По коммиту в фича-ветку поднимается динамическое окружение. Изменение мастера триггерит деплой на стейдж. По гит-тегу раскатывается прод, можно из фича-ветки.
Зачем кого-то нанимаем
MVP Сравнятора запускали силами команды интерактивных проектов журнала, чтобы протестировать гипотезу. Теперь понятно, что продукт с нами надолго, а у команды интерактивов свои цели и планы. Поэтому собираем команду, которая сфокусируется на долгосрочном развитии Сравнятора.
Кто уже в команде
Техническая команда делится на несколько подкоманд, Сравнятор — одна из них. Разработчики совмещают работу в технической и продуктовой командах. Причем больше времени — в продуктовой. Там свои планирования, ретроспективы, работа над фичами и все такое.
Руководит Сравнятором Андрей Фролов, бывший главный редактор vc.ru. У команды уже есть выделенный дизайнер интерфейсов и QA-инженер. Не хватает только разработчиков: ведущего, про которого речь в этой вакансии, и мидл-фулстека, которого ищем параллельно. Еще у Сравнятора своя команда выпуска, но о ней как-нибудь в другой раз.
При этом есть процессы, общие для всех технарей:
- Код-ревью общее между разными направлениями.
- Общие соглашения: в каком формате у нас логи, сколько апрувов на реквест необходимо и достаточно.
- Инфраструктурные решения: что использовать как шину для асинк-общения между сервисами, где и как агрегировать логи и так далее.
- Архитектурные решения: в каких случаях допустимо использовать синхронное общение между сервисами, какой способ общения станет предпочтительным.
- RFC, ADR и другие полезные практики.
- Добровольное парное программирование.
Всего в медиапроектах больше сорока технарей: 20 фронтендеров и JS-фулстеков, 10 бэкендеров-питонистов, 5 инженеров по тестированию, 4 мобильщика — RN-фулстека, 2 инфраструктурных инженера.
Иногда практикуем иннер-сорс: доработку чужих сервисов и принятие доработок от коллег.
Что предлагаем кандидату
Предстоит писать код, работать с бизнесом и вести второго разработчика, а в перспективе — целую команду:
- Декомпозировать бизнесовую постановку на задачи. Продакт приносит диздок, макеты, пользовательские сценарии и иные подробности. Разработчик формирует из этого задачи себе и коллегам, указывает технические детали и оценивает трудоемкость.
- Проектировать решения этих задач. Если нужно — рисует диаграммы, расписывает модели и потоки данных, пишет RFC-документы, применяет шаблоны проектирования.
- Делегировать часть задач другому разработчику и контролировать выполнение.
- Много читать и писать на JavaScript. Проходить ревью самому, проводить код-ревью другим JS-разработчикам, не только внутри Сравнятора. При этом действовать по правилу бойскаута: оставлять фрагмент кода, с которым поработал, лучше, чем он был. Автотестов это тоже касается.
- Самостоятельно доталкивать задачу в продакшен. Если нужно, уточнить требования, использовать результаты работы коллег, пройти тестирование у наших инженеров, сопроводить выкатывание на прод, отрефлексировать полученный опыт.
- Если потребуется, спроектировать новый сервис на знакомых технологиях по требованиям бизнеса, выделить MVP, заложить масштабирование в случае наплыва пользователей.
- Систематически улучшать работу команды: выделять проблемы, пробовать их решать, отказываться от нерабочих решений и снова рефлексировать. Если требуется — эскалировать бизнесу или мне.
- Взять на себя некую менеджерскую рутину: помогать бизнесу принимать решения, планироваться, проводить встречи с сотрудниками один на один и вот это все.
На какие условия можно рассчитывать:
- Белая оплата раз в месяц по договору. Нанимаем не в штат, а на ГПХ, как самозанятого или как ИП. По возможности и желанию потом переведем в штат. При этом все равно доступны тариф на продукты для сотрудников и корпоративное обучение.
- Удаленная работа. Мы работаем распределенно и адаптируем к этому свои процессы. По желанию можно приходить в офисы разработки Тинькофф в городах, где они есть.
- Свободный график. Главное — соблюдать договоренности: участвовать в запланированных встречах, отвечать вовремя и все в таком духе. Работу планируем исходя из занятости 40 часов в неделю.
- Добровольное участие в материалах о сотрудниках журнала.
Что ожидаем взамен
Если формально, то ожидаю, что кандидат:
- Владеет стеком: JavaScript, TypeScript, jest, React 18, Node.js, Docker, Postgres.
- Умеет верстать и знает особенности последних браузеров.
- Не боится задач, связанных с парсингом сайтов.
- Понимает, как работает веб, и умеет в проектирование систем: клиент-серверное взаимодействие, REST, особенности асинхронной работы, разница между реляционными и нереляционными базами данных, чистая архитектура, DDD.
- Минимально разбирается в структурах данных, алгоритмах и их сложности: о-нотации, цикломатическая сложность, рекурсия, стеки, очереди, кучи, списки, графы.
- Умеет спроектировать MVP-сервис по бизнес-требованиям и спланировать его масштабирование в случае наплыва пользователей.
Большим плюсом будет опыт работы с NGINX или опыт написания сложных скрапинговых систем.
Из софтов главное — самостоятельность: получить задачу от бизнеса, уточнить непонятное, декомпозировать и расписать, обсудить с коллегами, если нужно, написать код, сдать в тестирование, выкатить на прод, прийти к бизнесу за следующей задачей. Высший пилотаж — по дороге ни с кем не поссориться, а в итоге еще что-то отрефлексировать.
Поскольку вакансия на ведущего разработчика, пригодится опыт управления людьми или техническими проектами: выстраивания процессов по гибкой методологии, налаживания коммуникаций, найма, повышений, помощи с обучением и развитием сотрудников, проведения планирований и ретроспектив.
Как проходит трудоустройство
Процесс такой:
- Спишемся в Телеграме.
- Пообщаемся о предыдущем опыте и работе у нас, можно голосом.
- Созвонимся на пару часов со мной и с кем-нибудь из коллег. Порешаем задачи на знание языка и умение проектировать, ответим на вопросы.
- Если результаты ок, обсудим условия. Еще раз созвонимся, если потребуется. Если по результатам позвать будем не готовы, дадим обратную связь.
- Дальше дистанционно оформим документы, я пришлю инструкцию по доступам.
- Можно начинать онбординг и работу.
Как помогаем расти
При желании у нас можно научиться:
- Выращивать стажеров и делегировать им задачи. Несколько раз в год набираем студентов Физтеха, Вышки, Бауманки, МГУ и других вузов с неплохими техническими программами.
- Смежным с работой софт- и хард-скиллам. В Тинькофф развитая система внутренних тренингов — от безопасности веб-приложений до поиска баланса между работой и личной жизнью.
- Писать статьи на «Хабр» и «Медиум», выступать с докладами на митапах и конференциях. Наши редакторы, HR и DevRel помогут подобрать тему, собрать материал, подготовиться и опубликоваться или выступить.
- Другим навыкам, которых вам будет недоставать для работы. Есть возможность поучиться на курсах или послушать конференции за счет компании.
Как откликнуться
Чтобы обсудить вакансию, пишите на почту или в Телеграм. Лучше начать с короткого рассказа о себе и ссылок на примеры кода.