In the wider world of hosting, "shared" services are the discount offering that you use when you don't value your site or really don't have any budget. But amongst non-profits and open-source projects, sharing is a positive value, and in many cases essential. Can we reclaim the concept?
I've been hosting CiviCRM sites since 2007. About 3 years ago, before I knew anything about containers, I started looking at my services, how I deliver them, and what I wanted to change. It was a much bigger investment than I was expecting, but a year ago I finished converting all my in-house hosting services over to using containers. I've been trying to write out the interesting parts of that story, and here are a few of them:
One of the surprises when digging into this technology has been how adaptable it is - it's a fairly low level system administration tool that can be used in a lot of different ways. Docker, the company, has been most successful in helping developers with their toolset, and at the other end of the spectrum, very large hosting companies (pretty much all of them) now use and offer containers in production.
So, just like with CiviCRM, it's really up to us to decide how we want to use it. Why is this important? Well, if you've ever heard Josh's stump speech, you'll know that it's important to "own" your technology. The hosting piece doesn't have to be part of your ownership of CiviCRM, but many of the same arguments apply.
For example - from a privacy perspective, whoever is hosting your site has the power and sometimes the legal responsibility to share your data with law enforcement of their host country. We know that they have done this and that they are also barred from telling you when they do. From a practical point of view - a host will often determine specific parameters of their hosting that can't be changed (php versions, available libraries, etc.). Even if it's working now, there's no certainty that it will in a few years. For me as a developer, having more control and responsibility for the site host allows me to be much more efficient - I waste less time on sorting out bugs that arise due to unexpected upstream changes, or difficult-to-diagnose performance issues.
So the question comes down to: is it worth it? To some extent, that's a matter of opinion, but like many opinions out there, it tends to get oversimplified into banal justifications (e.g. the argument of economies of scale, or the inevitable triumph of the biggest).
My conclusion is, yes. And I also think that the only way to make it sustainable is to use the same approach that we have with our CiviCRM code base, i.e. with a thriving, community that sees the value in sharing.
And finally, as promised, here's some code:
More on that on my next post.