In 2011, the developers at PaaS operator Heroku developed a set of rules that applications should follow if they want to be optimally prepared for operation in the cloud: the Twelve-Factor App methodology. It is a set of 12 guidelines that summarizes collected best practices and knowledge from years of operating their own platform.
The goals are to standardize communication with the operating system and to make the cloud usable as a platform. At the same time, this can also achieve quite a bit of scalability. They published the Twelve-Factor App rules at https://12factor.net.
Rules designed by a cloud provider for applications to work particularly well on cloud platforms? As a developer of classic on-premise solutions, you don’t have to worry about that, do you?
You can disagree with that quite specifically: With these rules, experienced developers got together and wrote down their shared experience. We are dealing here with distilled knowledge that takes an agnostic stance toward deployed technologies and hosting solutions. Rather, emphasis was placed on a higher altitude and general structure of the application architecture and approach to software development, so that this set of rules will not lose any of its validity in another ten years.
What do monoliths have to do with it?
Let’s face it: the classic on-premise application is a monolith, consists of one artifact and is rolled out on one, sometimes several servers and connected to the network via load balancer or reverse proxy. There is nothing wrong with this, as this approach has worked excellently for decades. The only difference to the cloud application is that the runtime environment of a monolith is often “hand-crafted”, i.e., often manually prepared in such a way that the application can be operated. This can then range from server configurations to specially set up firewall configurations to correctly mounted network drives. This exact configuration of the runtime environment is required by the application, otherwise it cannot run. Cloud applications, on the other hand, have to be much more encapsulated, as they may be executed tomorrow in a completely different data center or be started several times in parallel. In addition, they are often constructed from several different artifacts that are interconnected and rolled out independently of each other. But focusing on the essentials, cloud applications are constructed from multiple “monoliths”, so roughly speaking they are exactly the same thing. So do the factors thought of for cloud applications also apply without restriction to classic applications? Let’s take a look: