Skip to content

Emergent design – JFokus day 3

Neal Ford’s talk on emergent design at JFokus 2011 day 3.

It is not a binary state between being agile and being water fallish. It is a gilding scale.

Find abstractions and patterns. Not GoF patterns, but idiomatic patterns. There is a difference between technical patterns and domain patterns. Technical patterns are for instance validation, security, transactions. Domain patterns are business rules, shared functionality.

Martin Fowler described architecture as ”the thing that is difficult to change in the system.” And it should be as little as possible of that (but not less).

Why is emergent design difficult?

Complexity. Remove accidental, keep essential.

Technical debt. Business moves faster than software. Therefore there is a risk for accumulating technical debt, and you need to negotiate repayment. One way of doing that is to show the technical debt, by combining cyclomatic complexity and Afferent coupling

Rampant genericness. By adding genericness to your system, e.g.  trying to make frameworks, you add to the complexity of the system by increasing the code base. This adds to your accidental complexity. You pay for the genericness from the second you check it in, but you don’t get anything back until you utilize it.

Things that help you with emergent design.

TDD – Not only Test Driven Development, but also Test Driven Design. Think Clean code, small methods, methods that only do one thing.


  • Collective ownership of the code
  • Remove broken windows
  • Note that the IDE only refactor by making a new method with lots of parameters. This is not always the best way.

Posted in Architecture.

Tagged with , , , .

0 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

Some HTML is OK

or, reply to this post via trackback.