Описание вакансии
О компании и команде
Crypto Story Bank — мультитенантная финтех-платформа в формате white-label super-app + Banking. Под нашей инфраструктурой работают 50+ тенант-доменов: каждый партнёр получает свой банкинг с картами, фиатными операциями и крипто-кошельками без необходимости строить всё с нуля.
Сейчас активно мигрируем монолит на 16 микросервисов на TypeScript/Node.js. Под капотом:
- PostgreSQL (3 ноды + PgBouncer)
- RabbitMQ — для асинхронных событий между сервисами
- Redis — кэш, сессии, distributed locks, rate limiting
- APISIX — API gateway с JWT, MFA-gating, forward-auth
- OpenTelemetry + Prometheus + Loki — observability stack
- Kubernetes в production
Что делаем: выпуск карт через провайдеров, фиатные депозиты/выводы, HD-кошельки для крипты, KYC/AML, расчёты с провайдерами, B2B API для партнёров.
Команда: 4 backend, 1 SRE, 2 frontend. Trunk-based development, обязательный code review, on-call по ротации (с компенсацией). ADR и RFC на ключевые решения — наша культура.
Ожидания от кандидата
Мы ищем middle+ - senior, которому интересна сложная финтех платформа и который не боится глубоких задач. Идеальный кандидат:
Технические скиллы:
- 5+ лет коммерческого опыта backend-разработки, из них 2+ года на Node.js / TypeScript
- TypeScript на уровне strict mode — generics, утилитарные типы, branded types, а не «JS с типами»
- PostgreSQL глубже, чем «JOIN и индексы»: умеешь читать
EXPLAIN ANALYZE, понимаешь блокировки (FOR UPDATE, SKIP LOCKED), знаешь партиционирование, JSONB, generated columns
- gRPC + protobuf, понимаешь когда оно лучше REST и почему
- Опыт работы с event-driven архитектурой (RabbitMQ / Kafka): знаешь зачем нужен Transactional Outbox, Idempotency-Key, что такое at-least-once vs exactly-once
- Понимание шифрования: симметричное (AES) vs асимметричное (RSA, ECDSA), хеширование (Argon2id, SHA-256), HMAC, JWT (JWS/JWE), управление ключами через KMS
- Распределённые системы: CAP, eventual consistency, sagas, circuit breaker, retries с exponential backoff
Архитектурные паттерны (мы их активно используем):
- Двухфазный паттерн Reserve / Commit / Release для финансовых операций
- State machine для долгоиграющих workflow (выпуск карт, выводы)
- Postgres-based orchestration через
SELECT ... FOR UPDATE SKIP LOCKED
- Multi-tenancy с tenant_id везде
- SOLID, DDD (Aggregate, Entity, Value Object), CQRS
Будет плюсом:
- Опыт в финтехе / банкинге / платёжных системах
- Интеграции с картовыми провайдерами / API off-ramp провайдерами
- Опыт с блокчейн-интеграциями (TRON, Ethereum)
- Знание Go или Rust для performance-critical компонентов
- AML / KYC compliance background
- Менторинг middle-разработчиков
Soft skills:
- Пишешь внятные ADR и RFC, не боишься длинных async-обсуждений
- Можешь сказать «нет», переоценить scope, оспорить решение
- Внимание к деталям — в финтехе «почти правильно» = неправильно
- Прагматизм vs перфекционизм — балансируешь между «сделать правильно» и «доставить вовремя»
Условия работы
- Полная удалёнка
- Гибкое начало дня (9:00–12:00 МСК), асинхронная коммуникация в приоритете
- Прозрачная зарплата с индексацией каждые 6 месяцев
- Бюджет на железо (раз в 3 года) и обучение (50 000 ₽ / год)
- Подписки на JetBrains, GitHub Copilot, Cursor, профильные книги — за счёт компании
Бонусы
- Опционы (ESOP) после испытательного срока — мы растущая компания, доля имеет ценность
- Квартальные премии по результатам команды и личным OKR
- Оплата конференций (билеты + проживание) — если едешь как спикер или активный участник
- Внутренние tech-talks с приглашёнными экспертами раз в 2 месяца
- Compensation on-call по ротации (отдельным бюджетом)
- Well-being budget — спорт, психотерапия, массаж
Дополнительные инструкции
Процесс собеседования (1–2 недели максимум):
- HR screening — в чате
- Техническое интервью с тимлидом — 90-120 мин (живой код + system design на whiteboard)
- Финал с CTO — 20 мин (опыт, культура, ожидания)
- Оффер → 1 неделя на размышление
Тестового задания нет — заменяем его живым кодингом. Считаем это уважением ко времени кандидата.
Перед откликом: пройдись по стеку выше. Если 80% твоего опыта попадает — откликайся, разберёмся. Если меньше половины — мы оба сэкономим время, если ты дождёшься более подходящей роли (а мы охотно поговорим, когда дозреешь).