I am currently on a quest to find the perfect setup for my WordPress projects (who isn’t, right?). I do think that a large part of what makes or breaks complex software projects is dependency management. And there are dependencies at every level of your projects, be they languages, libraries, servers, stakeholders, whatever. When someone pays you to attack a project (outside of hobbyism), he generally pays you to fulfil a business goal. And it’s your task to keep the things in check upon which this business goal “depends” on.
The problems you’ll deal with when trying to manage these dependencies are not new to your project; they have been the same problems for many moons. And many smart people before you have found solutions to these, which can be found somewhere on a spectrum from “satisfying” to “perfect”.
You’ll probably agree that it is best to learn from other people’s mistakes and reuse their solutions, instead of being stubborn and insisting on making these same mistakes yourself (wasting a lot of time & money in the process).
On most levels that get touched by your project, the problem of “dependency management” has probably been solved already. For example, to be able to build a server stack that can run on any hardware, we have tools to virtualize/automate/abstract the entire hardware your stack could be dependent on.
On the “libraries” or software level, you have different package managers that you can use, depending on what platform or programming language you like to work with. For the PHP language, the package manager of choice is Composer.
When I researched ways to include WordPress into a proper dependency management system for my software layer, I stumbled upon a Core Trac ticket that had logged a debate I did not expect: whether WordPress was a dependency of a site, or whether it was the site itself. So, instead off discussing how to best pull WordPress in, the discussion veered off into a question of whether this was even a good idea in the first place.
So here’s how I see it (and I still have a lot to learn, I admit, so I’m totally fine if you disagree). The point of starting a project to meet a business goal is usually to have some business logic be executed on business data. I don’t want to go into any technicalities here on where the data comes from or how the logic is executed; these are details you should discuss with your local software engineer.
But the business logic is the thing you are getting paid for. Everything else is just a dependency of making this work. So, I consider even the website itself to be a dependency, as you could also have a smartphone app, or staff members, or subcontractors, or a mainframe be responsible for executing this. As I am a software engineer and web developer, I tend not to be asked to manage anything but a software solution.
Each dependency can have its share of sub-dependencies. So, if I say that my business goal is to collect a list of emails of potential customers, my main dependencies probably are a website and an email list provider. Now, the website dependency introduces a couple of new dependencies, like a domain name, a web server, etc. The web server again has sub-dependencies, like the OS it runs on, the scripting language and DB it uses, and so on.
Somewhere rather deep inside these dependencies, you have WordPress, a CMS, that provides an abstraction of the DB and the web server (and some other things, too), so that you can better concentrate on implementing your business logic, instead of dealing with the DB directly or building endless user interface elements for management users.
So, if we ignore all the levels above it, and just concentrate on the web site level … is WordPress the site, or is it a dependency of the site? I would argue that it is pretty clear that WordPress is “just” a dependency, as you can have all sorts of stuff running alongside WordPress on your server. And the fact that there is a WP-REST API project that will be integrated into WordPress core and that allows you to have a a public-facing front-end that can be another platform or language and that is completely separate from the WordPress backend tells me that at least a portion of the WordPress core developers agree.
Although I understand the emotional attachment one might have to a project that is by your side for several years, I do think that the WordPress developers need to take a step outside of the WordPress ecosystem and exchange best practices with other platforms. Switching from [platform XYZ] to WordPress is a very frustrating experience so far, as the potential far exceeds the practical realities.
I’d love to have some feedback on this, as my conclusions might not be so “evident” as they seem to me.