SaaS over PaaS over FaaS over IaaS
We prefer to own as little technology as possible, and that we prefer SaaS over FaaS over PaaS over managed hosting over on-premises.
Problem
A number of the products and solutions we choose require us to understand and own a lot of technology.
For example, when we use an application which we deploy to a linux server, such as Magento, we make ourselves responsible for some or all of the following technical problems:
- Configuring and executing deployments
- Applying security patches and software upgrades to the operating system and any services which are running on the server, such as MySQL, RabbitMQ, Redis, etc.
- Configuring and operating services like MySQL, RabbitMQ, Redis, etc.
- Applying security patches and software upgrades to the application
- Maintaining the source code of the application itself, which can be old, vast, complex, buggy and poorly documented
When we own more technology:
- Learning is spread thin
- Knowledge is spread thin
- Experience is spread thin
- Expertise is spread thin
- Training is spread thin
- Each feature requires more work on average, which hurts cycle time and value for money for our customers
- Either
- People in the team specialise, and each piece of work requires collaboration between a number of specialists who all have to be available at certain points in order for work to progress, complicating resource planning, or
- All the devs learn all the technology, explicitly or implicitly, making us less proficient in what we do, meaning we produce worse solutions more slowly for our customers
Ultimately, our customers get worse service and we are less profitable as a business.
Principle
Cloud technologies provide a way to commoditize many of the technical problems we need to solve. In other words, they allow us to pay experts to own the technology that we don't want to understand and own, so that we can focus on the technology that we do want to understand and own.
Ultimately, this provides a solution to each of the problems listed above. For example, if servers are abstracted away and managed by a group of experts at AWS or Google, our customers get access to better expertise than we have internally, and we get to focus on a smaller set of technologies, making us more focused and therefore more expert, streamlining our operations and providing better value to our customers.
Where two solutions are considered relatively equal according to more important measures, we prefer the approach which requires us to understand and own as little technology as possible. Specifically, we prefer solutions in the following order, from most preferred to least preferred:
- Software as a Service (HTTP APIs, e.g. Contentful, Optimizely)
- Functions as a Service (e.g. AWS Lambda, Google Cloud Functions)
- Platform as a Service (e.g. AWS Elastic Beanstalk, Google App Engine, Magento Cloud)
- Third party managed hosting (e.g. Rackspace managing EC2)
- Fully Space 48 managed hosting (e.g. EC2 but no Rackspace)
- On-premises (e.g. we or our customer has a server located in our/their office)