API development & integration
Integration is where estimates go to die. Usually because the estimate assumed the other system behaves.
The other system will let you down
Integration work looks simple from the outside. Two systems, some data, move it across.
Then reality: the API is rate limited at a number nobody documented. It returns 200 with an error in the body. The sandbox behaves differently from production. A field marked required is sometimes null. It goes down for four hours on a Tuesday and comes back with duplicates.
None of this is unusual. It's the normal condition of integration work, and the difference between a project that lands and one that overruns is whether it was designed for this from the start or discovered halfway through.
What we build
- Public and partner APIs
- REST or GraphQL, versioned, documented, rate limited, and authenticated properly. Designed for the developers who'll consume them rather than for whoever's building them.
- Third-party integrations
- Payment providers, CRMs, accounting, logistics, identity, industry platforms. Including the ones with documentation that hasn't been updated since 2019.
- Middleware and sync layers
- Keeping data consistent across systems that disagree about what a customer is, without either becoming the bottleneck.
- Webhooks and event pipelines
- Real-time flows between systems, with the delivery guarantees and replay capability that make them trustworthy.
Designed for failure, deliberately
- Retries with backoff, and idempotency
- Requests get retried. Without idempotency keys, retries create duplicate orders, duplicate charges, duplicate everything. This is the most common integration bug we're called in to fix.
- Queues between systems
- So the other service being down means delay rather than data loss.
- Reconciliation, not just sync
- A scheduled check that both sides agree, because eventually they won't, and finding out from a customer is the expensive way.
- Observability on every integration
- Logging, alerting, and a dashboard showing what's flowing and what's stuck. Silent failure is the worst failure mode and it's the default one.
- Contract tests
- So you find out the third party changed their response shape from a test, not from your support inbox.
Before you ask.
REST for most cases — simpler, better tooled, easier for consumers. GraphQL when clients genuinely need flexible queries across related data. Not a matter of taste; a matter of what your consumers do.
Custom Software
You know the spreadsheet. The one that runs something important, that only two people understand, that everyone is slightly afraid of.
Intelligent SystemsWorkflow Automation
Your systems are fine. It's the space between them where the week disappears.
Data & CloudCloud & DevOps
Deployment should be the least interesting thing that happens all week.
Tell us what you're trying to build.
A 30-minute call, no charge and no pitch deck. Describe the problem and we'll tell you how we'd approach it, roughly what it costs, and whether we're the right team for it. If we're not, we'll say so.
30 minutes · No charge · No deck
