Is WordPress a Dependency?

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.

4 Comments

  1. Anton Timmermans on September 18, 2015 at 7:19 pm

    Hello Alain,

    I completely agree with your post and you have explained my view in a way that I have never thought about it.

    While I still believe it would be better to add the correct composer.json to core, the tools outside of core are excellent to use WordPress as a dependency. I would advice looking at Bedrock to see how a WordPress installation should be done: https://github.com/roots/bedrock. Just linking in case you didn’t find it or someone else needs it.Report

    • Alain Schlesser on September 18, 2015 at 7:55 pm

      Hello Anton,
      Thanks for the feedback and the link to Bedrock. I know the project, and wholeheartedly agree with its mission to bring the Twelve Factor App (http://12factor.net/) to WordPress.
      You can also take a look at https://github.com/wecodemore/wpstarter, which has a similar goal, but uses Composer to do the actual setup.Report

  2. Lisa Linn Allen on September 18, 2015 at 8:08 pm

    I am in agreement with you. From a practical standpoint, if you want to separate your customized code from WordPress core so your code can be deployed across multiple environments, core has to be treated as a project dependency.

    If WordPress wants to be taken seriously by large enterprises that are not interested in having WordPress.com host their sites, eg, companies that want to self-host, they indeed do need to mature their perspective on what WordPress is and is not. Core should not be entangled with other parts of the site, and it should be Composer friendly.Report

    • Alain Schlesser on September 19, 2015 at 9:09 am

      Spot on, Lisa!
      Thanks for your feedback.Report

Leave a Comment