Ilya Tomin.

Python Backend Engineer

I build backend services in Python and improve systems already in production. I investigate performance bottlenecks and simplify architecture so teams can make changes more easily.

Work experience

MAR 2024 — AUG 2026

Python Backend Engineer

HR technology platformWorked on service architecture, delivered a Kafka-based staff activity log and made CI feedback faster.

Achievements

  • Defined service boundaries and RabbitMQ contracts for HRTech backend decomposition and reviewed two developers’ implementation. After combined architecture and runtime changes, peak successful HTTP RPS grew from ~1,500 to ~8,000.
  • Built a production staff activity audit log using Kafka and transactional Outbox, with asynchronous storage in a separate PostgreSQL database, UUIDv7 deduplication, a diagnostic DLQ and role-aware access.
  • Set up pytest-xdist parallel runs for about 2,000 CI tests, bringing runtime from 20 to 1.5 minutes.
  • Extracted Django Views/ViewSets business logic into ORM-independent Python Use Cases; the estimated number of module dependencies fell from ~321 to ~201 (about 37%). Consolidated user retrieval and permission checks repeated in ~13 places and enabled unit tests without Django or a database.
  • Investigated a PostgreSQL candidate-list query after bulk UPSERT with EXPLAIN ANALYZE. Repeated production measurements showed SQL Execution Time falling from ~17 s to ~100 ms and a switch from Seq Scan to an existing Index Scan after autovacuum thresholds were adjusted.
PythonPostgreSQLKafkaRabbitMQ
Read the scaling case
SEP 2021 — FEB 2024

Backend Developer & ML Engineer

Language technology platformWorked on exam variant management and access rules; a ruBERT genre classifier reached F1 0.83 on the validation set.

Achievements

  • Fine-tuned a ruBERT model for text classification with an F1 score of 0.83 on the validation set.
  • Built an NLP terminology extractor for educational texts using spaCy NER and reference dictionaries. On comparable texts, automated extraction took ~5 seconds versus ~20 minutes of manual search and checking; linguists validated the automated results separately.
  • Developed a Chromium-based Windows application in Visual Studio that restricted browsing to the examination platform, helping avoid a third-party proctoring system purchase of approximately RUB 500,000.
  • Helped introduce GitFlow and parallel development for a three-developer team. Completing comparable work took ~2.5 instead of ~5 working days (about 2× faster).
PythonNLPruBERT

Case studies

API scaling, a Kafka activity log, faster CI and business logic that can be tested without Django or a database.

Scaling an API to ~8,000 successful RPS.

Designed service boundaries and RabbitMQ contracts for a busy HR backend; the team separated bot and background workloads.

My contributionDefined service boundaries and RabbitMQ contracts; reviewed two developers’ work.

architecture / performance

PythonRabbitMQGranianOutbox
~5.3×successful peak HTTP RPS
Technical overview

We moved the Telegram bot and background jobs into separate services, introduced RabbitMQ interactions and an Outbox flow for notifications. In parallel, the team increased Granian Python workers from one to four and raised CPU/RAM limits without adding Kubernetes pods.

Read full case

Kafka: a staff activity audit log.

Built a shared history of staff actions on an HR platform: candidate status changes, document uploads, report exports and approvals.

My contributionImplemented the Kafka event pipeline, a separate history database and role-aware access.

event-driven systems / audit

KafkaTransactional OutboxPostgreSQLDLQ
Kafkastaff activity history in production
Technical overview

Changes to business data and the corresponding Outbox event were committed in one transaction; report exports created a separate audit event. A polling publisher sent events to Kafka using employee_id as the message key. A dedicated consumer wrote events to a separate PostgreSQL database, with unique UUIDv7 event IDs to avoid duplicate inserts and offset commits after saving. Document-upload events contained IDs, links and metadata rather than passport files. Failed events went to a diagnostic Kafka dead-letter topic without automatic replay.

Read full case

2,000 tests: CI from 20 to 1.5 minutes.

Set up pytest-xdist to run a large suite in parallel and gave every worker its own test tables.

My contributionImplemented pytest-xdist execution with dedicated test tables per worker.

delivery / testing

Pythonpytestpytest-xdistPostgreSQL
~13×shorter CI test runtime
Technical overview

With pytest-xdist, tests ran across workers. For PostgreSQL data isolation, pytest fixtures used worker_id to create worker-specific ORM table mappings/metadata. Each worker used separate test tables, not a separate database or schema.

Read full case

From Django Views to testable Python Use Cases.

Moved HR business rules out of Django Views/ViewSets into ORM-independent Use Cases that can be unit-tested without starting Django or a database.

My contributionSeparated application logic from Django and consolidated repeated user and permission checks.

architecture / testability

PythonDjangoClean ArchitectureUnit Testing
Use Casesbusiness rules tested without Django or a database
Technical overview

Django continued to handle HTTP entry points while the business logic moved into independent Use Cases. The unit tests supplied mocked repositories instead of relying on Django initialization or real database access. One concrete refactoring target was user lookup and permission validation repeated across approximately 13 call sites.

Read full case

Technical stack

My main tools include Python, FastAPI, PostgreSQL, Kafka and RabbitMQ, alongside CI tooling and Keycloak.

Backend & APIs

Python, FastAPI, Django, aiohttp, Pydantic, REST, WebSocket

Data & messaging

PostgreSQL, SQLAlchemy, Redis, Kafka, RabbitMQ, PgBouncer, Outbox pattern

Infrastructure & delivery

Docker, Linux, Nginx, GitLab CI, GitHub Actions, pytest, pytest-xdist

Security & architecture

Keycloak, OAuth2 / OIDC, RBAC, S3, Clean Architecture, DDD, Unit of Work