Software Stacks: Layers of Organization and Logic
Just last week I had a great conversation with the VP Engineering at Puppet, Rahul Singh, about the Software Stack and how that has evolved in recent years due to advancements such as Cloud Computing and Software as a Service.
Many years ago, when we were both beginning our careers in software development, the concept of the software stack was in its infancy. Indeed, there were so few choices that the differences were by and large at the OS level – which dictated the few remaining choices in the upper levels of the stack.
These were the days of BSD (Unix) and C, DOS, a handful of database technologies, Smalltalk, mainframes and of course a variety of technical software languages (fortran, lisp, cobol, basic). Then ARPA net grew up and became the internet, and systems started communicating via TCP/IP and people started to adopt web browsers. The Boom was on.
Software quickly became more complicated and more dependent on other pieces; the operating systems upon which they ran, the databases they interacted with, the system services and API’s called to perform aspects of the applications function. The presentation layers became more robust and elegant, while the business logic layer extended its’ reach by established connections to other business applications and shared services. The software stack has become an important consideration when designing a new business application – choosing the right set of technologies that reach the customer in a meaning way is a key aspect in delivering a successful software application today. Not only does the application have to do something meaningful, but it has to do it in the form that is most comfortable and natural for the end user – the customer. Building for the web is quite different than building for a tablet, an iPhone or Android device; creating a web service, micro service, or system service – all have different technology choices and impact choices available at other layers of the stack.
Through all this complexity the software industry has navigated a logical path and created an organization of software technologies so that the software architect can carefully design the application infrastructure and component pieces such that an enterprise application can be conceived of and built. Understanding the software stack and how to deploy business applications in the real world has been Rahuls’ mission and focus for his current tenure at Puppet and indeed while working to build what is now knows as AWS (Amazon Web Services).