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 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 begun to appear. Now, single server provided services for multiple clients. Wow, we now could share data via 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 an piece of software that would generate the representation on the server and deliver the content to 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 programmers 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 server by presentation could now be at least marginally reduced. Yeah, this separation of server side and client side code obviously created an 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 to 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

Explore more posts
  • /blog+lifelong-learning-the-case-for-liferay-dxp-valamis
  • /blog/why-is-software-so-hard-to-write
Read more

Blog

Lifelong Learning - The Case for Liferay DXP & Valamis

  • /blog+personalized-learning-and-how-to-effectively-enhance-it-with-modern-technology
  • /blog/why-is-software-so-hard-to-write
Read more

Blog

Personalized learning and how to effectively enhance it with modern technology

  • /blog+jfokus-2017-developers-conference-in-stockholm
  • /blog/why-is-software-so-hard-to-write
Read more

Blog

Jfokus 2017 Developers Conference in Stockholm

I had the opportunity to visit Sweden's largest software developer conference Jfokus2017 on February 7-8. What was the conference like and what did I learn?