Designing for evolutivity is about designing systems that can evolve and adapt over time.

David Woods

Name

Design for evolutivity

Statement

A scalable architecture is designed to accept incremental changes. Designing services that aim to cover all possible future scenarios is costly and time consuming. And, at the same time, it is difficult to clearly define long-term requirements in the initial phases of service design.

Rationale

  • Stay as close as possible to the business needs throughout the service life cycle (see Observe).
  • Remove the pressure of fear of failure.

Implications

  • Design systems so that they can be easily modified or replaced rather than being made future-proof at all costs.
  • Design with modularity in mind to avoid the risk of coupling between different business domains and allow for their parallel evolution.
  • Automate the deployment of new environments: e.g. as part of a care community, when establishing a new care centre.
  • Don’t make all the important decisions up front. Postpone them until they become relevant.
  • Avoid big bang adoption approaches.

Examples

Bad

When the Patient Management service was designed, it was imperative that it should cover the management of patients in internal medicine, surgery and geriatrics. The system resulting from this design hinders the evolution of the process for the geriatric domain, which now diverges from the other two. A constant work of realignment of the care processes between the different domains is therefore necessary. In order to simplify matters, the service group opted for an implementation of the care process that defines a common denominator between all the business areas. As this implementation is minimal, users turn to alternative solutions to meet their needs.

Good

The monolith of services, covering the care planning and care production domains, was out of step with the technology and business of its time, so the decision was taken to decommission it. Rather than simply rebuilding an entire system with better technology and some minor functional changes, it was decided to decouple the monolith into several domains. As a result, a multitude of application services are gradually introduced to the user. Each of these services now evolves autonomously with the technologies best suited to cover the requirements.