Skip to content
Bailey Wildash

Services

I get integrations that move money or data live, and keep them working after launch.

You probably have one of these: a customer integration that keeps slipping, a webhook you don't trust, an API that doesn't match its docs, or a process you'd like an agent to run. Find yours below. They're often connected, so it's normal to need two or three.

Who this is for

Mostly companies whose customers integrate with them

I work mainly with companies whose product is an API, an SDK or a money flow, where the customer's engineers are part of the sale. That includes platforms moving upmarket into enterprise deals, teams whose integrations keep stalling between signature and launch, and technical teams that want agents doing real work rather than drafting emails. In practice that's usually API and developer platforms, payments and fintech companies, digital asset businesses, SaaS companies selling into enterprise, and the solutions and post-sales teams inside them who end up owning the integration.

If you're on the other side, plugging into someone else's API or payment provider, the architecture reviews and API testing are built for you too.

Why there are no case studies here

01 Integration delivery

Getting integrations live

You'll recognise this if

a customer signed months ago and still isn't live, or went live on time and is barely using it, and every enterprise deal now seems to come with an integration project nobody's set up to run.

Integrations stall in predictable places, and it's rarely the technology. Sales said the API handles bulk refunds. It does, one at a time, and nobody checks until the customer's engineers hit it. Production credentials wait on someone who doesn't know they're the one holding things up. The provider's sandbox, which is their test environment, can't prove the one thing that breaks in production.

I stay with it from the sales handoff to real use. On day one I check everything the customer was promised and flag what I can't confirm. I work out who owns each dependency: you, your customer or a supplier. I keep what launch really needs apart from the nice-to-haves, so the extras don't push the date. At launch I watch the first live transactions all the way through and check the numbers match on both sides.

Live is not the finish line. A launch nobody uses is not a success, however clean the go-live was, so I give the first month of real traffic the same attention as the build.

What you get

a go-live date you can defend, because every blocker has an owner and a deadline. Then, a month after launch, a straight answer on whether usage is where the deal said it would be, and who's fixing it if it isn't.

Also covers

  • A go-live checklist where every tick has a test result, a log or a setting behind it
  • Taking it to your product team, with evidence, when customers keep hitting the same gap

How I run itTalk to me about this

Example launch list

Needed for launch

  • Live API keys issued

    Owner: the customer's IT team

    Due: this week

  • Refunds tested one at a time

    Owner: your backend lead

    Due: before launch

  • First live payments watched all the way through

    Owner: integration lead

    Due: launch day

Can wait until after launch

  • Bulk refunds

  • Custom reports for the customer's finance team

An example of keeping what launch needs apart from the extras, so the extras don't move the date. It's an illustration written for this site, not client work.

02 Architecture

Architecture and webhook reviews

You'll recognise this if

money or data moves between your system and someone else's, and nobody can say for sure what happens when a message arrives twice, late or not at all. Maybe you've already credited someone twice.

A webhook is a message another system sends yours when something happens, like "payment completed". The calls themselves tend to work. The trouble is deciding which system gets the final say, and what happens when a step fails. Who decides a payment has settled: the customer landing on your thank-you page, the webhook, or your server asking the provider directly? What happens when the same event arrives twice, or the second one arrives first? What happens when your request to create a payment times out and you can't tell whether it went through?

In a review I follow each message through, step by step, and mark each part as fine, at risk or unknown, with the evidence next to it. I split what I find into what has to be fixed before launch and what can wait. Where it helps, I test your webhook endpoint directly by sending it duplicate, out-of-order, replayed, forged and tampered messages, and write down how it coped with each.

What you get

payment and data flows that cope with duplicate messages, late messages and timeouts, with the risks written down before launch rather than after.

Also covers

  • Making sure a retried request can't charge or credit anyone twice (the jargon is idempotency)
  • What happens when your code runs on more than one server at once
  • Error handling that looks past the status code, because some APIs report a failure as a success

Talk to me about this

Example message trace

What arrivesWhat your system doesReview
"Payment pending"The order waits for the moneyFine
"Payment settled"The order is marked paidFine
"Payment settled", sent againIt's counted onceFine
A late "Payment pending", after "settled"The order goes back to waitingAt risk
No answer to your request to create a paymentNobody can tell whether it went throughUnknown
An example of following each message through and marking every step fine, at risk or unknown. It's an illustration written for this site, not client work.

03 Testing

API behaviour testing

You'll recognise this if

an API you depend on doesn't do what its docs say, or it did last month and the latest release quietly changed it.

Docs drift. A spec promises validation the API doesn't do. An error comes back marked as a success, with the real message tucked inside. A field is documented in one unit and sent in another. Each of these is a production incident waiting for the right day.

I write tests that check each of these against the real API, usually in the provider's sandbox. Anything the docs promise gets a pass or a fail. Anything the docs don't cover gets recorded, and the next run tells you what's different. Alongside that I keep a copy of the provider's docs, API specs and SDK release notes under version control, and when something changes I trace it to the parts of your integration it touches.

What you get

fewer surprises when a provider ships a change, and evidence rather than guesswork when their API behaves oddly. The tests stay with you, so your team can rerun them whenever it likes.

Talk to me about this

Example test run against the real API

The docs sayThe API didResult
Amounts below the minimum are rejectedAccepted oneFail
Errors come back with an error statusSent a success status with the error insideFail
Amounts are in penceSent one amount in poundsFail
A repeated request is rejectedRejected itPass
Nothing about expired cardsDeclined with a new error codeRecorded
An example of testing what the docs promise against the provider's test environment. Anything the docs don't cover is recorded, so the next run shows what changed. It's an illustration written for this site, not client work.

