Workarounds piled on a package you cannot change
Spreadsheets, side databases, and tribal knowledge fill the gaps. The official system is no longer the source of truth.
Services
Eight capabilities, one operating estate.
AI, cloud, software, data, and business systems designed to work together.
All servicesIndustries
Sector constraints, written as they show up.
Operating patterns we plan around in each sector.
All industriesCompany
Built around engineering.
How we think, how we work, and how to start a conversation.

Some processes are the business. When a packaged product forces workarounds, we design and build software that fits the workflow, integrates with what you already run, and can be maintained after the first release.
Overview
Custom software development is designing and building applications for an organisation’s own processes — web applications, internal tools, customer and partner portals, APIs, and the integrations between them — instead of bending a packaged product to fit. It makes sense when the workflow is a source of advantage, or when packaged software forces expensive workarounds.
It also covers application modernization: making an existing, revenue-carrying system safer to change through tests, clearer module boundaries, runtime upgrades, and incremental replacement. When the main question is whether to split a system into independently deployed services, that is our microservices architecture work.
The problem
Spreadsheets, side databases, and tribal knowledge fill the gaps. The official system is no longer the source of truth.
The product still carries revenue, but every change is slow, untested, and concentrated in a few people.
Nightly exports, manual reconciliation, and silent failures between systems that should already agree.
Capabilities
Operational products with clear information architecture, accessible interfaces, and server-rendered performance where it matters.
Stable contracts, auth that matches enterprise identity, and data access that will not collapse under a new client.
Software for the people who run the company: operations, finance, support, and partners — with AI assistance where it removes real effort.
Strangle patterns, module boundaries, and test coverage that make the next change cheaper than the last.
APIs, events, and carefully bounded batch jobs — chosen for the latency and consistency the process actually needs.
Automated tests, observability, and documentation that a future team can use without a forensic exercise.
We prefer explicit modules, boring data stores, and interfaces that can be versioned. Client and server each do the job they are good at. Complexity is added when a measured constraint requires it.
Decision guide
Custom code is a long-term commitment. This is how we frame the decision before anyone writes it.
| Option | Best when | Trade-off |
|---|---|---|
| Buy a packaged or SaaS product | The process is standard for your industry and a product covers most of it. | You adopt the vendor’s model and roadmap; licence cost grows with users. |
| Extend a product | A product covers the core, but specific steps or integrations are missing. | Extensions must survive vendor upgrades and API changes. |
| Build custom software | The workflow differentiates the business, or no product models it cleanly. | You own maintenance, security, and hosting for the life of the system. |
| Modernize what you have | A legacy application still carries the business but is slow or risky to change. | Needs sustained investment beside feature work; there is no big-bang finish line. |
A workflow that several teams share, with permissions, audit, and reporting that a spreadsheet cannot carry.
A controlled surface on top of existing systems of record.
Reduce risk while continuing to ship, instead of a rewrite that pauses the business.
Trade-offs
A full rewrite pauses value while the old system keeps changing underneath it. Incremental replacement — the strangler fig pattern — takes longer to finish but keeps the business running and avoids a single risky cut-over.
The stack should be one your team can recruit for and operate in five years, not the one that demos best this quarter.
A narrow slice through authentication, data, and the hardest integration exposes problems early. A broad first release exposes them late, when they cost more.
Custom software needs an owner, a budget for upkeep, and regular dependency and security updates. We plan the handover from the first week.
Authn/authz designed with the data classification of the domain. Input, output, and dependency hygiene are part of the build.
We load-test the paths that will actually grow, not every page equally.
Names, tests, and module boundaries that a new engineer can follow in a week, not a quarter.
Users, constraints, systems of record, and the cost of being wrong.
Domain model, interface sketch, and a delivery sequence.
Iterative slices with reviewable pull requests.
Tests, accessibility, and operational checks before wider use.
Runbooks, backlog, and pairing so the product is not a black box.
FAQ
Build when the process is a source of advantage, when packaged products would need heavy customization to fit, or when integration needs are unusual. Buy when the process is standard and a product covers most of it. Many good outcomes are hybrids: buy the commodity system and build the differentiating layer around it.
Improving an existing application so it is cheaper and safer to change: adding tests, separating modules, upgrading runtimes and dependencies, moving to managed infrastructure, or replacing parts incrementally. It usually happens alongside feature work rather than as a freeze.
After discovery. We break the work into thin slices, estimate the first ones with the team, and refine the forecast as real delivery data appears. A fixed estimate made before the domain is understood moves risk around rather than removing it.
Cost follows scope and risk: the number of user roles and workflows, the integrations with existing systems, security and compliance needs, data migration, and how long the software must be supported. We estimate after discovery and deliver in slices, so spending can stop or change direction at each release. If the integration is mainly about a CRM, see our CRM solutions service.
No. A large share of useful software work is making an existing system safer to change.
We match the stack your team can hire for and operate. We will not introduce a language for its own sake.
That is the preferred model. We write in the same repositories, follow the same review rules, and leave ownership with the team.
Keep exploring
If this is the constraint you are carrying, describe the current systems and what must not break. We will tell you what a first useful step looks like.