Author: Tom Petrocelli
Executive Summary
Key Stakeholders: Chief Information Officers, Chief Technical Officers, Vice Presidents of IT, VPs of Platform Engineering, DevOps Evangelists, Platform Engineers, Release Managers, Automation Architects, Software Developers, Software Testers, Security Engineers, Software Engineering Directors and Managers, IT directors, DevOps professionals
Why It Matters: The IT industry has been undergoing a radical rethinking of how we architect application platforms. Much of the attention has been drawn to the back-end platforms built on containers and the Kubernetes ecosystem. Less has been said of the front-end environment, even though it too is undergoing a redesign.
Top Takeaway: Jamstack dovetails nicely into IT emerging architectures. It points to a future cloud-native web architecture based on Jamstack design patterns in the frontend, backed by microservices implemented as transient serverless functions and more permanent Kubernetes-based services.
No one would say that the Spring 2020 conference season was in any way usual. With COVID-19 spreading throughout the world, the vast majority of conferences became “online”, “digital”, or “virtual.” At the tail end of the season was Microsoft Build Online 2020 (May 19, 2020) and Jamstack Conf 2020 (May 27, 2020) a week later. At both conferences, there was discussion of a web application architecture called Jamstack. Indeed, it was the focus of the later conference.
The IT industry has been undergoing a radical rethinking of how we architect application platforms. Much of the attention has been drawn to the back-end platforms built on containers and the Kubernetes ecosystem. Less has been said of the front-end environment, even though it too is undergoing a redesign. This is where Jamstack comes in.
Unlike containers and Kubernetes, Jamstack is not a technology. Instead, it is a design pattern that is implemented in technology. The philosophy behind Jamstack is to isolate the web developer from the back-end systems that support their applications, creating more efficient developers. An additional goal is to increase the scalability of web apps. In this regard, the market drivers are similar to those of the Kubernetes and Serverless communities – creating applications that are easier to build and maintain while increasing scalability.
The “JAM” in Jamstack is an acronym for Javascript, APIs, and Markup. This suggests not only a basket of technologies to be used in web applications. It points to a philosophy of simplification of the web app design that makes for more efficient development and operations. With Jamstack, it is expected that web applications are single-page apps, sometimes called Static Site apps, comprised mostly of JavaScript that then uses APIs to access back-end services (typically microservices) while using markup languages such as HTML and CSS to render the UI.
This is a model that most React framework developers will recognize; Load one page that contains the code and UI. After that, the application is expected to access additional data through RESTFul API calls in response to user actions and render them in HTML and CSS. This contrasts with the way many dynamic web sites are designed. That model calls for back-end systems generate HTML that are then sent to the browser as a new page. There are also applications built using the older AJAX design pattern or technology such as ASP.NET or Java Server Pages, where pages are generated in the back-end and sent to the browser which then uses JavaScript to access more data as needed. Both of these architectures require web developers to be “full-stack developers”, which means that the developer has to understand the entire platform from database to web front-end to create a web application. This makes development slower and less efficient while requiring client browsers to constantly download large pages, sometimes over large distances.
The evolution and growth of Jamstack was on display not only at the Jamstack Conference, as one would expect, but also at Microsoft Build. Part of the Azure developer presentation talked about the Jamstack architecture and how it is implemented as a service called Azure Static Web Apps. Even more interesting was the relationship with serverless. Microsoft presented a web applications architecture that was comprised of the Azure Static Web Apps service for the front-end and use of Azure Serverless Functions to implement scalable microservices as the back-end.
There are other ways the Jamstack community is looking to achieve its goals, especially reliability. Of particular interest is driving more functionality into the edge nodes. Most web applications use a content delivery network, or CDN, which caches static portions of a web site geographically closer to users. Without a CDN, all web requests would have to drag big assets such as graphics from their point of origin to the user’s browser. The amount of latency would make the web experience intolerable to many users. The Jamstack community is now looking to place some common processing in the front end CDN edge nodes, to handle common situations instead of processing them at a distant service.
While Jamstack has a lot of advantages, some of the vendor messaging can be a little confusing. For example, the idea that a web developer doesn’t have to be a full-stack developer is true. Someone, however, has to provide that back-end platform for the web developer to access. So, on an organizational level, a full stack is required for Jamstack to be meaningful. If an organization is only building apps using cloud services, this may be the case. But the majority of organizations don’t fit this description. Ultimately, creating a distinction between a web developer and platform developer is an artificial distinction. Code is code.
Ultimately, Jamstack dovetails nicely into IT emerging architectures. It points to a future cloud-native web architecture based on Jamstack design patterns in the frontend, backed by microservices implemented as transient serverless functions and more permanent Kubernetes-based services. This is the melding of three emerging architectures into one whole design that provides for easier development, maintenance, reliability, and scalability.