Привет!
Мы строим социальную платформу в формате цифровых пространств осознанного потребления контента с поддержкой креативной экономики. В своей сути, платформа с UGC-контентом и активным социальным взаимодействием. В дальнейшем планируем продукт развивать до полноценного супераппа: в дорожной карте дейтинг, еком, трэвел, и другие продукты. По формату, у нас стартап на частных инвестициях.
Мы строим продукт, в который верим, и ищем в нашу команду единомышленников.
1. Задачи:
- Разрабатывать и поддерживать backend-сервисы на Go и Python.
- Проектировать API, модели данных и взаимодействие между сервисами.
- Развивать функциональность социальной сети, мессенджера, платформы звонков, а также другие продуктовые сервисы.
- Участвовать в архитектурных обсуждениях и документировать технические решения.
- Оптимизировать производительность приложений, баз данных и сетевого взаимодействия.
- Проводить code review и поддерживать стандарты качества кода.
- Разрабатывать unit-, integration- и нагрузочные тесты.
- Анализировать технические риски и декомпозировать продуктовые требования.
- Участвовать в дежурствах, расследовании инцидентов и подготовке post-mortem.
- Помогать в развитии менее опытных инженеров.
2. Обязательные требования
- Опыт коммерческой backend-разработки от 4 лет.
- Уверенное владение Go и опыт его применения в production.
- Практический опыт разработки и поддержки сервисов на Python.
- Глубокое понимание конкурентности, многопоточности и асинхронного программирования.
- Знание алгоритмов, структур данных и принципов объектного и компонентного проектирования.
- Опыт разработки высоконагруженных распределенных систем.
- Понимание микросервисной и событийно-ориентированной архитектуры.
- Опыт работы с REST, gRPC и WebSocket.
- Уверенное владение PostgreSQL:
- проектирование схем и индексов;
- транзакции и уровни изоляции;
- блокировки и конкурентный доступ;
- анализ и оптимизация запросов.
- Опыт работы с Redis.
- Опыт использования Kafka, NATS, RabbitMQ или другого брокера сообщений.
- Понимание идемпотентности, порядка обработки событий, гарантий доставки и eventual consistency.
- Опыт контейнеризации приложений с Docker.
- Базовое понимание Kubernetes и CI/CD.
- Навыки профилирования, поиска утечек памяти и диагностики проблем производительности.
- Опыт работы с системами мониторинга, логирования и трассировки: Prometheus, Grafana, OpenTelemetry, ELK/OpenSearch или аналоги.
- Умение самостоятельно доводить задачу от технического проектирования до эксплуатации в production.
Требования к Go
- Уверенное знание goroutines, channels, context и пакета sync.
- Понимание Go memory model, escape analysis и работы garbage collector.
- Умение диагностировать race condition, deadlock и утечки goroutines.
- Опыт профилирования с помощью pprof, trace и benchmark-тестов.
- Навыки проектирования понятных интерфейсов и управления зависимостями.
- Опыт написания unit- и integration-тестов.
Требования к Python
- Уверенное знание Python 3.
- Опыт работы с asyncio и асинхронными фреймворками.
- Понимание GIL, multiprocessing и ограничений разных моделей конкурентности.
- Опыт разработки API на FastAPI, Django, Flask или аналогичном фреймворке.
- Знание typing, dependency management и инструментов тестирования.
- Опыт профилирования и оптимизации Python-приложений.
Не требуется одинаково глубокое владение обоими языками: основной production-стек может быть Go, а Python — использоваться для отдельных сервисов, интеграций и внутренних инструментов.
Специфика мессенджера
Будет необходим опыт или понимание следующих задач:
- доставка сообщений в реальном времени;
- поддержка большого количества постоянных соединений;
- синхронизация истории между устройствами;
- статусы отправки, доставки и прочтения;
- offline-доставка и push-уведомления;
- групповые чаты и управление участниками;
- хранение и доставка вложений;
- сохранение порядка сообщений;
- дедупликация и идемпотентная обработка;
- presence, typing-индикаторы и счетчики непрочитанных сообщений.
Специфика звонков
- Понимание архитектуры аудио- и видеозвонков.
- Базовые знания WebRTC.
- Понимание signaling, ICE, STUN и TURN.
- Представление о RTP/RTCP, кодеках, задержках, джиттере и потерях пакетов.
- Понимание различий между P2P, SFU и MCU.
- Опыт интеграции с LiveKit, Janus, mediasoup, Jitsi или аналогичными решениями будет преимуществом.
- Умение проектировать серверную логику управления звонками и состояниями участников.
Глубокий опыт разработки медиасервера не является обязательным.
Безопасность
- Понимание OAuth 2.0, OpenID Connect, JWT и пользовательских сессий.
- Опыт реализации аутентификации и авторизации.
- Знание основных уязвимостей web-приложений и способов защиты API.
- Понимание rate limiting, защиты от перебора, спама и злоупотреблений.
- Навыки безопасной работы с персональными данными, секретами и пользовательским контентом.
3. Будет преимуществом
- Опыт разработки социальной сети, мессенджера или коммуникационной платформы.
- Опыт эксплуатации сервисов с миллионами пользователей.
- Практический опыт работы с WebRTC.
- Знание ClickHouse, Elasticsearch/OpenSearch, Cassandra или ScyllaDB.
- Опыт разработки лент новостей, поиска, рекомендаций, модерации или антиспам-систем.
- Понимание принципов end-to-end encryption.
- Опыт нагрузочного тестирования и capacity planning.
- Опыт работы с облачными платформами и Infrastructure as Code.
- Участие в миграции монолита на модульную или микросервисную архитектуру.
4. Soft Skills:
- Самостоятельность: способность работать автономно, выполнение поставленных задач без постоянного контроля.
- Креативность: инициатива в предложении улучшений текущих процессов и продуктов.
- Коммуникативные способности: умение обсуждать технические вопросы с коллегами и стейкхолдерами.
- Ответственность: ответственное отношение к качеству выполняемой работы и срокам сдачи задач.
5. Ожидаемый уровень ответственности
Senior-разработчик самостоятельно проектирует и реализует крупные технические задачи, учитывает влияние изменений на другие сервисы, отвечает за качество решения после выхода в production и помогает команде принимать обоснованные инженерные решения.
6. Условия работы:
Режим работы: 5 дней в неделю, понедельник-пятница, с 9.00-18.00, очный формат работы.
Компенсационный пакет: по необходимости оборудование предоставляет работодатель
Испытательный срок: 3 месяца