Middle backend engineer at OBRIO · 4th-year Software Engineering student at KPI FICE · Kyiv, Ukraine
I work on the microservice backend of a consumer product with 70M+ users: TypeScript and NestJS mostly, some PHP and Python, everything talking over RabbitMQ and running on Kubernetes. Over the last year and a half I've worked across 40 services, owned epics end to end, and taken backend on-call shifts.
The code is private, so here's what it was about.
- AI merge-request reviewer. On my own initiative, I turned our in-house Slack AI assistant into a reviewer for merge requests. Unlike the off-the-shelf review tool we already used, it has context across the whole system and its integrations, so it reviews a change against everything that change touches. It is also much cheaper. It runs on a deterministic retrieval step plus a single model call, and now reviews MRs for the backend, frontend and mobile teams.
- GDPR data deletion. Event-driven hard delete across 10+ services and third-party providers, including backfilling users who were deleted before it existed.
- Data contracts. Contracts between backend and data engineering, loaded at runtime and validated without blocking the event flow, with alerts routed to owners.
- Attribution pipeline. Tech owner of an event-tracking and marketing-attribution pipeline handling ~350k events/day, from requirements and capacity planning to k6 load tests and production verification.
- Breaking up the monolithic BFFs. I started by helping move the funnels' backend out of a monolithic BFF into microservices. Then I worked on splitting up the SPA's BFF, where I built a new stateless service along the way. Now I lead that decommissioning: mapping the coupling first, then moving routes and events out consumer by consumer, without downtime.
- Split-testing service. Built from scratch. It merges anonymous and logged-in assignments and stays race-safe through atomic upserts and partial unique indexes.
- Search. I was the first on the team to bring in OpenSearch. I delivered full-text search, async indexing over RabbitMQ, and index migrations with zero-downtime reindexing through aliases.
- Platform work. A shared RabbitMQ topology module adopted by 8+ services, a NestJS 11 / Express 5 / Node upgrade, a CVE-patching policy, log and trace masking, and Grafana dashboards as code.
Production investigations I enjoyed
- Pods killed under CPU limits, traced back to synchronous code blocking the event loop.
- A file-descriptor leak in a native library that left one open handle per worker thread.
- Redis OOM kills caused by a bulk operation rewriting the same 16 MiB key dozens of times.
- A quarter of a service's logs silently dropped by an Elasticsearch dynamic-mapping conflict.
- Webhook delays of 30–60 minutes that turned out to be CDN-level traffic re-steering, after ruling out four other hypotheses.




