As we navigate the ever-changing landscape of software development, it's essential to reflect on the past and identify trends that can inform our decisions for the future. In this article, we'll explore how reducing complexity and increasing automation have become key drivers of progress in application design.
One of the most significant shifts in software development has been the transition from customer-agnostic solutions to those focused on delivering value to customers. This change is reflected in the rise of cloud-based services, open-source libraries, and standardized operating systems. The shift towards simplifying infrastructure complexity over time has also led to a decrease in surface area, making it easier for developers to focus on creating innovative applications.
The current landscape is vastly different from just a few years ago. Today, 99.9% of developers rarely give a moment's thought to how compilers or operating systems work, and most IT solutions are now offered by SaaS vendors as multi-tenanted subscription services delivered from the public cloud. This has led to an interesting question: Where are today's trendlines – increasing automation, abstraction, standardization (de facto as well as de jure), and "serverlessness" – headed? What can they tell us about what a typical business software application will look like in the future?
The answer lies in embracing the philosophy of "less is more." Progress in application design has been driven by reducing surface area and shifting complexity to the application's environment. This trend is illustrated in Figure 1, which shows how complexity has shifted out of applications over time through surface area reduction.
4 Ways to Reduce Surface Area
#1 Removal
The most powerful way to reduce surface area is when an entire area is permanently removed from a developer's purview. The shift from on-prem data centers to the public cloud is a great example of removal. By leveraging cloud services, developers can condense complex problems into paying for actual use, rather than buying peak capacity.
#2 Reduction through Standardization
Where things can't be taken away entirely, focusing on standardizing undifferentiated "commodity" pieces allows developers to concentrate on what truly differentiates their customer outcomes. Open-source libraries, standardized operating systems, and Docker images are all examples of how the community has worked hard to avoid spurious differences that consume precious resources.
#3 Paradigm Shifts that Simplify Complex Tasks
In some cases, reducing surface area requires a corresponding change in how an application itself is constructed. This can lead to "epochs" of software development, such as the shift from mainframes to client/server, which eventually created the server-based Unix era. Each paradigm shift relies on compatible modifications in how software is developed, organized, and deployed.
#4 Automation
The rise of automation tools like GitOps, Netlify, and SaaS-style deployment tools has radically changed how developers approach committing, testing, and deploying code. Twenty years ago, new software projects often started by creating custom tools to perform these functions; now, they are standard mechanisms that require minimal thought about how they work.
By embracing the "less is more" philosophy and reducing surface area through removal, standardization, paradigm shifts, and automation, we can create a future where developers can focus on delivering innovative applications that drive value for customers.