(10 min)
(10 min)
(20 min)
(30 min)
(10 min)
(30 min)
(10 min)
You will be happy if ...
2 minutes
The use case
https://github.com/jcraftsman/evolutionary-design-workshop
Our agents have a high risk job.
They provide us with pictures of the documents we need.
Finding a document by searching for a text it contains is huge amount
of work.
In the intelligence center,
we already have a search engine.
What we need is a tool that analyses the pictures of the documents and notifies the search engine.
public class AbstractCommonManagerImpl extends AbstractCommonManager {
We should take time to go fast (or to just keep moving)
How did we get here?
Software is alive
How to make it evolve in a natural way
There will be refactoring!
SIMPLICITY
FLEXIBILITY
YAGNI
FLEXIBILITY
All non-trivial abstractions, to some degree, are leaky. (*)
Abstraction vs Details
(*)The law of leaky abstractions by Joel Spolsky
DRY
FLEXIBILITY
Removing accidental duplication may lead to accidental complexity and break flexibility
Beware of accidental duplication
Focus on the problem not the solution
General principles
Specific instances
Deductive
Inductive
Theory
Confirmation
Deductive
Inductive
Hypothesis
Observation
Observation
Theory
Pattern
Hypothesis
10 minutes
Good for ...
Disadvantages
Not suitable for ...
Advantages
source: http://blog.adrianbolboaca.ro
Example of incremental design decisions:
source: http://blog.adrianbolboaca.ro
You don't have to choose
You can use them both
Architecture is a term that lots of people
try to define...
There are two common elements:1 - The highest-level breakdown of a system
into its parts2 - Decisions that are hard to change ...
Decisions that developers wish they could get right early...
The subjectivity comes in here as well because, if you find something that is easier to change than you once thought, then it's no longer architectural ...
Source: Patterns of Enterprise Application Architectue by Martin Fowler
Forget about the big upfront design, but don't forget to think about design
Evolutionary design is about the decisions that emerge from a living code in order to evolve it and keep mastering its complexity