Software Architecture in a Cloud-Native World
What exactly do software architects do?
When you think of a software architect, you think of a primarily technical position within the development organization. In many people’s minds, a software architect is just a title applied to the most senior developers working on a project. After all, if you are the most experienced developer and the one that’s making most of the coding strategy decisions, you must be the architect. But a software architect is so much more than that.
A proper software architect within an appropriately structured development organization is truly the company’s technical leader. They influence the direction of the organization; they drive how the organization as a whole operates technically and how they ultimately build the software they are responsible for building.
Unlike a senior software developer, a good software architect spends very little time writing the code that is included in the product. Instead, they spend time strategizing how to build the application, why it’s created a certain way and what needs to be accomplished to make it so.
Hence, the software architect probably has the most critical role in building and operating a cloud-native application.
A cloud-native application is typically designed using microservices patterns. They are built so that individual services are relatively simple. However, the services depend on communications with external services to perform more complex operations.
A cloud-native application’s service structure is designed to make services simple to understand and construct. The intent is that a small development team can design, build, operate and maintain a service entirely on their own and easily understand the interworking of the service itself. By forcing a large application to be constructed of small building blocks, you allow for the building of larger and more complex applications. Since individual development teams’ responsibilities are limited to a single service (or at least a small number of services), there is less risk that a growing application can overwhelm individual development teams. And the reduction in cross-talk between teams prevents productivity declines common in monolithic apps when too many developers work in a single codebase.
Cloud-native services are designed to be simple. The system complexity comes from the quantity of services involved in making a fully functional application and the complexity in the interaction between the services.
This complexity falls outside the influence of the typical cloud-native development team. Each team understands its own services and the services they are directly connected to. But who understands how all the services work together, creating a large and complex application?
The software architect.
The Role of the Software Architect in Cloud-Native Systems
The oft-forgotten side effect of modern microservices architectures is that they don’t remove complexity from the system; they relocate that complexity. The complexity inherent in a system is still there, but it is removed from the realm of the individual software development teams owning and managing their services. Instead, it’s moved to the realm of the overall application coordinator and manager. It’s moved to the person(s) with the breadth of understanding to manage the complex interactions between hundreds of services.
It’s moved to the realm of the chief architect and their software architecture team.
Software architects are essential for all software systems. Still, their role is even more critical for cloud-native applications because they have a greater coordination responsibility in keeping the application, as a whole, operating smoothly.
- They manage the complexities of service interactions and the interconnection of multiple services.
- They manage the process of automated service deployments and the impact of vast numbers of minor releases common in cloud-native applications.
- They understand and coordinate cloud infrastructure requirements and how it works together to keep the application operating.
- They coordinate the management of containers and the container orchestration (e.g., through Kubernetes) that handles the inter-service connections and communications.
- They leverage dynamic resourcing inherent in the cloud and the automated creation and destruction of resources during automated scaling activities.
All of this means the role of the software architect is even more critical in the world of cloud-native applications than in monolithic applications.