Answering The Question "When does a CMS make sense?"
Nov 13, 2018
When a CMS the right tool for the job and when it isn't.
Here's my response altered slightly to better fit the article format
TLDR: It's not a good idea to build a full blown web app, like Basecamp, on a CMS. CMS should be used when you're managing content, but probably not user generated content. Consider use the JAMstack over traditional dev stacks like LAMP. Use a headless CMS instead of a monolithic CMS.
The Big Question
You're exactly right in your description, you're bolting on more and more services and functionality until you have the application you wanted and you're doing all of this on the server. This results in worse and worse performance and more and more opportunity for security vulnerabilities for your application. The trouble is that you're adding on to platforms that were designed for a specific purpose, to manage content, and in the case of WordPress to manage blog content. WordPress is not an application platform, no matter how many times you see people using it in this way. You can bend these systems to your will, but they're more likely to break your spirit while you're doing it.
Compose Your Application Close To Your Users
Enter the JAMstack. When you're building with the JAMstack you're shifting where the functionality of your app comes together, from the server to the client. You're composing best-in-class services together on the client to make your application, rather than using whatever is available to you in your monolithic server app. You might actually already be part way there, think about a commenting system. If you used server side commenting and had a popular blog you'd be in some serious trouble unless you had a beefy backend, not to mention the expense of running a beefy backend during slower times.
Getting on the JAMstack
- Prerender you HTML using a static site generator (don't discount this even if you're building UGC app)
- Make your front-end dynamic with React or Vue.
- When you're tempted to use a server, look to using Functions-as-a-Service.
- Use best-in-class services for things like, commenting, forms, e-commerce, auth, and yes even CMS, that can be delivered directly to your users' web browsers.