Skip to main content
Blog

JavaOne 2014 – Day 4 – Principles of Evolutionary Architecture

By 6 oktober 2014januari 30th, 2017No Comments

Architecture in combination with agile is my one my main interest and I therefore had to attend the “Principles of evolutionary architecture” session by Rebecca Parsons. I expected much from this presentation and she did live up to it.

In the early days of software development, businesses typically would have 5 year plans. Nowadays, this is unthinkable. Business lifetime is shortening and when not keeping up you will miss your window of fame.
There are two kinds of architecture in response to change:

  1. Evolutionary
  2. Emergent

With evolutionary architecture you have a clear goal and you think about “how do I get there”. Emergent is more ad hoc and the notion of what is good is vague. These have similarities, but they are on a different scale.
The principles of evolutionary architecture:

  • Last responsible moment
  • Architect and develop for evolvability
  • Postel’s law
  • Architect for testability
  • Conway’s law

Last responsible moment

Delay your decisions as long as you can. In this way, you maximize the information you have to be able to make a better decision (not based on guesswork). This way you will minimize technical debt (any drag in your development process).
Most important is to know what your drivers are and prioritize decisions accordingly.

Architect (Design) and develop for evolvability

You have to have a sensible breakdown of the functionality considering life cycle and ownership. Ease of change is a key factor in this. You could ask: “In what part of the system, when we change something do you get nervous?” to expose any vulnerabilities.
Coupling is an attention point and should be appropriate. The low coupling solution is not always the best solution.
When doing agile some developers often then to skip documentation. This is not advisable. A better approach would be to have lightweight (easy to change and maintain) tooling and documentation.

In the development process you have to focus on ease of change using software quality metrics. Using these metrics is a continuous effort in which you have to focus on hotspots and trends.

Postel’s law

Postel’s law says to be conservative in what you send and liberal in what you receive. By being conservative in exposing contracts, you delay the actual decision of the contract. After exposing it, it will become harder to change. When a contract must be broken use version changes.
By being liberal in what you receive, you can change the software more easily. Therefore only validate what you actually need. Think about what the consequences are of changing your mind and act on it (for example adding extra layers).

Architect (Design) for testability

Tests help the business understand the product. Aiming towards testability produces a well-architected system. Use technologies for their specific purpose and be careful to introduce complexities that threaten the testability. Create your tests at many levels.

Conway’s law

Conway’s law says that organizations design systems reflecting their communication structures. Broken communication implies complex integration. Silos often result in broken communication. If you don’t want your product to look like your organization, change your organization.

Techniques

Certain techniques can be used to optimize evolvability like Database refactoring (break into small changes), Continuous delivery (integrate as soon as possible, automate your environment, deployment should be boring), choreography (decentralizing your architecture, distributes complexity), Contract testing (integration point, maximizes parallel independent work, document assumptions)