Beyond migrations

Migrations are how most people meet us.

They are not all we do. The same work that makes a migration go cleanly — knowing what breaks, and where — is what the rest of this list has in common.

What we do

Four things, and they are all the same thing.

01

Rescuing legacy

Taking a partly broken platform and getting it back to a state where people can work on it again. React 16 to 18 with the JSX conversion that implies. Webpack 1 to 5, or off Webpack entirely. Laravel brought up to a supported version. MySQL upgraded with the data moved across. Redis added where a page was waiting on the database for no good reason.

02

Owning the infrastructure

Not advising on it — holding the keys. On our longest-running engagement the client handed over their cloud and DevOps tenants outright: services across Kubernetes environments from dev to production, delivery pipelines, certificate management and ingress. Deploys and uptime are ours to answer for. It is the part of the job where nobody notices you unless something is wrong.

03

Putting AI into production

Not demos. Orchestrated multi-step agents with LangGraph, OpenAI pipelines that have to behave the same way twice, ONNX models running inference in-house, and streamed chat that refuses to answer when its own confidence is too low. The difference between a prototype and a service is almost entirely in that last clause.

04

Working as part of your team

Decomposing work into pieces other developers can pick up, running the planning, reviewing what comes back. Useful when you have budget for hands but not for someone to decide what the hands should do.

One engagement, measured

Numbers from the platform we have run the longest.

Taken from time-tracking exports rather than memory. It is one client, so treat it as a sample of how we work rather than a company total.

1,073hours delivered between September 2025 and June 2026
21months on the same platform, continuously
4engineers coordinated at peak, on our side
260hours on the React 18 migration alone

How engagements usually work

Fixed scope, fixed price. Best when the job has edges — a migration, an upgrade, standing up an environment. You get a written plan with what is included, what is not, and how we will both know it is finished.

Ongoing, by the month. Best when the work is “keep this running and keep improving it”. Suited to infrastructure and to platforms with real users, where the value is in somebody being responsible rather than in any one ticket.

As a subcontractor. If you are an agency, we work behind you and never contact your client —the terms are here.

What we will not take on

Who does the work

Two people, both senior. No bench, no juniors.

Every engagement has one engineer who owns it end to end and a second who reviews before anything is handed over. Between us that is seventeen years of production experience, and nobody is learning on your project.

Alexandr Dudnic
Node.js & TypeScript · technical lead

Seven years in production systems. Owns scoping, decomposition, review and the client relationship, plus the Kubernetes, CI/CD and AI work. Currently technical lead on a SaaS platform in Canada.

Evgeniy Bogoyavlenskiy
Senior fullstack · backend & architecture

Ten years of commercial experience. PHP and Node.js on the backend, React on the front, with the parts most people skip: message queues, Postgres design and query optimisation, caching, background jobs, Docker. Does the migrations end to end.

Get a quote

Tell us what is broken

Or what needs building, upgrading or taking over. You get a straight assessment of whether we are the right people for it — including when we are not — usually within one business day.

No newsletter, no automated sequence. Your details are used to answer you and nothing else.