Connected graphite and aluminium modules representing the parts of a software system.
An editorial illustration of connected software components

Name the limit before choosing the replacement

A slow application can make a different database feel like an attractive answer. Before comparing engines, I want a more precise question: what is the current system unable to do well enough?

The answer might concern the way data is queried, a requirement the application cannot express cleanly, or the environment in which it runs. Those are different reasons for change. A technology comparison is more useful once the actual limitation is visible.

Changing the engine may be sensible. So may improving a query, adjusting an application boundary or changing the hosting environment. The useful choice is the one that addresses the constraint we can identify.

Include the cost of being wrong

A database is connected to application behaviour, operational knowledge and recovery procedures. Replacing it means asking other parts of the system to adapt too.

That makes the decision larger than a list of features. Who will maintain the new setup? Which assumptions in the application depend on the existing behaviour? How would we discover that an important workflow behaves differently?

For an early product, preserving time to learn about users may matter more than adopting a preferred technology. For a more established application, a recurring constraint may justify the disruption. Neither answer follows from the name of the engine alone.

Separate an observation from an explanation

My work on a combined hosting and MySQL-to-PostgreSQL move made this distinction particularly relevant. The earlier speed and accessibility problems were resolved after both changes. That does not identify which change caused the improvement.

It is tempting to make a cleaner story out of a successful result. But “the system improved after the move” and “this database made it faster” are different claims.

I would rather keep the uncertainty visible than turn one outcome into a general recommendation. It leaves room to ask better questions about the next system, whose constraints may be quite different.

Choose evidence the decision can use

Before another change, I would want a small record of the behaviours that matter: representative requests, important workflows, resource use and the conditions under which a problem appears.

The purpose is not to measure everything. It is to have enough evidence to compare a proposed benefit with the work and risk of making the change. If the reason is a particular capability rather than speed, that capability needs its own concrete example.

The migration case study covers the project context and the supported outcome. The broader lesson I take from it is about choosing a level of certainty: a sound decision can include uncertainty, provided we are clear about what we know and what still needs checking.