← All field notes
Product catalogLive e-commerce

When product catalogs quietly become graphs

Product catalogs don’t break. They drift. And at some point, they stop behaving like the system they were designed to be.

The situation

A production e-commerce system with over 1,500 categories and thousands of products had been evolving for years. At first glance, everything looked normal:

A typical hierarchical catalog. But over time, business rules accumulated. Products appeared in multiple categories. Attributes depended on context. Filtering logic varied between sections.

The system still treated the catalog as a tree. But the data had already become something else.

The symptom

Nothing was broken. But nothing was reliable. Filters returned empty results where products clearly existed. Other combinations showed products outside the expected category. Navigation became inconsistent.

Users couldn’t trust what they were seeing.

Investigation

The first instinct in these cases is to fix filters. That’s almost always the wrong place to start. Filters are just the surface. The structure underneath is the real problem.

The investigation focused on:

Once mapped, the pattern became clear.

Root cause

The catalog had evolved from a tree into a graph. Relationships were no longer strictly hierarchical.

But the platform still assumed a simple tree structure. This mismatch leaked into every part of the system.

Filters weren’t broken.
They were operating on the wrong model.

Why this kind of problem is dangerous

Structural drift doesn’t trigger alarms. The system continues to function. But its behaviour becomes harder to predict. In this case, a filtering rule introduced for one category silently affected several others, due to shared attributes and overlapping logic.

Each new rule added complexity. Each exception made the model less coherent. Eventually:

At that point, the system is no longer controlled.

The fix

The fix was not to “improve filtering.” It was to restore a coherent structure.

Conclusion

Once the structure became coherent again, the symptoms disappeared. Filters became consistent. Navigation made sense again. The system became predictable.

If your system starts behaving inconsistently, it’s rarely just a bug. It’s often a sign that the underlying model no longer matches reality.

And at that point, you don’t fix features. You fix the structure.

The slow decay of a site that still “works”

Is the old site behaving in ways no one can quite explain?

That’s rarely one bug — it’s usually the model drifting out from under the platform. Send us the symptom, read-only repo access, and a sanitized dump. Within two business days you get a plain-English root cause and a fixed-price quote to fix it. The triage is €360. Miss the deadline and it’s on us.

Read-only · sanitized dump · NDA on request · we never appear to your client