A software architecture is evolutionary, when it supports guided incremental change across multiple dimensions, for example, functional requirements, security, legality, etc.
Traditionally, organisations strive for upfront software architecture that can handle future requirements seamlessly. One of the drivers for this approach is the high cost of changing the architecture at a later stage. In today’s highly competitive environment, business is under extreme pressure to adapt to market conditions quickly in order to survive. This translates into ever-changing business requirements and faster time to market. In such a volatile business landscape, along with the rapid introduction of new technology platforms, predictability of any software architecture has become a nightmare.
To tackle this problem, the industry has started shifting its focus from predictability to evolvability, that is, instead of trying to determine everything upfront, arrange to evolve when environments change.
The power of cloud
Cloud computing has moved to “Slope of Enlightenment” in the Gartner Hype Cycle. This means more and more businesses around the world are building or migrating software solutions to the cloud. It has become more relevant to discuss evolutionary architecture on the cloud.
Cloud's core offerings -- resource sharing, pay as you use, on-demand infrastructure, elasticity, technology commoditisation, ability to provide network access anywhere, self-service, multiple deployment models (public/private/hybrid) and various service models (IaaS, PaaS, SaaS, or infrastructure as a service, platform as a service, software as a service) -- have made evolutionary architecture a reality.
To begin the evolutionary architecture journey on cloud, cloud-native applications can make use of cloud's capability without any additional effort. On-premises applications need to migrate to the cloud to get the same benefits. Organisations can make use of any of the three well-known strategies to migrate to the cloud: Re-host, re-platform or re-architect.
Cloud computing powering evolutionary architecture
- Resource optimisation
While discovering the requirements and market for a new product, it is sometimes necessary to build sacrificial architecture (that is, throwaway architecture) to quickly deliver a minimum viable product (MVP) as part of evolutionary software building strategy. Cloud environments enable developers to test and build the initial version of software with minimal resources.
However, sacrificial architecture should be pursued with some degree of caution, even if market demand tempts to build something really fast. It is important to keep in mind that building a sacrificial architecture costs money and it may be worthwhile to discuss the pros and cons of building a throwaway architecture.
- On-demand infrastructure
Almost all real-world software solutions demand performance fitness to be retained when the solution architecture evolves over a period of time. Typically, compliance management and reporting system platform architecture needs to change continuously to support new functional and non-functional features requested by regulators. While doing so, the development team also needs to make sure that all performance Service-Level Agreements are being met, along with ever-changing incoming and sitting load profile.
Cloud makes life easier for the architects by giving them the ability to provide look-alike environments within a short period of time for performance assurance. Development teams release the performance environments as soon as the performance certification is completed. Faster on-demand environment provisioning and de-commissioning result in the ability to verify the fitness of an evolving software architecture, shorter time to market, and substantial environment cost-saving. In an on-premises environment, it is practically impossible to quickly provide and release environments.
Cloud infrastructure's ability to quickly provide itself enables the solution architects to delay decision-making and building various components of a software system. Just-in-time software design decision-making and building is often desirable to allow time to accommodate for any business or technology changes, which will make upfront decisions invalid.
- Technology commoditisation
Cloud has commoditised cutting-edge technologies, which were exclusively available to researchers in the past. This process has enabled development teams to migrate their existing software solutions to newer technology platforms with ease.
- Network access anywhere
The success of evolutionary architecture depends on the development team's ability to do incremental changes enabled by Continuous Integration (CI) and Continuous Delivery (CD). Cloud provides easy access to a common development infrastructure, Integrated Development Environment, central code repository and central CI/CD pipeline. This enables globally distributed teams across multiple time zones to deliver software incrementally.
Cloud enables development teams to control the infrastructure and technology platform as a self-service offering. This opens the door for much faster sandboxing and the development of prototypes without any dependency on the corporate infrastructure team.
Where lies the challenge?
Cloud’s self-service ability enables development teams to provide infrastructure at ease and at will. However, freedom comes with responsibility. Uncontrolled and unmonitored provision of infrastructure will lead to overrun in costs and maintenance efforts. Further, while cloud helps to delay architectural and design decisions, be cognisant of the fact that some of the decisions need to be made upfront.
Right strategy is the key to success
Organisations need to embrace evolutionary architecture to succeed in the current dynamic business and technology environment. A mindset change from "just-in-case software architecture" to "just-in-time software architecture" is warranted. Some recommend strategies to build evolutionary architectures on the cloud, in addition to using cloud's core offerings:
- Provide only the required infrastructure. Cloud elasticity can help make any further change in the future.
- Embrace DevOps. Automate the process of provisioning, de-commissioning, and, switching on/off of infrastructure.
- Carry out proofs-of-concepts for newer technologies before making a choice.
- Choice of open source software will avoid vendor lock-in and bring in evolvability.
- Set up notifications for over-usage of resources and cost limit breaches.
- Choice of PaaS and SaaS over IaaS inherently enables software architectures to evolve easily.
What lies ahead?
Evolutionary architecture is a natural choice when the development teams discover the requirement during the lifecycle of a software. Product companies embrace this philosophy easily as they build software features driven by market demand instead of a predefined scope.
In case of the service industry, this mindset is not obvious. Typically, the development team hands over the software to the support team when a pre-defined scope is delivered without the opportunity to evolve the software architecture. However, with the advent of DevOps, both product and service industry will start adopting evolutionary architecture as a core delivery strategy.
The cloud's ability to provide easier, faster and cheaper access to infrastructure and technology platforms enables the development teams to build and maintain architecture, which can evolve with ever-demanding functional and non-functional requirements.
Siddhartha Shankar Dey is a senior manager of technology with the solutions team at Publicis.Sapient, India. He plays the role of a senior architect for Microsoft Azure cloud-based platforms, OpenBank.ai and OpenEnergy.ai. Views are personal.