1K

Вакансия: ведущий разработчик Сравнятора (закрыта)

Аватар автора

Вова Лазарев

руководитель разработки

Страница автора

Привет! Меня зовут Вова, я руковожу разработкой медиапроектов Тинькофф.

Ищу опытного фулстек-разработчика на JS, который возьмется за перезапуск и дальнейшее развитие Сравнятора.

Кто такой ваш Сравнятор

Сравнятор — продукт Тинькофф-журнала, который помогает покупать осознанно. У продукта две фишки:

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

Зарабатываем по реферальной или CPA-модели. Сам продукт состоит из двух частей: медиа и сервиса. Медиа — лента с материалами, которые выходят в журнале. Сервис — раздел с базой курсов и отзывами на них.

Что предстоит сделать

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

  1. Разработать новую систему сущностей и их бизнес-логики: товары, категории, отзывы, авторы отзывов, продавцы aka магазины. Заложить масштабирование на будущее для отзывов из других источников и производителей.
  2. Отредизайнить существующие страницы, разработать страницы товаров, списки товаров в категории и навигацию по категориям.
  3. Разработать систему парсинга, которая поможет автоматизировать заполнение базы товаров.
  4. Забрать целиком ответственность за сценарии внешних пользователей и внутренних: модераторов отзывов и контента.
  5. По необходимости оптимизировать рендеринг: время ответа, настройки кэша и прочие штуки, чтобы выбить как можно лучшие показатели в PageSpeed.

С медиа все ок, его хотим развивать дальше:

  1. Улучшить возможности ленты.
  2. Добавить категории товаров и отзывы на страницу с лентой.
  3. Вставлять в материалы виджеты с контентом сервиса.

Что по технологиям

На фронте 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-инженер. Не хватает только разработчиков: ведущего, про которого речь в этой вакансии, и мидл-фулстека, которого ищем параллельно. Еще у Сравнятора своя команда выпуска, но о ней как-нибудь в другой раз.

При этом есть процессы, общие для всех технарей:

  1. Код-ревью общее между разными направлениями.
  2. Общие соглашения: в каком формате у нас логи, сколько апрувов на реквест необходимо и достаточно.
  3. Инфраструктурные решения: что использовать как шину для асинк-общения между сервисами, где и как агрегировать логи и так далее.
  4. Архитектурные решения: в каких случаях допустимо использовать синхронное общение между сервисами, какой способ общения станет предпочтительным.
  5. RFC, ADR и другие полезные практики.
  6. Добровольное парное программирование.

Всего в медиапроектах больше сорока технарей: 20 фронтендеров и JS-фулстеков, 10 бэкендеров-питонистов, 5 инженеров по тестированию, 4 мобильщика — RN-фулстека, 2 инфраструктурных инженера.

Иногда практикуем иннер-сорс: доработку чужих сервисов и принятие доработок от коллег.

Что предлагаем кандидату

Предстоит писать код, работать с бизнесом и вести второго разработчика, а в перспективе — целую команду:

  1. Декомпозировать бизнесовую постановку на задачи. Продакт приносит диздок, макеты, пользовательские сценарии и иные подробности. Разработчик формирует из этого задачи себе и коллегам, указывает технические детали и оценивает трудоемкость.
  2. Проектировать решения этих задач. Если нужно — рисует диаграммы, расписывает модели и потоки данных, пишет RFC-документы, применяет шаблоны проектирования.
  3. Делегировать часть задач другому разработчику и контролировать выполнение.
  4. Много читать и писать на JavaScript. Проходить ревью самому, проводить код-ревью другим JS-разработчикам, не только внутри Сравнятора. При этом действовать по правилу бойскаута: оставлять фрагмент кода, с которым поработал, лучше, чем он был. Автотестов это тоже касается.
  5. Самостоятельно доталкивать задачу в продакшен. Если нужно, уточнить требования, использовать результаты работы коллег, пройти тестирование у наших инженеров, сопроводить выкатывание на прод, отрефлексировать полученный опыт.
  6. Если потребуется, спроектировать новый сервис на знакомых технологиях по требованиям бизнеса, выделить MVP, заложить масштабирование в случае наплыва пользователей.
  7. Систематически улучшать работу команды: выделять проблемы, пробовать их решать, отказываться от нерабочих решений и снова рефлексировать. Если требуется — эскалировать бизнесу или мне.
  8. Взять на себя некую менеджерскую рутину: помогать бизнесу принимать решения, планироваться, проводить встречи с сотрудниками один на один и вот это все.

