More and more often, I speak to online service providers talking about a 2.0 version of their successful 1.0 application. Lots of good ideas, but often based on lessons learned from the 1.0 version and the underlying Cloud platform. It is time to take a broader look at the possibilities of Cloud platforms and step into a hot air balloon for a moment: will you join us?
Because what exactly is such a Cloud platform? A lot of successful applications that have been around for a while have been developed on a server-based platform: an application server that communicates with a database and gets data from a file server. The application is written with the platform in mind. Questions such as ‘what database and how does that fit within the frontend and backend of the application?’ are thought of from the context of the 1.0 Cloud platform. Yes, scaling can of course be done by organising more web servers, a bigger database. But is this really the best platform for the 2.0 version?
Looking at how startups, without the 1.0 experience (and success), develop an application, it is completely different: the Cloud platform becomes part of the application. This process of complete integration ensures that deployment is automated, but also completely removes the dependency on a traditional setup (such as the one often seen with a web server, database server and file server). The infrastructure is co-written into the application development code in the form of a pipeline. A very big, but at the same time interesting difference.
Compare this concept to maintaining a pet; the pet is brought in as a young animal, raised for many years and has become part of the family. When it gets sick, it has a big impact. In almost all cases, you see that the 1.0 application also uses a pet like this: a fully configured server, patched and monitored and, above all, crucial to the application.
What you actually want is for that dependence on the pet to decrease, and therefore for the pet to become a piece of livestock. The replaceability is a lot greater than the pet raised for years. By dealing with the Cloud platform as a farm of livestock, you can ensure robustness, scalability and simplicity: failure of a server, or service does not interrupt the availability of the application; after all, the integrated application development pipeline takes care of component recovery.
Within all the Cloud platforms available today, we at Fundaments always look for the best components to suit such a 1.0 to 2.0 challenge. Whether it's a static application, or just an application with erratic user behaviour; all scenarios must be able to be accommodated. Looking at public cloud, I see a lot of great opportunities there with a speed of innovation no one can compete with: Amazon Webservices, for instance, already has more than 1,200 services that can support all kinds of application components.
But developments on containerisation with e.g. Kubernetes are also moving very quickly: not surprising of course, as developers no longer want to be dependent on correctly configuring a traditional server platform (all those pets). However, the key to success does lie in selecting and integrating these kinds of techniques correctly. As easy as it may seem to briefly pull a service from the public Cloud, be sure to also consider the design implications, especially coming from the 1.0 Cloud platform world.
And flying even higher with the hot air balloon, you actually want to make sure the platform works for you in an application. From high altitude, that cattle looks like a colony of ants, and that's what you want: a colony that is indestructible; whether dozens or hundreds of ants perish for whatever reason, or a colony is flooded with water; they survive. This is also what the Cloud platform is supposed to do for you. This is also the ultimate goal that I pursue when we take our customers through the transformation of their very valuable application.