Characteristics of a Sustainable Application
Once, someone asked Dr. Werner Vogels, CTO of Amazon.com, how we should think differently about software development. He replied, “Your software needs to be operated for decades longer than it took you to write it. Keep that in mind.”
As you have learned in this book, a serverless application has many characteristics— security, scalability, and high availability, among other things. But the three most important aspects of a sustainable serverless application are:
- Modularity
- Extensibility
- Observability
These characteristics are vital to the architecture, design, development, and operation of serverless applications, as described in the following sections.
Modularity
The concept of modularity in software is not new. Engineers have been thinking in modules for decades, grouping program code as packages, modules, and libraries in a way that promotes code sharing and building layered applications. Chapter 3 dis‐ cussed how to bring modularity into serverless applications and build microservices as set pieces.
To build modular serverless applications, you must think in terms of:
- Domains, subdomains, and bounded contexts, as explained in Chapter 2
- Independent and loosely coupled smaller microservices, as you saw in Chapter 3
The rewards system shown in Figure 3-34 (see “Applying set piece thinking in server‐ less development” on page 121) is an example of a modular event-driven application.
Extensibility
As highlighted in Chapter 1, incremental and iterative development is a winning way of building modern applications, where teams start small with the minimum viable product and evolve it into a maximum value product. To evolve a product, you need to extend it from its current state into a feature-enriched future state. Extensibility is thus a vital characteristic of a sustainable serverless application. Chapter 3 demonstrated how asynchronous communication and event-driven com‐ puting enable microservices to remain loosely coupled and thus make a serverless application extendable; Figure 3-35 depicts an extended version of the modular application architecture shown in Figure 3-34.