A readout to a client's leadership team
Case study

Axim ended overnight pipeline failures with a focused remediation sprint

Axim's plan data broke too often: hard-coded logic, unstable builds and no reliable way to match vendor records.

Axim

80%fewer failed daily pipeline builds

The workflow before#

Axim sells data intelligence built on two vendor feeds: retirement plan data from Judy Diamond and market data from Bloomberg. The pipelines that joined them had grown by patching. Specific employer IDs (EINs) were written straight into the code, so adding or dropping a plan sponsor meant an engineer editing and redeploying. The jobs called the Bloomberg API far more often than they needed to. Docker builds pulled images from public registries and Python packages at whatever version was current, so a routine overnight rebuild could fail with no code change at all. And the two vendors share no common key, so matching a sponsor to its market record came down to judgment instead of dependable logic.

What we built#

We ran a focused review and rework sprint on Axim's existing pipelines. The goal wasn't a rebuild. It was to take the surprises out: get fixed values out of the code, make every build reproducible, stop wasted API calls, and write a clear plan for the hardest open problem, matching records across two vendors that don't share an ID.

Plan sponsors managed in configuration

We pulled the hard-coded EINs and other fixed values out of the pipeline code and moved them into configuration. Adding or removing a plan sponsor is now a config change someone can review, not a code release. We kept that configuration in version control next to the code that reads it, so every change has an author and a history.

Builds that behave the same every day

We moved Axim's Docker images into its own container registry and pinned every Python dependency to a fixed version. The same code now builds tonight exactly as it did last week, so the morning team starts with fresh data instead of a failed job. Upgrades still happen, but on purpose, when someone chooses to test and bump a version.

Fewer, leaner API calls

The pipelines were asking Bloomberg repeatedly for data they already had. We consolidated those calls so each run requests what it needs once. Runs get shorter, the API sees less load, and there's one less place for a nightly job to stall.

A plan for matching vendor records

Judy Diamond and Bloomberg describe the same companies with no shared key. We documented the data quality gaps and specified a matching approach, along with the data assertions that catch a bad match before it reaches a customer. We designed the checks first because in a data business a wrong match shipped to a client costs more than a missing one. This piece is a plan ready to build, not yet in production.

How we delivered it

A small Blue Orange team worked inside Axim's existing code base as a single sprint: review first, then rework in order of risk, starting with the build failures that hit every morning. We changed the pipelines in place instead of replacing them, so Axim's engineers kept working in familiar code and could review each change as it landed. The sprint closed with written documentation of the data gaps and the matching plan, handed to Axim's team as the next piece of work.

Before and after#

MeasureBeforeAfter
Daily build failures from dependency driftRecurringDown about 80%
Hard-coded EINs in pipeline codeIn the pipelines0, moved to configuration
Docker image sourcePublic registriesAxim's own registry
Cross-vendor record matchingAd hoc, no shared keyDocumented approach with validation assertions

What's next#

Next is building the cross-vendor matching from the plan, with the assertions running on every load. Once plan and market records line up reliably, Axim can put a question-answering tool on top of the combined data, so its analysts can ask about a sponsor's plans and market position in plain language.

ShareLinkedInEmail

The refactor replaced hard-coded identifiers, including plan sponsor EINs, with configuration management, so adding or removing a sponsor no longer requires a code change or redeploy. Redundant calls to the Bloomberg API were consolidated so each run fetches each dataset once.

Build stability came from two changes. Docker images are now pulled from Axim's own container registry instead of public registries, and every pip module is pinned to a static version, so environments are reproducible across runs and a rebuild can't silently pick up a new upstream release.

For entity matching between Judy Diamond and Bloomberg, we specified an approach for records with no shared key and the data assertions needed to validate matches before publication. The matching logic itself is specified, not yet built.

Next step

Let's build the case study we tell next.