Skip to content
← Work

Spare parts e-commerce

A faceted catalogue that stopped timing out

Tens of thousands of SKUs behind a five-facet filter that frequently timed out, and pages taking two to three minutes. We replaced the data model behind the filter and automated a multi-supplier import that had been days of manual work.

Period
2017 · 5 months
What we delivered
Catalogue filter re-engineering, Redis caching, automated multi-supplier import
Setting
End-to-end delivery ownership

Client and project names are withheld under confidentiality. Sector, scale and outcomes are reported as delivered.

2–3 min → ~5s

Catalogue page render time

Zero

Filter timeouts remaining

Days → daily

Supplier catalogue maintenance

5 feeds

Automated supplier imports

Context

An online retailer selling spare parts for every vehicle brand and model available in its market — roughly 15 supported brands and tens of thousands of SKUs, down to individual nuts and bolts.

Problem

Two problems, both operational.

The storefront exposed a faceted catalogue filter across brand, model, category, sub-category and price. At that catalogue size the filter frequently timed out, and pages that did complete took two to three minutes to render.

Separately, onboarding and updating supplier catalogues was manual, taking days of work per cycle — which meant prices and stock were chronically out of date, on a product where price accuracy is most of the purchase decision.

Approach

The filter was a data-model problem, not a query problem

We diagnosed the bottleneck as the platform’s normalised attribute and meta data model: every filter query traversed the product meta tables at read time, and no amount of query tuning survives that at tens of thousands of SKUs.

So we re-engineered around a purpose-built, denormalised filter index table, kept continuously in sync through product create, update and delete hooks. Filter queries stopped touching the meta tables entirely. We rewrote the filtering component from scratch as a standalone plugin and layered Redis caching over the resolved result sets.

Automated multi-supplier import

We built an XML import pipeline covering five supplier feeds. Existing products had prices and stock updated automatically; previously unseen products were created as drafts and routed into a manual review-and-approval step — protecting catalogue quality without blocking the daily sync.

Delivered to survive the engagement

Both systems shipped as two independent, theme-agnostic plugins built to native platform conventions, so the client kept the freedom to change themes or upgrade the platform without losing the work.

Outcome

  • Catalogue filter timeouts eliminated entirely. Requests that previously failed outright returned in around ten seconds.
  • Pages that previously took two to three minutes returned in roughly five seconds.
  • Supplier catalogue maintenance went from a multi-day manual effort to an automated daily sync, keeping pricing and stock accurate across tens of thousands of SKUs.
  • The client was left with maintainable, decoupled plugins rather than theme-embedded customisations, preserving upgrade paths after the engagement ended.