4 min read
Incremental and Evolutionary Architecture - Allen Holub

What sorts of Architectures allow for incremental changes.

We develop code incrementally, based on a fast inspect loop. We write code, then we inspect the code, and validate it’s correctness, both in logical and requirements. Then we repeat this process and this is how software is born. Small changes at a time leading to an evolved solution. This includes feedback from customers.

A big fan of the Lean Startup, start Minimal Viable Product. Many have construed MVP to mean V1. It’s not, it’s to implement a single feature that one of your customers find useful and then you cut that in half, and then you cut it in half again and deploy that. If it takes longer than a week or two, it’s too big.

Characteristic of Incremental Architecture

  • Event Driven
  • Modular
    • You should be able to throwout the system and reimplement and it should not impact the system. An event driven system is about as decoupled as you’re going to get. The publisher doesn’t know the listener nor should they.

When you’re design the system, the names of the system are the names of the domain.

Bounded Context is a must have. There must be scoped area’s in the system. There maybe one or ten.

When there is a change in the domain, then you know exactly where to get in the code to make the change. It’s important to have a one to one mapping between the code and the domain.

Allen does a lot of Event Mapping and Event Storming with sticky notes.

The Architecture Position
Allen believes that teams should be self organizing and an architect is contrary to that idea.

Architecture is a skill, not a job title. If it is a job title, then it’s someone who has more skill than anyone else.

For an Architect to function the Architect has to educate the teams on how to do architecture, otherwise, there is too much work for one person to complete. In a sense, they turn everyone into an architect.

The first important thing an Architect does is to educate. The second important thing they do is they align, to give coherence across the organization as a whole. Architects are not telling people how to implement. That’s the teams decision.

Allen is a fan of Spotify’s crosscutting guild model.

Architecture isn’t one person coming up with one perfect architecture model that’s going to work for everyone in the entire organization.

Neil – It’s important to have open communication on a team including a junior developer. Neil thinks that it’s important to let a Junior Developer correct you. This sends a message that you are ok with letting people correct you.

If you haven’t read any System Thinking, you should.

  • No one piece can function alone to satisfy the goals of the system.
  • If you modify a system, if you change one thing, everything has to change.

Neil – One of the important aspects of Architecture is architecture is where everything meets. You have to understand the code, the impact on the business and how these piece work together to make the best decision.

The sooner you can create software and prove an idea, the faster it is to get to production , and cheaper the software is.

Where are not Netflix, we have 5 customers, we don’t need NetFlix’s scalability. Architect accordingly.

Developers are drawn to complexity like moths to a flame. Complexity is what all projects are fighting and it shouldn’t be introduced prematurely to unneededly, because it’ll only cost you time and energy.