Backend systems & APIs
Services that carry real load: domain modelling, transactional correctness, idempotency, background processing, and API contracts that keep client teams unblocked.
Independent engineer & consultantSelective engagements
I design, build and untangle the software companies run their business on — backends, integrations, data flows and the quiet infrastructure underneath them.
Most of my work begins where the documentation ends: a system nobody fully understands any more, a migration that cannot take a weekend off, or a decision far cheaper to get right the first time.
7 years in production software Backends integrations · cloud NDA friendly
01 — Services
A working list, not a menu. In practice the scope is one paragraph, written together with you before anything is quoted.
Services that carry real load: domain modelling, transactional correctness, idempotency, background processing, and API contracts that keep client teams unblocked.
ERP, CRM, billing and warehouse systems that finally agree with each other. Event-driven pipelines, reconciliation, retries and the observability to prove they work.
Moving workloads without a big-bang cutover: containerisation, infrastructure as code, zero-downtime database changes, cost review, and a deployment process your team can operate afterwards.
Taking over an application whose author left two years ago. Mapping what exists, stabilising the parts that hurt, and repaying technical debt in an order that keeps the business calm.
Independent assessment before an acquisition, an outsourcing contract or a senior hire. Written findings, quantified risk, and a plain-language version for the people signing off.
The work nobody schedules until it is urgent: profiling, query plans, rate limiting, secret handling, backups that restore, and runbooks for the three failures that actually happen.
Getting numbers out of operational systems and into something trustworthy: pipelines, warehouse models, slowly-changing dimensions, and dashboards that match the ledger.
Architecture decisions written down and defended, code review that teaches rather than gates, and a hiring loop that does not waste your engineers' weeks.
02 — Profile
Seven years on software that other people depend on: four of them inside a software house delivering for insurance, logistics and industrial clients, the last three on my own.
The thread through all of it is systems that have to survive their own success — order flows that cannot double-charge, integrations that cannot silently drop a message, migrations that cannot afford a weekend of downtime. I am comfortable being the person who says a plan is not ready yet, and equally comfortable being told no.
“Most of the value is in what does not happen later.”
I work in small, direct engagements — usually one or two clients at a time, with a written scope, a repository I commit to daily and a short weekly note on what moved. If a problem is better solved by someone else — a frontend specialist, a data engineer, an in-house hire — I will say so early rather than bill around it.
Outside of client work I maintain a small open-source toolkit for schema migrations, occasionally write about evolutionary database design, and keep a reading list I rarely finish.
03 — Selected work
Client names are omitted or disguised where the work sits under NDA. Scope and approach are discussed in conversation.
A twenty-year-old order system was running out of headroom during seasonal peaks. Rebuilt the ordering core around an event log, kept the legacy monolith live behind a strangler layer, and moved the first three domains across without a maintenance window.
p95 latency 2.4 s → 180 msClaims were being typed into three systems and reconciled by hand. Designed an event-driven hub with explicit ownership per field, idempotent consumers and a replayable audit trail; delivered the contract layer and reviewed the vendor implementations.
manual reconciliation ≈ 60 h / month removedMoved a containerised product from a single hand-maintained VM to managed infrastructure: Terraform for everything, blue-green deploys, managed Postgres with tested restores, and alerting a two-person team can actually live with.
infrastructure spend −34% · deploys 40 min → 6 minNine-day assessment of a software company for a strategic buyer: architecture, code quality, licence exposure, hosting dependencies and key-person risk. A written report with a short list of findings that changed the deal terms.
three material risks surfaced before signingThree dispatch tools, one fleet. Built a thin orchestration layer that normalises vehicle positions and delivery states across providers, with tolerances, dead-letter queues and a reconciliation report the operations desk trusts.
failed syncs reduced from daily to near zeroA deliberately unambitious set of tools for applying reversible database changes safely in CI: deterministic ordering, drift detection, and a dry-run mode that has saved more than one production evening.
kept intentionally small — no roadmap pressure04 — Voices
A few sentences from the people who signed the invoices and lived with the results.
05 — Approach
No discovery theatre, no forty-slide kick-off. A short call, a written scope, then incremental and reviewable progress.
Most expensive problems are schema problems wearing a costume. The first days go into the domain and its invariants, not the framework.
If it cannot be seen in logs and metrics, it is not finished. Useful dashboards belong to the deliverable, not to a later phase.
Boring, reversible releases. Migrations and rollbacks tested before they are needed, and the pipeline belongs to your team afterwards.
Decisions, constraints and known gaps live next to the code. Handover quality is the part clients tend to mention afterwards.
06 — Stack
Chosen for fit rather than fashion. I am equally at home in a codebase built on none of them.
Go, Python, TypeScript, SQL, a durable amount of Bash; Rust when the problem is genuinely low-level.
PostgreSQL, Redis, ClickHouse, message logs and change data capture; migrations and query-plan-level tuning.
Linux, Docker, Kubernetes where it earns its keep, Terraform, GitHub Actions, AWS & Azure, Cloudflare at the edge.
Domain boundaries, contract tests, trunk-based development, threat modelling, honest post-mortems.
07 — Contact
I answer enquiries that come with context: what the system does, what is going wrong, and roughly when it needs to be solved.
Usually a reply within two working days. Company name and the nature of the request in the subject line — mail without context tends to sit unanswered.