// engineering

Software that still makes sense to the people who inherit it

Custom enterprise systems, integration work and legacy modernisation — built so that a new engineer can read the structure back to you in your own vocabulary.

Enterprise software rarely fails because it is slow. It fails because the model in the code stopped matching the business two reorganisations ago, and every change since has been a workaround on top of a workaround. By the time anyone says the word "rewrite", the real problem is that nobody can describe what the system does any more.

So we start with the domain rather than the framework: the entities, the states and the rules that people actually argue about in meetings. That model becomes the structure of the code, which is why a new developer can be useful in days instead of months — and why the second year of a system costs less than the first rather than more.

Modular monolith. One deployable, clear internal boundaries. The default until scale or team structure forces otherwise.

Modular monolith — components

  • Web / mobile client
  • HTTP layer
  • Sales module
  • Operations module
  • Billing module
  • Relational store

Modular monolith — connections

  • Web / mobile client connects to HTTP layer
  • HTTP layer connects to Sales module
  • HTTP layer connects to Operations module
  • HTTP layer connects to Billing module
  • Sales module connects to Relational store
  • Operations module connects to Relational store
  • Billing module connects to Relational store

How we approach it

Model the domain out loud

Workshops with the people who do the work, not only with the people who commission it. The output is a written model and a glossary — the two things that turn a specification argument into a five-minute conversation.

Draw the boundaries before writing the code

Where the seams go decides whether this system can be changed in three years. We choose a modular monolith by default and distributed services only where team structure, scaling or failure isolation actually requires it.

Build against a running system

Continuous integration from the first week, deployment to a real environment from the first increment. Software that has never been deployed is not "nearly finished" — it is unmeasured.

Leave the knowledge behind

Architecture decision records explain why, not just what. When somebody asks in 2029 why the billing module is separate, the answer is in the repository rather than in someone’s memory.

Working principles

  • Automated tests are part of the deliverable, not an optional extra line item.
  • The build runs in your CI, not on an engineer’s machine.
  • Every dependency we add has to justify its supply-chain surface.
  • Migrations are reversible, and we practise the rollback before we need it.
  • Code review is bidirectional — your engineers review ours.
  • Intellectual property assignment is written into the contract before work begins.

Outside the scope of this work

  • We do not white-label somebody else’s product and present it as bespoke development.
  • We do not take on a build we cannot staff properly; we will say so rather than accept the work.
  • We do not provide consumer technical support for the software we build — end-user support is your helpdesk’s job, and we train it.
  • We do not sell, resell or redistribute third-party software licences.

// catalogue

The services in this area

Each one lists its deliverables, its typical technology and — deliberately — what it does not cover.

Custom Enterprise Software Engineering

Domain-driven business systems built as maintainable services — web, mobile and back-office — for organisations whose processes do not fit a product off the shelf.

  • TypeScript
  • React
  • Next.js
  • Node.js
  • PHP 8.3
Read the detail

No prices on this page, or on any other

Engineering cost follows scope, and scope follows the reading we do at the start. That is why there is no price list here: a figure published before anyone has read your system would be a guess dressed up as a commitment. The project audit form is the cheapest way to find out whether we are the right supplier at all.