На какие условия можно рассчитывать:

  1. Белая оплата раз в месяц по договору. Нанимаем не в штат, а на ГПХ, как самозанятого или как ИП. По возможности и желанию потом переведем в штат. При этом все равно доступны тариф на продукты для сотрудников и корпоративное обучение.
  2. Удаленная работа. Мы работаем распределенно и адаптируем к этому свои процессы. По желанию можно приходить в офисы разработки Тинькофф в городах, где они есть.
  3. Свободный график. Главное — соблюдать договоренности: участвовать в запланированных встречах, отвечать вовремя и все в таком духе. Работу планируем исходя из занятости 40 часов в неделю.
  4. Добровольное участие в материалах о сотрудниках журнала.

Что ожидаем взамен

Если формально, то ожидаю, что кандидат:

  1. Владеет стеком: JavaScript, TypeScript, jest, React 18, Node.js, Docker, Postgres.
  2. Умеет верстать и знает особенности последних браузеров.
  3. Не боится задач, связанных с парсингом сайтов.
  4. Понимает, как работает веб, и умеет в проектирование систем: клиент-серверное взаимодействие, REST, особенности асинхронной работы, разница между реляционными и нереляционными базами данных, чистая архитектура, DDD.
  5. Минимально разбирается в структурах данных, алгоритмах и их сложности: о-нотации, цикломатическая сложность, рекурсия, стеки, очереди, кучи, списки, графы.
  6. Умеет спроектировать MVP-сервис по бизнес-требованиям и спланировать его масштабирование в случае наплыва пользователей.

Большим плюсом будет опыт работы с NGINX или опыт написания сложных скрапинговых систем.

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

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

Как проходит трудоустройство

Процесс такой:

  1. Спишемся в Телеграме.
  2. Пообщаемся о предыдущем опыте и работе у нас, можно голосом.
  3. Созвонимся на пару часов со мной и с кем-нибудь из коллег. Порешаем задачи на знание языка и умение проектировать, ответим на вопросы.
  4. Если результаты ок, обсудим условия. Еще раз созвонимся, если потребуется. Если по результатам позвать будем не готовы, дадим обратную связь.
  5. Дальше дистанционно оформим документы, я пришлю инструкцию по доступам.
  6. Можно начинать онбординг и работу.

Как помогаем расти

При желании у нас можно научиться:

  1. Выращивать стажеров и делегировать им задачи. Несколько раз в год набираем студентов Физтеха, Вышки, Бауманки, МГУ и других вузов с неплохими техническими программами.
  2. Смежным с работой софт- и хард-скиллам. В Тинькофф развитая система внутренних тренингов — от безопасности веб-приложений до поиска баланса между работой и личной жизнью.
  3. Писать статьи на «Хабр» и «Медиум», выступать с докладами на митапах и конференциях. Наши редакторы, HR и DevRel помогут подобрать тему, собрать материал, подготовиться и опубликоваться или выступить.
  4. Другим навыкам, которых вам будет недоставать для работы. Есть возможность поучиться на курсах или послушать конференции за счет компании.

Как откликнуться

Чтобы обсудить вакансию, пишите на почту или в Телеграм. Лучше начать с короткого рассказа о себе и ссылок на примеры кода.

Сообщество