04 Payments

Payments and digital assets

You'll recognise this if

your ledger, the payment provider and the chain don't always agree. An order shows as paid when it isn't, or a deposit shows on the chain but never reaches the customer's balance.

Money flows have the usual integration problems plus a few of their own. Money arrives but never reaches the customer's balance. Goods ship because the customer saw a confirmation page, not because the payment settled. One side says complete while the other still says pending, and the chain disagrees with your ledger.

The fix is the same discipline as anywhere else. I decide with you which system has the final say, and write down how a payment is allowed to move from one status to the next. Then a late "pending" message can't overwrite a payment that's already settled, but a refund, a chargeback or a chain reorganisation still can, each through its own route. After that, I set up reconciliation, which means checking your records against the provider's and the chain's line by line, in a form your operations team can run without me.

Where regulation comes in, I show where it lands in the system. For example, a crypto withdrawal might be held until the sender and recipient details have reached the other provider, so I work out where that hold sits and what the customer sees while it waits. Interpreting the Travel Rule, MiCA and the rest stays with your legal or compliance owner.

What you get

money and on-chain data that your product, finance and operations teams can all rely on, and a way to check it that doesn't need an engineer.

Also covers

  • Custodial and self-custody wallet flows
  • How many confirmations each network needs before a payment counts, and what happens when the chain reorganises

Talk to me about this

Example reconciliation

ItemYour ledgerProviderChainResult
Card paymentPaidSettledNot involved
Match
Card paymentPaidPendingNot involved
Mismatch

Note: shipped before the money settled

Crypto depositNot receivedNot involvedConfirmed
Mismatch

Note: on the chain, not in the customer's balance

Crypto withdrawalHeldHeldNot sent
Match

Note: waiting for the recipient's details

An example of checking your records against the provider's and the chain's, line by line, in a form an operations team can run. It's an illustration written for this site, not client work.

05 Agentic workflows

Agentic workflows

You'll recognise this if

your team uses AI to write emails faster, but the real work still depends on one or two senior people, and you wouldn't trust an agent's output without checking all of it again.

Take preparing for a customer's technical call. Today it probably costs a senior person a morning of reading tickets and docs, because only they know what to look for. With a Claude Code skill, the agent reads the account notes, recent tickets and the current docs, then drafts a one-page brief. Each fact is marked as from the docs, seen in testing or inferred, so whoever takes the call can check it in minutes.

A skill is a set of written instructions for one task, kept with your code and reviewed like any other change. I write them for the work your senior people keep repeating. Each one says what it reads, what it checks and which file it updates.

The problem with agent output isn't that it's always wrong. It's that you can't tell which parts are wrong without doing the work again. Making every answer show where it came from fixes that. Rules about what must never leave the building are written into the skill and enforced by a script, not left to the agent's judgement, and a person signs off anything that matters.

What you get

your senior people's know-how runs without them in the room, and checking the agent's work takes minutes rather than a morning.

Also covers

  • Knowledge bases that point to their sources and flag pages that have gone stale
  • Tracking changes to docs and APIs, with a note on what each change affects

How this site is maintained the same wayTalk to me about this

Example call-prep brief

Drafted by a Claude Code skill from the account notes, recent tickets and the current docs.

  • Their integration uses the older version of the payments API, which the provider plans to retire.

    Docs
  • Their test account rejects a refund larger than the original payment, as the docs say it should.

    Tested
  • They'll probably ask about bulk refunds again. It came up in recent tickets.

    Inferred
  • Question to ask: who on their side owns the move to the new version?

An example of the brief an agent drafts before a customer's technical call. Every line says how it knows, so the person taking the call can check it in minutes. It's an illustration written for this site, not client work.

Most work starts small: a first piece of work that gives you a written list of the gaps, the risks and the open questions, each with an owner. It's useful on its own, and it tells us both whether there's more to do.

What the first piece of work looks like

Ways to work together

Four ways to work together

I price each piece of work once it's scoped, and put the price in writing with the assumptions behind it.

Advisory

Senior advice on integration design, delivery or agent tooling, while your team owns the work.

How it runs

We meet regularly, I review designs and plans, and I write down what I'd do and why.

Good for

  • A second opinion on an integration design before the build starts
  • Reviewing a go-live plan before the date is committed
  • Deciding where agents belong in a team's workflow, and where they don't

Project

A defined piece of work with a start, an end and an agreed output.

How it runs

I scope it up front, price it as a project and deliver against a plan.

Good for

  • An architecture or webhook review
  • Tests against an API you depend on
  • Skills and workflows built around one team's process

Fractional

A set number of days each month, so you get senior solutions architecture without hiring for the role.

How it runs

It runs on a rolling basis, and we agree the days and the priorities together.

Good for

  • Covering integrations across a growing customer base
  • Owning go-live checks and usage reviews
  • Keeping agent skills up to date as the product changes

Embedded

I join your team for a fixed period, using your tools and turning up to your standups.

How it runs

A fixed period and an agreed scope, working directly with your people.

Good for

  • A complex integration with a real launch date
  • Setting up a solutions or implementation team
  • Getting a stalled integration live

If the problem isn't a fit, I'll tell you early. That's cheaper for everyone than finding out three weeks in.

What I don't take on

Not sure which of these you need?

Describe the problem and I'll give you a straight answer on whether I can help and what it would take.