Development · Production · Operations
Software and infrastructure
that hold up in production.
We solve technical problems that have no off-the-shelf answer, then run the result in production ourselves. For companies that are stuck on a problem and need, at the end of it, a system that holds up under load and takes little looking after.
Built and operatedAs of 08/2026
- systems on record
- 6
- of those running
- 4
- of those ended
- 2
- Earliest start
A selection: the most recently built systems. More than thirty have been built over the last few years, and older ones are still running.
Register
| System | In service | ||
|---|---|---|---|
| Bio pages and short linksProductStart | 26monthsongoing | ||
| Payment links and workspacesPlatformStart | 10monthsongoing | ||
| Content recognitionProductStart | 9monthsongoing | ||
| Multi-tenant PaaSPlatform · endedStart | 16months | ||
| Licences in one placePlatform · endedStart | 10months | ||
| Receipts filed automaticallyAutomationStart | 1monthongoing |
Systems that have ended stay in the register, with the month they ended.
Approach
We take the harder route when it makes the system last longer.
Four examples from the systems in the register. Each of these decisions cost more time to build, and each is in the log with a date.
- Sender verification in our own code.
- In the receipt pipeline we verify the RFC 6376 DKIM signature ourselves. That is the point that decides whether a forged invoice gets through and gets paid.
- Tenant isolation in the infrastructure.
- Each tenant got its own database, its own connection pool and a network rule preventing access between tenants. Because isolation lives in the infrastructure, a missing filter in a query cannot undo it.
- Idle environments put to sleep.
- A service shut them down and started them again the moment somebody needed them. It cost development time once and saved compute every month afterwards.
- The cluster on our own hardware.
- For the content recognition system we run the Kubernetes cluster ourselves. With bursty load that was cheaper and more predictable in cost than managed nodes. The operational work that comes with it is ours.
Services
What we take on for you
Seven services between the first design and day-to-day operations. You can commission a single one of them or all of them in turn: from the data model through the build to running it, and on to handover to your team.
Build
Software & platforms
Applications and multi-tenant platforms for companies whose processes no longer fit a standard product.
AI integration
Putting language models into existing processes: a fixed output format, visible cost, a swappable provider.
Automation
Letting software do the recurring manual work — with a dry run, an approval and a log.
Data
Data & analytics
Bringing figures from separate systems together, reconciling them and making them fit to report on — including the places where two systems give different numbers.
Operations
Operations & infrastructure
Your system runs and somebody is responsible for it: deployment, databases, monitoring, provider migrations.
Training
Training & enablement
Your team takes the system over and carries on developing it.
Advisory
Advisory & architecture review
A second pair of eyes on architecture, security, and which part of the plan can be dropped.
Log
What we have been working on lately
The last twelve months.
- Operations
Turned a real outage into alert rules, so the same failure is noticed next time before anyone phones about it.
- Build
Built the receipt pipeline, implementing RFC 6376 DKIM verification ourselves rather than trusting a library to get exactly that right.
- Advisory
Architecture review at a software company. Three risks named and ranked by what fixing each would cost.
- Data
Moved processing onto an event stream; autoscaling has followed queue depth since. Messages that fail three times run into a queue of their own and stay there for review.
- Operations
Built our own bare-metal Kubernetes cluster, because managed nodes would have cost more at this load profile.
Describe the problem you have.
Half an hour on the phone is usually enough to establish what the problem is, roughly how much work it means, and whether we are the right people for it. If we are not, we will say so on that call.