I’ve had multiple run-ins with people trying to use tools like WordPress to build complex online services. WordPress is great, but it’s a content management system (CMS). It’s not an application framework. A CMS will help you build a website, while an application framework will usually help you build a webapp.
So what’s the difference? What are web sites and web apps?
This is a question you might get different answers to from different people. Other people might even question whether it’s a distinction worth making. I think it’s important, though, because if you don’t understand exactly what you’re trying to build, it might cost you in the long run.
In the simplest sense, web sites are sites where you have two types of users: readers, and writers. That includes marketing sites, blogs, news sites, simple stores, and more. You can build them with tools like SquareSpace or Wix, or you can have a more flexible, tailored solution built on WordPress. What they all have in common is that they are mainly about presenting information. They might have relatively simple interactions, like making a payment for an item, or posting comments, but not a lot more than that.
A web app, on the other hand is a tool that manages complex data, different types of interactions, multiple types of users, and often connects with other systems. An example of a web app would be a service like Disqus. It has different types of users who can perform different types of actions. It stores data about users, comments, analytics, payments, moderation, communities, and a lot more. That data interacts in complex ways. For example, moderation data is only visible to community managers, who can modify it to change how other users can use the app. Web apps are often built using application frameworks, like Ruby on Rails, Laravel, or my personal favourite, Django. We generally build our web apps in Django because it helps us build quickly and efficiently. It also helps us get all the boilerplate work out of the way so we can start working on the most important parts of your project.
Let’s talk about impact.
Choosing the right tool for the job will have a big impact down the line. Which is why it’s important to figure out what you’re building.
A CMS like WordPress already has systems in place to do things like organize images, posts, pages, and categories. But complex apps don’t necessarily organize their data like that. Sometimes they need to tweak the database to make one type of data more efficient to index than others. Sometimes they define special relationships between data types. Forcing a CMS to do those things will inevitably lead to weird, complicated code that will eventually be a hassle. You might be able to get something simple up and running quickly, but development will soon be slower and more expensive.
The reverse is also somewhat true. Building a web site with Django or Rails will be far slower and more expensive than simply building a WordPress site. If you want to add a tagging system, or image sizing system, you’ll have to build it from scratch. A dedicated CMS generally offers that by default. Building that stuff will take more time and money.
There are content management systems built using application frameworks, like Django CMS. That might seem like the best of both worlds. While that’s a totally legitimate way to go if you need both a web app and a web site, it comes with a particular risk: if there’s an issue with your app, your marketing site or blog will go down with it and vise versa. Often the users who interact with an app and site are different, and the technical requirements aren’t the same. For those reasons, it’s often best to separate them.
Those are the differences and why they’re important. If you just want to present information like articles or products, and maybe collect payments or comments, then build a web site with a content management system. If you want to build a complex service, then you should probably think of your project as a web app built on an application framework.