
Mobile banking backend · 2021
Rebuilt the account ledger and sync API behind an Istanbul payments app.
Balance updates under 1 s · 1.2M accounts migrated · 0 lost transactions
<!-- Hero section -->
I design the services, queues and deploy pipelines behind products people use every day, then keep them running at 3 a.m. so nobody else has to.
<!-- Featured work -->

Mobile banking backend · 2021
Rebuilt the account ledger and sync API behind an Istanbul payments app.
Balance updates under 1 s · 1.2M accounts migrated · 0 lost transactions

Internal developer platform · 2023
A preview environment for every pull request at Havenlijn, plus a deploy path anyone can read.
Deploys 40 min → 6 min · Staging queue gone · First deploy in week one
POST /v2/berths/RTM-07/holds
{
"vessel": "9241378",
"window": ["06:00", "14:00"],
"expires_in": 900
}
201 Created · hold confirmed in 15 minPublic API · 2024
The API shipping agents use to book quay time at Havenlijn's terminals.
99.98% uptime over two years · 41 integrators · No double bookings since launch
~/svc $ cargo add sluice
Adding sluice v1.4.2
~/svc $ cargo bench check
check/allow 38.1 ns ±0.4
check/deny 37.6 ns ±0.3
~/svc $ Open-source Rust library · 2022
A small rate limiter for Rust services; one dependency, no background threads.
2.1k GitHub stars · 38 ns per check · Maasstad Open Source Prize 2024
Performance audit · 2025
Two-week search audit for an independent bookshop's online store.
p95 380 ms → 45 ms · Typo searches find results · Two-week fixed price
31 → 4
pages per week
Alerting rewrite · 2023
Cut Havenlijn's weekly pages from 31 to 4 by alerting on symptoms users feel.
31 → 4 pages a week · 140 rules → 12 · Runbook on every alert
Twelve years of it, with dates and numbers, fits on two pages.
Read the CV<!-- About me -->
I'm a backend engineer who cares about the boring parts: migrations, retries, alerts and the documentation nobody asked for. Those are the parts that decide whether a product still works on its worst day.
Right now I'm a staff engineer at Havenlijn, where our software schedules trucks and ships through the port of Rotterdam. Before that I spent four years on payments in Istanbul. I review code like I'd want mine reviewed: short, specific, with a link.
Download CV<!-- Previous builds -->
<!-- What I do -->
<!-- My tech stack -->
<!-- Recognition -->
<!-- Colleagues' word -->
Elias rewrote our deploy pipeline in six weeks, then spent two more teaching us how it works. We still use his runbook.
Marieke de Vos, VP Engineering, Havenlijn
He asked for the failure cases before the happy path. That is why the migration went quietly.
Deniz Arslan, CTO, Lodos Pay
The best code reviews I've had. Short, specific, and always one link to read.
Joost Hendriks, Software Engineer, Havenlijn
We booked him for a two-week audit. He found the slow query on day one and spent the rest making sure it stayed fast.
Anne Linde, Owner, Boekhuis Linde
When the queue backed up at 3 a.m., his messages in the channel were the reason nobody panicked.
Selin Kaya, SRE Lead, Lodos Pay
<!-- Notes -->
New notes once a month, by email.
Get notes by email<!-- Get in touch -->
Contract work from January, or a full-time platform role. Tell me what's breaking.
Mobile banking backend · 2021
Lodos Pay's app showed balances that could lag a full minute behind a card payment. I replaced the nightly-reconciled balance table with an append-only ledger in Postgres and a sync API the app polls with a cursor.
We moved 1.2 million accounts over six weeks with dual writes and a daily diff report. The diff hit zero on day nine and stayed there.
Internal developer platform · 2023
Havenlijn's 60 engineers shared two staging servers and a deploy script only three people understood. Dockyard gives every pull request its own short-lived environment on Kubernetes, seeded with anonymised data.
The deploy itself is now one pipeline file per service, reviewed like code. New starters ship to production in their first week.
Public API · 2024
Agents used to book berth slots by email and spreadsheet. I designed a small REST API around one idea: a booking is a hold that expires unless confirmed, so two agents can never win the same slot.
It runs on two Go services and one Postgres cluster, with documentation written for the agents' developers, not for us.
Open-source Rust library · 2022
sluice started as a weekend fix for a noisy API client and became the rate limiter several logistics companies run in production. It uses a token bucket stored in one atomic integer, so a check costs about 38 nanoseconds.
I maintain it with two co-maintainers. The rule for new features: it must fit in the README's first screen.
Performance audit · 2025
Boekhuis Linde's search timed out on busy Saturdays and found nothing for 'Murakmi'. The slow part was one query scanning 300,000 titles. A trigram index and a rewritten ranking query fixed both problems.
I left them a dashboard with the one number to watch and a page explaining what to do when it turns red.
Alerting rewrite · 2023
Most of our pages fired on CPU and disk thresholds that never touched a customer. We deleted 140 alert rules and replaced them with twelve, each tied to something an agent or driver would notice.
Every remaining alert links to a runbook. If a page has no runbook, it does not ship.
Sep 30, 2026
Dual writes sound scary until you add the one thing that makes them safe: a daily report that diffs the old store against the new one and names every account that disagrees.
We read that report every morning for six weeks. When it said zero for a week straight, we switched reads over on a Tuesday afternoon. Nobody noticed, which was the point.
Aug 12, 2026
Our preview environments cost about €900 a month in compute. The staging queue they replaced cost us a weekly coordination meeting, a chat channel full of people asking who had staging, and bugs found on Friday.
Short-lived environments work if they die on their own. Ours delete themselves two hours after the pull request closes. No exceptions, no pets.