Systems that stay fast under real traffic, and designing for what happens when they break. Most of what I built at an in-game advertising exchange sat on the live bid path, so every component needed a deliberate failure direction: bid dedup fails open so a Redis outage never blocks revenue, frequency capping fails closed on reads so a blip protects users from over-exposure. Being able to say which way a thing should fail, and why, is the part I'm best at.
Owning things end to end. Schema, implementation, infrastructure, observability, and the production debugging afterwards. I'm comfortable reaching across IAM, ETL and Terraform to unblock myself rather than waiting on someone.
Calm debugging. I chased down a false-positive incident in the dedup system to a timed-out-but-executed Redis write being retried and re-reading its own key.
Available immediately, full work rights, no sponsorship needed now or later. Open to contract as well as permanent.
I came to software from architecture. I practised as an architect in Russia, moved to Melbourne in 2020, and retrained through a Master of Data Science. I also run a Twitch chat analytics tool with real users that I built and operate end to end.
I built our partner-facing reporting API alone, from an empty repo to production. Go on Fargate, serving aggregated impression and revenue data to the ad exchange's supply and demand partners, with role-based gating so neither side can ever see the other's numbers.
The decision I'm proudest of: I started on Athena with a SQL builder, then swapped the whole data layer to S3 Select over hourly Parquet mid-build. No managed query engine, predictable per-object cost, and the partner filter pushed down into S3 so it physically never returns another partner's rows. The trade-off was that my service now owns the fan-out and aggregation, which meant a two-stage concurrent read across up to 2,400 partitions.
I also wrote the Glue/PySpark job that produces the Parquet the API reads, so I owned both halves of the pipeline. While doing that I found and fixed a partition-vs-event-time bug that had been silently undercounting events at hour boundaries.
Backend Engineer
In-game advertising exchange • Aug 2023 - Jul 2026
Real-time ad exchange in Go, thousands of requests per second. One of three engineers with merge-to-production autonomy. Built multi-window frequency capping (Redis-backed, fail-closed on the read path, fail-open on writes), two-tier bid deduplication (in-process cache backed by a Redis cluster, feature-flagged per partner), and app bundle blocking end to end from MySQL schema through a sync Lambda to O(1) Redis enforcement on the bid path. Sole author of the partner reporting API, empty repo to production: Go/Fiber on Fargate, concurrent S3 Select over hourly Parquet, role-based column gating so supply and demand partners can never see each other's numbers. Also wrote the Glue/PySpark pipeline that produces the data it reads, so I owned both halves. Owned the campaign reporting engine (dynamic Athena SQL, 30+ metrics and dimensions) and its GraphQL contract.
Platform Engineer
AI and data consultancy • Mar - Jun 2023
Terraform IaC across GCP and AWS, private modules in HCL and Go, Cloud Functions schedulers with Pub/Sub processing.
Associate Software Engineer
Payments technology company • May 2022 - Feb 2023
Go and Python Lambdas, Glue ETL, Step Functions, CloudFormation, event-driven S3/SNS/SQS pipelines, CloudWatch dashboards.
Software Engineer (internship)
Technology company • Jan - Apr 2022
Databricks ETL on AWS, PySpark analysis.