Custom Software9 min read·

What a neglected Pimcore instance actually costs

Deferred upgrades, a drifting data model, and knowledge that sits with one person: how the cost of an unmaintained Pimcore instance accumulates, and how to tell which state yours is in.

Quick answer

The cost of a neglected Pimcore instance builds in four places: the upgrade gets more expensive with every skipped version, the data model drifts away from what the business needs and makes every change dearer, integrations fail silently and get patched by hand, and the knowledge sits with individual people. None of it appears as a line on an invoice, which is exactly why it grows for so long.

DD

Danyl Daniliev

Founder, Aiki Labs · Vienna

A Pimcore instance does not fail. It gets slowly more expensive, and because no individual month stands out, nobody notices until a quote comes back that is out of all proportion to the request.

This is about where that cost comes from. Not as a scare piece: the point is to make invisible line items visible enough to plan around.

The upgrade does not get more expensive in a straight line

A major upgrade from one version to the next is a manageable piece of work: adapt the custom code where interfaces changed, move bundles to current releases, test, roll out.

Two versions behind is not twice the work. You get the changes from both jumps at once, plus bundles whose successor is named differently or no longer exists, plus PHP and Symfony versions that force their own adaptations. And every year, fewer people are left who can explain the original state.

The practical effect is that beyond a certain gap, the upgrade moves out of the maintenance budget and into project planning. There it competes with work that promises visible benefit, and it loses. That is the mechanism by which instances sit on the same version for five years.

Beyond a certain gap the upgrade leaves the maintenance budget and becomes a project. There it competes with work that promises visible benefit, and it loses.

The data model drifts, and every change pays for it

A data model is designed for the requirements known at project time. That is correct. The problem starts when the requirements change and the model does not move with them.

Concretely: attributes added as class fields that belong in the classification store by now. Product families that have no clean place in the original inheritance tree and sit beside it as special cases. Localization designed for four markets and now carrying eleven.

None of that is broken. All of it makes the next change more expensive, because the change has to be built around the special cases as well as implemented. That is why quotes feel disproportionate: they contain work that is not in the requirement, it is in the structure the requirement has to fit into.

How far your model has drifted is answerable in a week, in writing, at a fixed price.

Pimcore Health Check, €2,500 fixed →

Silent integration failures turn into manual work

The second largest cost is not an invoice, it is time inside your own company. An import fails, nobody finds out, and eventually somebody starts adding the missing records by hand.

Then that patching becomes habit. It is in no process, it appears in no report, and it still costs hours every week. In the instances we assess, missing monitoring is the single most common finding, and fixing it is usually hours of work rather than weeks.

Knowledge that sits with one person

This is the hardest item to quantify and the most expensive one. In most companies there was somebody who understood what the data model was meant to do, why a particular export looks the way it does, and which system wins when two disagree.

When that person leaves, the code stays and the reasoning does not. Every change afterwards starts with a small excavation. That is not the fault of whoever comes next. It is a documentation problem, and documentation has to be produced during operation rather than after it.

The remedy is unglamorous: write it down while you work. What each class is for, which system owns which field, which job runs when, and what happens when it fails. That is not administration, it is the only insurance against this exact situation.

Why the original agency rarely solves this

This is not an accusation, it is a business model. Implementation agencies live on new projects. A client four years past go-live with a half-day change request occupies capacity that earns more elsewhere.

You experience the result as slow answers and quotes that feel wrong. It is rarely disinterest and usually a prioritisation that works badly for both sides. That is exactly why maintenance agreements exist: they make the small, unattractive work the agreed normal case rather than the exception.

Ongoing maintenance with response times, a fixed hour budget, and upgrades that are planned rather than deferred.

Pimcore support and maintenance →

What you can do this week

You do not need a consulting engagement to get a rough read on the state. Three questions are enough for a first picture.

  • Which Pimcore and PHP version does the instance run, and when was it last updated?
  • Which scheduled jobs run, and where does the alert go when one fails?
  • Who internally can explain why the data model looks the way it does?

And if everything is fine

Then that is a good result and not wasted effort. An instance on a current version, with monitored integrations and a documented data model, is a state worth knowing about and holding.

The expensive case is not the neglected instance. It is the instance where nobody knows which of the two states it is in.

Frequently asked questions

How do I know if our Pimcore instance is neglected?

Three signs are usually enough: you are more than one major version behind, small change requests take weeks and come back expensive, and nobody internally can explain why the data model looks the way it does.

Does an upgrade really get more expensive the longer you wait?

Yes, and not linearly. Every skipped major version means more breakage in custom code, more bundles without a current successor, and fewer people who remember the original state. Two versions behind costs considerably more than twice one version behind.

Is a rebuild better than a repair?

Almost never. A rebuild also throws away everything that works, including the data model decisions that were made for good reasons at the time. Repair is usually cheaper and less risky, once somebody actually knows the current state.