Bahman Shadmehr Available — Get in touch

Backend engineer · Python, Go, Kubernetes · Remote, UTC+3

Bahman
Shadmehr

Eight years building the systems that keep running when nobody is watching them. Payments, energy markets, equities, retail, logistics.

01

What you can hand me

Every engagement below has ended with something the client can run without me. That is the actual deliverable; the code is how it gets there.

Backend and API systems

The services your product runs on — designed for the load you actually have, tested on the paths that would cost money, and documented well enough that the next person doesn't need me.

DjangoFastAPIFlaskSanicTornadoGolang

Cloud, containers and CI/CD

Get off manual deploys. Containers so every environment runs the same thing, Kubernetes manifests so the cluster state is written down, a pipeline so releasing stops being an event.

DockerKubernetesGitHub ActionsGitLab CITerraformNginx

Pipelines that act on data

Scheduled work that collects, evaluates and then does something — including placing real orders in real markets. Built with a simulation stage in front and alerting behind, because both ends matter.

GCP BatchAWS LambdaStep FunctionsAthenaCeleryRabbitMQ

Breaking up a monolith

For a system that has outgrown its shape. I find the seams the business already has, split along them in stages, and keep the thing serving traffic the entire way — the job I led on a live payment gateway.

Architecture reviewStaged migrationLoad testingObservability

A one-week architecture review

One week reading your system and telling you the truth about it: a written report, the risks in priority order, rough cost against each, and a call to walk it through. The cheapest way to find out whether you need any of the four above.

Fixed feeNo commitment after

Available as Project contract · Fractional / part-time · Full-time, remote · Fixed-fee review

02

Six decisions I keep making

A CV tells you where someone has been. These are the calls I make once I get there — the closest thing to a preview of working together.

01

Split a system along the business, not along the files

Most monoliths get broken up along whatever boundary is easiest to see in the repository, which is why the resulting services still have to be deployed together. The seams worth cutting are the ones the business already has — the places where two parts of the company would describe the same word differently.

Zibal Led the decomposition of a live payment gateway into microservices, 2020–21

02

Containerise before you optimise

Environments that differ are a whole category of bug you can simply decline to have, and they're the category that eats the most time to diagnose because the evidence is never in the code. Docker first, then everything else — it makes every later measurement trustworthy.

Zibal, Pyango, Vgang Dockerised each platform ahead of the performance and scaling work

03

Measure the bottleneck before you argue about it

Every team has a theory about what's slow, and the theory is usually about the part that was hardest to write rather than the part that's actually hot. Load testing settles it in an afternoon and saves a fortnight of confident optimisation in the wrong place.

Brain Shuttle Locust load tests to find and clear real bottlenecks, 2023–24

04

If the work has a clock, run it as a job, not a server

Plenty of systems that behave like scheduled work get built as always-on services, then spend most of their life idling and most of their incidents on the state they accumulated while idling. Batch jobs start clean, finish, and either succeeded or didn't.

Energy trading platform Trading pipeline as GCP container batch jobs, orchestrated from GitHub Actions, 2024–25

05

Async where the connections are long, sync where they're short

Async is a tool for a specific shape of problem — many connections, mostly waiting — and a tax everywhere else, paid in debugging. Real-time tracking earns it. A form submission does not.

Rahpa Tornado backends for live location tracking, alongside conventional Django elsewhere, 2017–20

06

Alert on anomalies, not on activity

A job that finished slowly is not a job that failed, and a system that pages you for both will eventually be a system nobody reads the pages from. The useful question is whether this run looks like the runs that worked — which means you have to have been keeping the metrics all along.

Equities & energy platforms Health metrics aggregated across each pipeline, with anomaly alerting on daily runs

03

Where it's been proven

Eight years, five companies, two clients under NDA and named by sector.

2024 — 2025 Automated energy trading, ERCOT Data collection, order placement and monitoring services for the Texas wholesale power market. Pipeline on GCP batch jobs; health metrics and alerting across every stage. NDA · Energy
2023 — 2024 US equities trading platform Maintained the AWS services on the trading path through market hours, and built the monitoring and anomaly alerting around the daily jobs. NDA · Fintech
2023 — 2024 Educational game backends Flask services with MongoDB for game state and progress; led delivery of several games. Load-tested with Locust and tuned on the findings. Brain Shuttle
2022 — 2023 Retail platform across Shopify & Instagram Built and ran the Kubernetes cluster, automated releases with GitLab CI/CD, and wrote the integration microservices in Python and Go. Vgang
2021 — 2022 Hosted e-commerce store builder Django backend with Vue and Angular front ends. Dockerised the platform, built the GitLab CI/CD pipelines, ran ELK and MongoDB behind it. Pyango
2020 — 2021 Payment gateway modernisation Drove the monolith-to-microservices migration on a live gateway. Dockerised the application, authored the Kubernetes manifests, added Prometheus and Grafana. Zibal
2018 — 2020 Crawling pipeline & monitoring dashboard Selenium-based data collection at scale, plus a real-time ping checker dashboard in Django for continuous performance monitoring. NDA
2017 — 2020 Three location-based products Async Tornado backends for logistics and family safety, Angular dashboards, Kotlin and Flutter apps, with Docker, Kubernetes, Prometheus and Grafana underneath. Rahpa

Built for myself, mostly to learn the hard part properly: NeetCoders (Docker-sandboxed code execution behind RabbitMQ), CoffeeChat (etcd leader election and real-time routing), SmartTrader (a four-stage Forex pipeline on AWS), and a file-based ORM exploring Python metaprogramming.

The best time to bring me in is before it breaks.

04

Who I am off the page

I started with Python and JavaScript, drifted into Go and infrastructure, and ended up spending most of my career on the unglamorous half of software — the part that has to still be running tomorrow.

That shapes the order I do things in. I want the failure modes before the feature list. I put metrics in at the start rather than after the first incident, because a system you can't observe is a system you're guessing about. And I write tests for the paths that would cost real money if they broke, which is a shorter list than everything and a much longer one than nothing.

I've been the only backend engineer on NDA trading systems and one of several on product teams, so I'm equally comfortable owning a domain end to end or joining an existing codebase and respecting its conventions instead of rewriting them on arrival.

For a few years I've also taught Python, Go and JavaScript to beginners at Master Your Courses — mostly teenagers and career switchers. It remains the fastest way I know to find out whether I actually understand something, and it's why I write everything up as I learn it.

Recent writing — 76 posts on DEV

Exploring relational databases: concepts and applicationsDatabase · SQL · Postgres ↗ Understanding correlation in financePython · Data science ↗ A dive into fundamental financial statementsFinance ↗ Everything elsedev.to/bshadmehr ↗

At a glance

BasedTürkiye · UTC+3
Work modeRemote
Experience8+ years in production
LanguagesEnglish · Persian
StatusTaking on work
05

Tell me what's breaking, or what doesn't exist yet

info@bshadmehr.me

Useful things to put in a first message

  1. What you're building, in a sentence.
  2. Where it's stuck, or what doesn't exist yet.
  3. The stack, if there already is one.
  4. Timeline, and whether this is a contract or a role.