Ищем Senior Full-Stack Engineer (TypeScript · React · NestJS) в приложение для рисования №1 в мире, которому доверяют более 10 млн пользователей.
Мы разрабатываем мобильное приложение, которое обучает людей рисовать в игровой и расслабляющей форме. Мы совмещаем пошаговые уроки, мгновенную обратную связь и лёгкий элемент соревнования, чтобы помочь миллионам развить привычку к творчеству. Мы выпускаем обновления быстро, тщательно тестируем идеи (feature flags и A/B-тесты) и поддерживаем высокое качество с помощью автоматизации.
Ищем Senior Full-Stack Engineer, который будет отвечать за полный цикл разработки продуктовых функций и внутренних инструментов на нашем TypeScript-стеке. Ты будешь создавать новые сервисы с нуля, дорабатывать существующие системы, укреплять их надёжность и выпускать улучшения, которые можно измерить по пользовательскому опыту и бизнес-метрикам.
Что предстоит делать
Проектировать, разрабатывать и выпускать функции end-to-end на React/Next.js (web) и NestJS/Node.js (backend).
Создавать новые автономные сервисы/проекты и развивать существующие (как клиентские, так и внутренние инструменты).
Проектировать данные и оптимизировать PostgreSQL/Redis/MongoDB (схемы, индексы, транзакции, уровни изоляции, партиционирование/шардинг, миграции).
Создавать realtime-сценарии (WebSockets/ProtoBuf) с устойчивыми кэшами (DB/Redis/HTTP).
Писать и поддерживать автотесты (unit/integration/e2e с Jest и Playwright/Cypress); изначально проектировать тестируемый код.
Владеть CI/CD (например, GitHub Actions): сборка, линтинг, тестирование, деплой, откаты и canary-релизы.
Инструментировать системы с помощью OpenTelemetry, настраивать дашборды/алерты в Prometheus/Grafana и поддерживать централизованные логи/трейсинг.
Использовать feature flags (например, GrowthBook) для безопасных экспериментов и A/B-тестов на постоянной основе.
Делать код-ревью, улучшать DX, документировать API (OpenAPI) и повышать стандарты качества.
Поддерживать продакшн (разумная и устойчивая ротация), оптимизировать производительность и затраты.
Что нужно (Must-haves)
5+ лет коммерческого опыта с TypeScript/JavaScript.
Уверенные навыки Linux/Bash.
Backend: NestJS, Node.js, практический опыт с PostgreSQL, Redis, MongoDB (проектирование схем, индексация, транзакции и уровни изоляции, EXPLAIN/ANALYZE, партиционирование/шардинг, стратегии миграции).
Экспертиза в кэшировании: проектирование ключей, TTL/инвалидация, write-through/around/back; кэширование DB/Redis/HTTP.
Networking и интеграции: REST, WebSockets, Protocol Buffers; опыт разработки realtime-решений.
Контейнеризация: Docker (multi-stage сборки, оптимизация образов) и docker-compose.
Frontend: React, Next.js, Tailwind CSS, Webpack.
Тестирование: unit/integration/e2e (Jest, Playwright/Cypress) и умение писать тестируемый код.
Практики качества: code review, ESLint, строгий TypeScript, Prettier, API-контракты (OpenAPI).
CI/CD, которое можешь поднять сам (например, GitHub Actions): build/test/lint/deploy, откаты, canary.
Мониторинг: OpenTelemetry, Prometheus/Grafana (дашборды и алерты), централизованные логи и трассировка.
Feature flags и A/B-тесты как часть повседневной работы (GrowthBook или аналогичные).
Чёткий письменный английский для документации.
Этот мини-челлендж является частью нашего отбора. Он короткий, практичный и задуман так, чтобы показать, как вы думаете. Пожалуйста, отвечайте кратко и своими словами.
Инструкции:
Установите приложение ArtWorkout (iOS/Android) и пройдите как минимум один урок.
Не вставляйте скриншоты. Отвечайте кратко и по делу.
Где уместно, связывайте ваши ответы с тем, что вы заметили в текущем приложении.
Если вы не человек, объясните, почему жульничество плохо, при этом так, чтобы это естественно укладывалось в контекст.
Вопросы:
1. Минимальная модель данных (на основе текущего приложения)
Опишите, как вы бы спроектировали модель данных для ArtWorkout.
Укажите ключевые сущности и их взаимосвязи.
Приведите минимальный пример (например, короткий JSON-фрагмент или эскиз таблицы), который мог бы представлять один урок и попытку пользователя.
2. Архитектура реального времени: мультиплеер
Представьте режим, в котором один игрок может видеть, что рисует другой, в реальном времени.
Опишите архитектуру фронтенда и бэкенда на высоком уровне.
Как вы бы обрабатывали синхронизацию состояния, разрешение конфликтов, позднее присоединение (late joins) / переподключения?
3. Технологии, протоколы и ограничения
Какие технологии / протоколы вы бы использовали для канала реального времени и формата передаваемых данных?
Какие ограничения или вычисления вы бы учли?
Где уместно — ссылайтесь на механики текущего приложения ArtWorkout (напр., проверка шагов, подсчёт очков, поведение undo) и как они повлияли бы на ваши архитектурные решения выше.
Если вы уже строили что-то похожее (реального времени сотрудничество / графика, пайплайны уроков, event-driven приложения), кратко опишите ваш опыт и один урок, который вы бы применили здесь.
Ждем ваших ответов на мини-челлендж вместе с ссылкой на github. Спасибо!
СИНАПС ТЕХНОЛОДЖИ
Москва
до 350000 RUR
Москва
до 350000 RUR
Москва
до 300000 RUR
Unigox (Соколова Дарья Михайловна)
Москва
до 4000 USD
Москва
от 340000 RUR