Simplicity
-
Upload
agile-lietuva -
Category
Technology
-
view
484 -
download
2
description
Transcript of Simplicity
simplicity.demystified
osvaldas grigas@ogrigas | [email protected]
inspired by
DanNorth
RichHickey
Edsger Dijkstra (1980)
Computing's central challenge,"How not to make a mess of it",
has not been met.
what "simple" ain’t ...
familiar / convenient
small / concise
beautiful / elegant
"nothing is more simple than a single giant button"
from the agile principles
“Simplicity -- the art of maximizing the amount of work not done -- is essential.”
from the agile principles
“Simplicity -- the art of maximizing the amount of work not done -- is essential.”
YAGNI
from the agile principles
“Simplicity -- the art of maximizing the amount of work not done -- is essential.”
YAGNI
from the agile principles
“Harness change for thecustomer's competitive advantage.”
Russ Miles
Complexity is the silent killer of delivering the right software,or change, at the right time.
from the agile principles
“Technical excellence andgood design enhances agility.”
Martin Fowler
Design is there to enable you tokeep changing the software easily.
from the agile principles
“Developers should maintain aconstant pace indefinitely.”
Rich Hickey
Once your software is of a certain size, complexity is gonna
dominate what you can do.
ultimate definition of simplicity
ultimate definition of simplicity
simple == not(complex)
complexity.demystified
osvaldas grigas@ogrigas | [email protected]
mixed responsibilities
dependencies& coupling
state& side effects
mental strain
essentialcomplexity
incidental
complexity
essentialcomplexity
essentialcomplexity
your code
essentialcomplexity
your codelib
rarie
s
frameworks&
essentialcomplexity
your codelib
rarie
s
frameworks&languageruntime&
complexity brought by
your code
refactoring
toolscode
generatorsauto-import
supported by:
complexity brought by
libraries
supported by:
gem mavennuget
complexity brought by
frameworks
ORM
IoC
WEB
the law of leaky abstractions
complexity brought by
the programming language
inheritance-based design
unconstrained mutability
lack of expressivity
making things simple
TDD, BDD& refactoring
modularity
use valuesand pure functions
minimize direct dependencies
introduce indirection
follow the law of demeter
single responsibility principle& composition
wget -qO- http://c2.com/ | tr -cs '[:alpha:]' '\n' | sort | uniq
be ignorant and oblivious
“We choose Camel over Spring-Integrationbecause the fluent API is really nice.”
choose libraries wisely
accepted answer
prefer libraries over frameworks
step out of your comfort zone