Global bank · NDA protected

API Middleware for a Global Bank

Two enterprise systems that had to talk to each other, for a client where a single failed test would have cancelled the project. Built robust first, scalable to any level, and delivered under a strict NDA.

2
Systems connected through one middleware API
0
Room for error: a failed test would have ended the project
Live
In production, supported and updated by JDD
Sector
Global banking & investment
Users
Client engineering and operations teams (confidential)
Stack
API middleware, job queue, Docker, AWS load-balanced hosting
Engagement
Fixed brief delivered to plan under NDA; ongoing support
01

A brief with no room for error

The client arrived with the plan already written. Two of their systems needed to communicate through a middleware application, and exactly what had to happen was specified. Our role was not to work out the what; it was to propose and build the how, and to get it right first time.

The terms were unambiguous. The system had to be extremely robust, because with a client of this size there is no tolerance for errors. It had to scale to any level without failing. And if any part of the software testing failed, the project would be cancelled.

It was delivered under a strict non-disclosure agreement, which we offer every client and which this one required. So this page stays deliberately top-level: the technology we used, the problems we solved, and a general view of what was delivered. No names, no screens.

API middleware
Request queueing
Docker
AWS load balancing
NDA
Illustrative architecture of the banking middleware: phone conferencing and video conferencing systems connected through a middleware API with an event audit log; no client interface shown
Top-level architecture, illustrated: the middleware sits between the client’s systems, translating and monitoring each connection, with every event logged. No real interface is shown.
02

Respecting a rate limit without making anyone wait

The hard constraint sat on one side of the bridge. One of the connected services had a known limit on how many requests it would accept per minute. Push past it and requests fail; hold everything back and the calling system sits waiting. Neither was acceptable for a client that had made robustness the condition of the project.

We solved it with queueing. Every incoming request is accepted immediately and placed in a virtual queue as a job. A separate process takes jobs from the queue at set intervals and passes them to the rate-limited service. The calling system gets an instant response; the downstream service never sees more than it can handle.

constraint   downstream service · fixed requests-per-minute ceiling · bursts from upstream
approach   accept → acknowledge → queue as job → worker releases at interval
outcome   immediate responses upstream · full control over requests in flight · limit never breached

Queueing also gave us something the brief did not ask for but a bank always wants: complete control. How many requests are processed, how fast, and in what order became configuration rather than chance.

It is a well-understood technique. The judgement is in knowing that it is the right one before the first test, not after the first failure.

03

Built to be replicated, not resized

“Scalable to any level” is decided at the hosting architecture, not in application code. A single server that gets bigger has a ceiling; a set of identical servers that gets wider does not. The application was developed inside Docker containers so that it could be replicated across many load-balanced servers, all acting as one entity.

The containers integrate with AWS’s scalable hosting, so the application is granted more resources as and when they are required and releases them when they are not. Capacity follows demand instead of being guessed at in advance.

Before

One application on one server, upgraded when it strains and hoped-for headroom the rest of the time.

After

Identical containers behind a load balancer, added on demand, with no single machine the system depends on.

We have been continually impressed by their ability to successfully deliver complex projects on time and on brief that meet the expected high standards of accuracy and scalability for clients in the global banking and investment sectors. They provided regular updates, communicated transparently and proved capable of providing a robust solution to any problem.
★★★★★
Client, name withheld under NDA
Global banking & investment sector
04

Testing as the gate, not the afterthought

When the brief says a failed test cancels the project, testing stops being a phase at the end and becomes the shape of the work. Every design decision above was made with the question of how it would be proven, under load, before the client ran it themselves.

The queue made behaviour under bursts predictable and repeatable rather than dependent on timing. The container architecture meant the environment tested was the environment deployed, replicated exactly. Both choices removed categories of surprise before anyone looked for them.

Alongside the engineering, the client had regular updates and transparent communication throughout. On a project with no margin, knowing where things stand is part of the deliverable.

Diagram of the queueing approach and hosting: requests queued and released to a rate-limited service, Docker containers behind an AWS load balancer scaling on demand
How the middleware holds up: requests are acknowledged and queued, a worker releases them to the rate-limited service at a controlled pace, and the containers behind it scale out on AWS behind a single load balancer.
05

What we can say, and what we can’t

We offer every client the option of a non-disclosure agreement, and we hold to it. For this project that means the client, the systems involved and the specifics of the integration stay confidential, and no real interface appears on this page. The illustrations above are exactly that: illustrations of the architecture, not the product.

Confidential

Who the client is, which systems were connected, what the data was, what the interface looks like, the numbers behind it.

What we can share

The engineering approach, the technology used, the standard it was held to, and that it is in production and supported.

If your project needs the same terms, they are available from the first conversation.

06

Why a bank picks a small team

The brief was clear and the standard was high, and neither of those requires a large vendor. What they require is a team that can propose a sound solution, build it without drift, and be reachable when a question comes up.

The techniques here are not exotic: a queue, containers, a load balancer. The value was in choosing them for the right reasons, implementing them so they could be proven, and delivering on time and on brief for a client who would have walked away from anything less.

The same discipline applies to a founder’s first product or an SME replacing a spreadsheet. The bank simply made it a condition.

07

Where it stands

The application is in production and we support it with all development updates. Business-critical changes are made without disruption to the services that depend on it, which is the point of having a technical partner rather than a one-off supplier.

It passed the test that would have cancelled it. Everything else about the project is the client’s to tell.

Need two systems to talk, reliably, at scale?

Integrations, middleware and APIs built to a bank’s standard of robustness, with an NDA available from day one if your project needs it.