There is a growing trend toward building high-abstraction systems for cloud-native software in the ever-evolving development landscape. Examples in the market include DAPR, Fermyon, Fly and Kalix. These systems, which focus primarily on microservices- and container-based models running on Kubernetes, are alluring for developers that want to tackle building mission-critical cloud-native applications, as they promise to simplify complex processes, increase productivity and enhance maintainability. However, many developers need help letting go of the direct control they used to have over the underlying technologies within the abstraction layer.
Remember, as developers, we already rely on many layers of abstraction, even for non-cloud-native software. An example is high-level programming languages that abstract programming in assembly languages and, at the lowest level, binary programming. Binary programmers were initially opposed to assembly language programming, and assembly language programmers were initially opposed to higher-level languages like C and FORTRAN. The same is true today; cloud-native developers are concerned with losing control of databases and messaging systems.
In software engineering, abstraction is a strategy for managing complexity. And cloud-native software development has introduced new levels of complexity, particularly with platforms such as Kubernetes. Abstraction for cloud-native software involves encapsulating complex systems and operations into simpler, higher-level interfaces. This abstraction hides the intricate details of lower-level technologies or processes, enabling developers to work more efficiently and effectively.
Examples of abstracted layers include but are not limited to the management of servers, operating systems and databases. Additionally, other potential layers that are abstracted include network infrastructure, middleware and runtime environments, deployment and scaling.
The Fear of Losing Control
Despite the numerous advantages, developers often resist using high-abstraction software systems due to the perceived loss of control over the underlying technologies. These fears are valid, to some extent. High abstraction systems, by their nature, place a barrier between the developer and the nitty-gritty details of the technology stack. This concealment can lead to less direct control and potentially obscure problems at lower levels.
Yet, this fear stems more from a perceived threat than a real one. A well-designed high-abstraction platform doesn’t necessarily mean a loss of control but rather a shift in focus. It reframes the developers’ attention from the gritty details to a more significant concern—solving the problem. By hiding unnecessary complexities, abstraction allows developers to focus more on the business logic and the user experience.
Balancing Abstraction and Control
The trick to overcoming the fear of abstraction lies in striking the right balance. More abstraction can lead to issues with performance, flexibility and debuggability. However, the right level of abstraction can exponentially increase productivity and code quality.
Choosing the right level of abstraction depends on the nature of the project, the team’s expertise and the specific requirements of the software system. It’s about making informed decisions, understanding the tradeoffs and realizing that abstraction doesn’t imply losing control but directing it more productively.
Overcoming the Fear
It may seem obvious, but developers can overcome the fear of using high-abstraction cloud-native software systems by simply learning more about them. Understanding how abstraction works, its limitations and its benefits can help developers feel more comfortable with these systems.
Moreover, robust high abstraction systems come with relevant debugging and performance monitoring tools that bridge the gap between high-level code and low-level operations. This means developers can still ‘peek under the hood’ when necessary, maintaining control while reaping the benefits of abstraction.
The journey toward embracing high abstraction in cloud-native software systems requires a shift in developers’ mindsets. It necessitates seeing abstraction not as a loss of control but as a powerful tool to create more efficient, maintainable and readable software systems. As with any tool, the key is understanding when and how to use it most effectively. The mastery of abstraction can be a potent weapon in the arsenal of a modern cloud-native developer.
This article originally appeared on cloudnativenow.com