• January 07, 2016

Why is Software So Hard To Write?

During first years of my career, in the beginning of 90's, we wrote single-purpose programs. A single piece of software was responsible for presenting a user interface, domain problem logic and saving data, commonly to some file. So we had single layer programs.

Quite quickly programmers all over noted that maybe the representation logic should be separated from the domain logic and data logic. Behold, client-server -applications have begun to appear. Now, the single server provided services for multiple clients. Wow, we now could share data via the server. Now we had two layers.

Almost at the same time, some wise people saw that the data logic should also be separated from domain logic. This separation created a mighty new industry sector to information technology. It is called the database-layer. Now we had three layers.

Most software projects were content with three layers for over a decade. So-called 3rd generation software tools begun to appear by small and large companies. They packaged the whole solution as a single company dependent tool, which bound the software totally to this single platform provider.

What happened next? Well, the browser was invented. At first, it was not considered a viable choice to replace the representation logic part of the "thick client" (you may call these "Apps"). However, quite soon someone invented a piece of software that would generate the representation on the server and deliver the content to the browser. Those are called frameworks. What do you think this separation created? Yes, a new layer. Now there were four layers.

Almost immediately after first frameworks begun to appear programmers noted that it was becoming quite difficult to master all four layers. Those people identified a new problem. Database SQL queries were difficult to write and hard to understand from a programmer's point of view. So, those people decided to address this dilemma by creating an internal layer between domain logic and database. This new layer was called ORM - Object Relation Mapping. Now there were five layers.

At the same time pieces of software grew quite large. But no single, even extremely large program (often called as ERP), can solve all of the problems. Programmers decided the something was needed to integrate different smaller programs together. So what happened?  Of course, they invented another layer for this purpose. This integration layer is sometimes called ESB - Enterprise Service Bus. Now there were six layers.

As time went by someone nicely added Javascript to browsers. JS was soon discovered to be a great tool to dynamically change previously server generated representation directly at the browser. So, some of the programming logic could now be distributed to user's machines. This was great, since the load generated on a server by presentation could now be at least marginally reduced. Yeah, this separation of server side and client side code obviously created a new layer to programmer's stack of tools. Now there were seven layers.

Of course, the visual representation of simple HTML was limited to a degree. The mighty W3C consortium decided to bring in something new to deal with this problem - CSS appeared. CSS is a great tool, but it still created yet another layer to our software. Now there are eight layers! 

During all of my career - none of the layers have disappeared - nothing has ever become simpler. No living programmer can claim to master all the layers on any large software anymore. New layers continue to appear as new tools are injected into our stack. 

THINK - eight or more layers to learn and master? 

So, happy hacking all the layers of the Liferay; the AngularJS; the Aurelia.io; the Spring - or any other framework of your taste. Do not be alarmed of the complexities, have an onion.

Jukka Keto
Technical Architect