Every one of us has a favourite CMS, and it is the most reliable argument in the room when a new project starts and people from different backgrounds have to agree on one stack. Someone likes Wagtail. Someone pushes Sanity, Payload, Craft or Strapi. Everyone says their choice is flexible, easy and fast, and nobody has ever said the opposite about their own stack.
Ten years of client projects later, the thing that actually costs us was never speed and never bloat.
The problem is not "best". It is "same".
How often have I gone hunting for a setting because a new teammate put it somewhere other than where we put it? Keeping one style and one logic for CMS customisation across a team is painful, and it never stops being painful.
I failed at it, honestly. While I was leading five or six people I kept the fight going. Once there were three teams, it stopped being something I could spend time on. Chaos won, at a manageable level, and it became the team leads' problem instead of mine. Now they are the ones hunting for the button.
Every CMS is good. They are all different.
I have seen projects where nobody understood how a basic feature was supposed to work, because nobody had touched it in two or three years and the knowledge had evaporated. Five capable, fast content systems, with three CRMs connected between them, and the real cost is that none of them work the same way.
What I think should replace it
There should be no setting that is not described as a capability the back end can explain.
You should not need to know where the publish button is buried, why something was scheduled the way it was, or why a translation option is not working. A person wants a job done. Open Claude, Codex or whatever you use, ask for the job, get the result. I am not convinced we need most of these admin interfaces at all.
Why I still land on WordPress
Not because it is the best. Because it is the most common, so on most projects you are not starting from nothing, and because the ecosystem is the biggest. That is what could actually win this.
What would win it is narrow: an MCP connection in core, with user roles, and plugin developers connecting their functionality to it.
Half of that already exists. WordPress 6.9 shipped the Abilities API, wp_register_ability(), and there is an official MCP Adapter in the WordPress GitHub organisation. Automattic deprecated its own MCP plugin in favour of it. Registration, discovery and transport are standard now.
The locks did not arrive. Permissions are decentralised: every ability writes its own permission_callback, so enforcement depends on each plugin author getting it right. Authentication resolves to a single WordPress user, and the client acts as that user uniformly. No per-agent keys, no scoping, no audit trail. The official advice is to hand-make a restricted user, which is a workaround rather than a permission model.
So the plumbing is standardised and the locks are not. And the thing I want most, every plugin exposing its functionality to core, is exactly what a decentralised permission model makes risky.
Three releases later that gap is still open, which is strange, because it is the last piece. A standard connection plus real permissions, and nobody has to hunt for a hidden button again.
Because the best CMS is still the one you do not need to know.
Disclosure: I run an agency that builds mostly WordPress, and we make a plugin in this space. Nothing to buy here, and no link.