JobMethods Blog

(Blog portion published in LinkedIn Pulse on May 20, 2016)

Jack of All Trades, Master of Some

For the past several years, I have been particularly intrigued by one rapidly transforming role of software engineers in the Web application space; the role often called “Full Stack Engineer” or “Full Stack Developer”.To share my thoughts, first I will explore the term “Stack”, and then share my conjecture on the origins of this role. I would love to hear your thoughts on this.

Stack

A stack essentially refers to the set of technology components used to build, deploy & execute an application (product, programming language, framework, library, tool, infrastructure, etc.). Someone probably coined the term “stack” while putting together a diagram to document the set of technology components used in an application. A very generic way to classify an application is on the basis of the core technology, e.g. J2EE stack or a .NET stack. Another popular way uses acronyms, e.g. LAMP and MEAN. The LAMP stack refers to components Linux, Apache, MySQL and PHP, while the JavaScript based MEAN stack refers to MongoDB, Express.js, Angular.js and Node.js components. It is not necessary that an application follow an archetypal model and often over time, an application becomes too complex correspond to just one stack.

The Birth of a Full Stack Developer

Not so long ago, life for web application developers was sufficiently challenging and fulfilling and the roles distinct and classified as “UI-developer”, “front-end engineer”, “server-side engineer”, “core engineer”,  “backend-end engineer”, “database engineer”, etc. The web application developer of today are also not isolated to develop consumer applications. Most enterprise and business applications today run in the Cloud and need application developers to build applications on a scalable web application architecture. Therefore they are a lot more web application developers than ever before. Some of these developers are full stack developers. Full stack developers are unique in that they are capable of developing an application across the breadth of the entire stack (client, web, middle-tiers, database, system, cloud).Here are some observations and reasons that I think may have given birth to the full stack developer role:

  1. User experience (UX) has become critical and is delivered by the entire stack: Along with the necessary attention towards application functionality, in the sea of myriad applications and the short window of opportunity to attract & retain users, UX has increasingly become a critical differentiator for any application with a user interface. Nowadays we spend a significant effort to build intuitive applications with “awesome” user experience to engage, captivate and evoke an emotion in the user. UI is however not the only source to contribute towards a great UX. Examples of “back-end” activities that improve UX significantly are effective search results, fast page response times, the right response, email and notification at the right time to the right user. User-experience knows no bounds in the application stack and a full-stack developer uses a global system view to improve any parts of the stack necessary to delight the user/ customer.
  2. The Cloud is always on and needs expeditious trouble-shooting & defect fixing: Software in the Cloud is always up (catering to world-wide users in different time-zones) and single defect can adversely affect the entire set of users. High priority or high severity defects in the software or infrastructure services need prompt resolution, leaving very little time for diagnosis and investigation. Developers with knowledge of the entire full stack are more likely to be successful in promptly determining root-causes and recommending fixes.
  3. End-to-end responsibility of the application or service: When a full stack developer is completely responsible for a part or an entire application, they pay an undivided attention towards the required goals and results to make it successful.
  4. Improved developer productivity from easy-to-access and mature technology: Higher productivity allows a full stack developer to do more than his/her predecessors in the same amount of time. The following are some reasons developers are more effective than ever before:
    1. Maturity in client technologies: Cross-browser support, stability and supporting libraries both on client and server have made JavaScript an essential language for web development. Rich client-side frameworks provide powerful functionality with less developer code (e.g. Bootstrap, AngularJS), saving time in development, testing and debugging.
    2. Building blocks readily available in open-source: The thriving open-source community continues to build and evolve ready-to-use software that works reliably thus saving the time to build or make purchase decisions. Some examples of popular open-source are AngularJS, Apache httpd, Tomcat, Solr, Hadoop, Kafka and MySQL.
    3. Blueprints of scalable architecture readily available: Web developers share successful architectural blueprints (e.g. stateless web apps, RESTful API design and use of JSON across tiers to transfer and store data) from the biggest software deployments and continue to evolve the best practices for scalable architectures. The rest of the developers leverage these lessons and insights thus saving time and being more successful.
  5. Frugal start-ups: When circumstances dictate, one or very few developers have created very popular software and applications with little help. One frugal way is for a developer to work on the entire stack independently. By leveraging open-source software, highly automated Cloud services and matured software frameworks and tools, this feat is possible.

Given the breadth of current technology, continuous innovation and evolution that gives birth to new technology, it is impossible for anyone to master the entire stack. With training and practice, a full-stack developer can likely be an expert in multiple areas. Thus jack of all trades, master of some!