Agile Software Development
In Theory and Practice
Johannes Brodwall
Copyright 2004 – Johannes [email protected]
Slide 2
Who am I?
Copyright 2004 – Johannes [email protected]
Slide 3
Johannes Brodwall
Copyright 2004 – Johannes [email protected]
Slide 4
Board member, smidig.no
http://smidig.no/forum/
Copyright 2004 – Johannes [email protected]
Slide 5
Organizer,
Oslo XP Meetup
Every first Monday of the month at Scuba bar (Grünerløkka)
http://xp.meetup.com/13/
Copyright 2004 – Johannes [email protected]
Slide 6
Lead Software Architect
Copyright 2004 – Johannes [email protected]
Slide 7
Sole developer
Small chat solution
Copyright 2004 – Johannes [email protected]
Slide 8
Who are you?
Copyright 2004 – Johannes [email protected]
Slide 9
Who works on ”a large project”?
Copyright 2004 – Johannes [email protected]
Slide 10
Who works on (what you feel is) ”a large project”?
Copyright 2004 – Johannes [email protected]
Slide 11
Who release software infrequently?
Copyright 2004 – Johannes [email protected]
Slide 12
(0)
Copyright 2004 – Johannes [email protected]
Slide 13
Intro
Copyright 2004 – Johannes [email protected]
Slide 14
Course in an agile method
Extreme programming
Scrum
Lean Software Development
DSDM
Copyright 2004 – Johannes [email protected]
Slide 15
Course in an agile method
Extreme programming
Scrum
Lean Software Development
DSDM
Copyright 2004 – Johannes [email protected]
Slide 16
History lesson
SnowbirdAgile Manifesto
We value
Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan
Copyright 2004 – Johannes [email protected]
Slide 17
History lesson
SnowbirdAgile Manifesto
We value
Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan
Copyright 2004 – Johannes [email protected]
Slide 18
Specific for Perl
Test::MoreDevel::Refactor
JiftyPerlActor
Tinderbox
Copyright 2004 – Johannes [email protected]
Slide 19
Specific for Perl
Test::MoreDevel::Refactor
JiftyPerlActor
Tinderbox
Copyright 2004 – Johannes [email protected]
Slide 20
Experience report on using agile techniques in small and large environments
Continuous Integration
Relentless Testing
Frequent releasesCollective Ownership
Refactoring
Copyright 2004 – Johannes [email protected]
Slide 21
Experience report on using agile techniques in small and large environments
Continuous Integration
Relentless Testing
Frequent releasesCollective Ownership
Refactoring
Copyright 2004 – Johannes [email protected]
Slide 22
(1)
Copyright 2004 – Johannes [email protected]
Slide 23
The Problem
Copyright 2004 – Johannes [email protected]
Slide 24
Projects in crisis
Copyright 2004 – Johannes [email protected]
Slide 25
Failure to deliver value
Copyright 2004 – Johannes [email protected]
Slide 26
Barry Boehm: ”Software Engineering Economics”, 1984
Copyright 2004 – Johannes [email protected]
Slide 27
”An infant engineering discipline”
Copyright 2004 – Johannes [email protected]
Slide 28
(2)
Copyright 2004 – Johannes [email protected]
Slide 29
The Response
Copyright 2004 – Johannes [email protected]
Slide 30
”
”Make sure the reqs are right before you do anything”
Copyright 2004 – Johannes [email protected]
Slide 31
”
”Make sure nobody changes the requirements”
Copyright 2004 – Johannes [email protected]
Slide 32
”
”Try Harder!”
Copyright 2004 – Johannes [email protected]
Slide 33
BRUF
Copyright 2004 – Johannes [email protected]
Slide 34
”
BigRequirementsUpFront
Copyright 2004 – Johannes [email protected]
Slide 35
(Picture: RUP analyst hard at work)
Copyright 2004 – Johannes [email protected]
Slide 36
Trying to stuff everything into my small head!
It hurts!
Copyright 2004 – Johannes [email protected]
Slide 37
And then the world changes!
Copyright 2004 – Johannes [email protected]
Slide 38
When I guessed wrong...
Copyright 2004 – Johannes [email protected]
Slide 39
... my work is wasted
Copyright 2004 – Johannes [email protected]
Slide 40
... it is even harder to change the system
Copyright 2004 – Johannes [email protected]
Slide 41
Speculation breeds complexity
Copyright 2004 – Johannes [email protected]
Slide 42
Complexity breeds complexity
Copyright 2004 – Johannes [email protected]
Slide 43
And again....
.. my crystal ball
is broken!!!
Copyright 2004 – Johannes [email protected]
Slide 44
So I get a poorly divided, rigid design
Copyright 2004 – Johannes [email protected]
Slide 45
Formality:
Copyright 2004 – Johannes [email protected]
Slide 46
make decision ”correctly”
Copyright 2004 – Johannes [email protected]
Slide 47
The right decision
Copyright 2004 – Johannes [email protected]
Slide 48
Change control mechanism
Copyright 2004 – Johannes [email protected]
Slide 49
Just-in-case requirement
(”free” in the beginning)
Copyright 2004 – Johannes [email protected]
Slide 50
Failure to deliver value
Copyright 2004 – Johannes [email protected]
Slide 51
These ”solutions” are part of the problem
Copyright 2004 – Johannes [email protected]
Slide 52
Fixed-price, fixed-scope contract bids
Copyright 2004 – Johannes [email protected]
Slide 53
(3)
Copyright 2004 – Johannes [email protected]
Slide 54
The Alternative
Copyright 2004 – Johannes [email protected]
Slide 55
Instead of just-in-case...
Copyright 2004 – Johannes [email protected]
Slide 56
... just-in-time
Copyright 2004 – Johannes [email protected]
Slide 57
Boehm was wrong
Copyright 2004 – Johannes [email protected]
Slide 58
(or at least Boehm’s phasist readers)
Copyright 2004 – Johannes [email protected]
Slide 59
Copyright 2004 – Johannes [email protected]
Slide 60
Copyright 2004 – Johannes [email protected]
Slide 61
Harness the Power of Myopia
Copyright 2004 – Johannes [email protected]
Slide 62
1... 2... 3...
Copyright 2004 – Johannes [email protected]
Slide 63
1. Focus on short term
Copyright 2004 – Johannes [email protected]
Slide 64
Requirements for current feature
Copyright 2004 – Johannes [email protected]
Slide 65
Design for current requirement
Copyright 2004 – Johannes [email protected]
Slide 66
2. Deliver something
Copyright 2004 – Johannes [email protected]
Slide 67
Ideal: Deliver working, tested features as often as you safely can
Copyright 2004 – Johannes [email protected]
Slide 68
3. Get feedback
Copyright 2004 – Johannes [email protected]
Slide 69
(talk to people!)
Copyright 2004 – Johannes [email protected]
Slide 70
4. Adapt
Copyright 2004 – Johannes [email protected]
Slide 71
Get Feedback
Avoid Speculation
Copyright 2004 – Johannes [email protected]
Slide 72
The cost of speculation
Copyright 2004 – Johannes [email protected]
Slide 73
Myopic requirements
Copyright 2004 – Johannes [email protected]
Slide 74
Analyse the current release
Copyright 2004 – Johannes [email protected]
Slide 75
Myopic development
Copyright 2004 – Johannes [email protected]
Slide 76
Design for the current problem
Copyright 2004 – Johannes [email protected]
Slide 77
Myopic programming
Copyright 2004 – Johannes [email protected]
Slide 78
Write a test – make it pass – Remove duplication
Copyright 2004 – Johannes [email protected]
Slide 79
Copyright 2004 – Johannes [email protected]
Slide 80
(4)
Copyright 2004 – Johannes [email protected]
Slide 81
Changing your minds
Copyright 2004 – Johannes [email protected]
Slide 82
... is not always easy
Copyright 2004 – Johannes [email protected]
Slide 83
... is not always safe
Copyright 2004 – Johannes [email protected]
Slide 84
(painted into a corner)
Copyright 2004 – Johannes [email protected]
Slide 85
(Experience: Sustainable myopia varies with org.)
Copyright 2004 – Johannes [email protected]
Slide 86
Agile: Enabling safe myopia
Copyright 2004 – Johannes [email protected]
Slide 87
Not technology
Copyright 2004 – Johannes [email protected]
Slide 88
Practices, discipline, communication
Copyright 2004 – Johannes [email protected]
Slide 89
1. Prioritize requirements with a backlog
Copyright 2004 – Johannes [email protected]
Slide 90
Prioritize requirements with a backlog
Copyright 2004 – Johannes [email protected]
Slide 91
(NB: Software maintainance)
Copyright 2004 – Johannes [email protected]
Slide 92
Too fully take advantage: Close communication with
stakeholders
Copyright 2004 – Johannes [email protected]
Slide 93
2. Simple design: Goal and means
Copyright 2004 – Johannes [email protected]
Slide 94
Avoid designs that make change expensive:
Don’t Repeat Yourself!
Copyright 2004 – Johannes [email protected]
Slide 95
For example: Jifty
Copyright 2004 – Johannes [email protected]
Slide 96
Solve the current problem only
Copyright 2004 – Johannes [email protected]
Slide 97
3. Automated regression suite
Copyright 2004 – Johannes [email protected]
Slide 98
Test::Simple
Test::More (Schwern)
Copyright 2004 – Johannes [email protected]
Slide 99
4. Refactor all the time
Copyright 2004 – Johannes [email protected]
Slide 100
Def: Refactor“To transform a program while
preserving its behavior.”
Copyright 2004 – Johannes [email protected]
Slide 101
Refactor to simple design
Copyright 2004 – Johannes [email protected]
Slide 102
5. Continuous Integration
Copyright 2004 – Johannes [email protected]
Slide 103
Copyright 2004 – Johannes [email protected]
Slide 104
6. Collective Ownership
Copyright 2004 – Johannes [email protected]
Slide 105
It’s not: ”Your code and mine code”
Copyright 2004 – Johannes [email protected]
Slide 106
Refactor everything
Copyright 2004 – Johannes [email protected]
Slide 107
Continous integration keeps you safe
Copyright 2004 – Johannes [email protected]
Slide 108
(5)
Copyright 2004 – Johannes [email protected]
Slide 109
Fine tuning your agile process
Copyright 2004 – Johannes [email protected]
Slide 110
Deliveries
Copyright 2004 – Johannes [email protected]
Slide 111
Large organization Less frequent releasesHigh risk Less frequent releases
Copyright 2004 – Johannes [email protected]
Slide 112
Staged (internal delivery)
Copyright 2004 – Johannes [email protected]
Slide 113
Breaking it up
Copyright 2004 – Johannes [email protected]
Slide 114
”The smallest meaningful task”
Copyright 2004 – Johannes [email protected]
Slide 115
Small releases: Penalizes half-work
Copyright 2004 – Johannes [email protected]
Slide 116
One click deployment
Copyright 2004 – Johannes [email protected]
Slide 117
Extreme: Deploy every feature
Copyright 2004 – Johannes [email protected]
Slide 118
Mastering Testing
Copyright 2004 – Johannes [email protected]
Slide 119
”Only test what you want to work”
-- Ron Jeffries
Copyright 2004 – Johannes [email protected]
Slide 120
Many types of test
Acceptance test
Databases
User interfaces
Integration tests
Unit test
Performance/Load/Stress
Copyright 2004 – Johannes [email protected]
Slide 121
All can be automated
Copyright 2004 – Johannes [email protected]
Slide 122
Greatest value: Acceptance tests
Copyright 2004 – Johannes [email protected]
Slide 123
Easiest to implement: Unit tests
Copyright 2004 – Johannes [email protected]
Slide 124
Starting unit testing:
Copyright 2004 – Johannes [email protected]
Slide 125
Don’t
Copyright 2004 – Johannes [email protected]
Slide 126
Try to test everything in the beginning
Copyright 2004 – Johannes [email protected]
Slide 127
Do:
Copyright 2004 – Johannes [email protected]
Slide 128
Focus on ”bang for the buck”
Copyright 2004 – Johannes [email protected]
Slide 129
Good: New features
Copyright 2004 – Johannes [email protected]
Slide 130
Better: Bugs
Copyright 2004 – Johannes [email protected]
Slide 131
Even better: Bug ridden code
Copyright 2004 – Johannes [email protected]
Slide 132
Smoke test
Def: ”A rudimentary form of testing; power is applied and the tester checks for sparks,
smoke, or other dramatic signs of fundamental failure”
Copyright 2004 – Johannes [email protected]
Slide 133
Perfecting unit tests
Copyright 2004 – Johannes [email protected]
Slide 134
Remember: Test is a noun!
Copyright 2004 – Johannes [email protected]
Slide 135
Tests as specification
Copyright 2004 – Johannes [email protected]
Slide 136
Write tests first
Copyright 2004 – Johannes [email protected]
Slide 137
Consider test brittleness
Copyright 2004 – Johannes [email protected]
Slide 138
Consider unit test running time
Copyright 2004 – Johannes [email protected]
Slide 139
Implementing Continuous Integation
Copyright 2004 – Johannes [email protected]
Slide 140
Avoid sliding back
Copyright 2004 – Johannes [email protected]
Slide 141
Not useful in small projects (1-3 people?)
Copyright 2004 – Johannes [email protected]
Slide 142
Can at least scale to 50 people
Copyright 2004 – Johannes [email protected]
Slide 143
Be prepared to pay the price
Copyright 2004 – Johannes [email protected]
Slide 144
Continuous Integration will become critical to you org.
Copyright 2004 – Johannes [email protected]
Slide 145
Has given us the ability to do enormous refactorings
Copyright 2004 – Johannes [email protected]
Slide 146
Has enabled us to treat 500 KLOC as one code base
Copyright 2004 – Johannes [email protected]
Slide 147
Communication
Copyright 2004 – Johannes [email protected]
Slide 148
What is the biggest cost driver?
Copyright 2004 – Johannes [email protected]
Slide 149
Misunderstandings
Copyright 2004 – Johannes [email protected]
Slide 150
Misunderstood business needs
Copyright 2004 – Johannes [email protected]
Slide 151
Misunderstood interface to integrate with
Copyright 2004 – Johannes [email protected]
Slide 152
Misunderstanding your neighbours code
Copyright 2004 – Johannes [email protected]
Slide 153
Not knowing that you neighbour is doing the same
as you!
Copyright 2004 – Johannes [email protected]
Slide 154
Techniques:
Copyright 2004 – Johannes [email protected]
Slide 155
Keep your customer close
Copyright 2004 – Johannes [email protected]
Slide 156
Obvious, difficult(But if the customer won’t be close, how
important is the project, really?)
Copyright 2004 – Johannes [email protected]
Slide 157
Pair programming
Copyright 2004 – Johannes [email protected]
Slide 158
Fun, difficult, rewarding, exhaustingHard to sustain (but great if you
can!)
Copyright 2004 – Johannes [email protected]
Slide 159
Stand up meetings
Copyright 2004 – Johannes [email protected]
Slide 160
• ”What did you achieve since yesterday?”• ”What do you plan on achiving today?”
• ”What is standing in your way?”
Copyright 2004 – Johannes [email protected]
Slide 161
Keep it short!
Copyright 2004 – Johannes [email protected]
Slide 162
Copyright 2004 – Johannes [email protected]
Slide 163
Keep it short!
Copyright 2004 – Johannes [email protected]
Slide 164
Fun, easy, rewardingExhausting (if you don’t do it right!)
Copyright 2004 – Johannes [email protected]
Slide 165
Reflection workshops
Copyright 2004 – Johannes [email protected]
Slide 166
Copyright 2004 – Johannes [email protected]
Slide 167
Fun, easy, rewardingValue decreases with time
Copyright 2004 – Johannes [email protected]
Slide 168
(6)
Copyright 2004 – Johannes [email protected]
Slide 169
Conclusion
Copyright 2004 – Johannes [email protected]
Slide 170
Phasist development...
Copyright 2004 – Johannes [email protected]
Slide 171
Forces us to guessForces us to consider a too
much at the same time
Copyright 2004 – Johannes [email protected]
Slide 172
... leads to suffering
Copyright 2004 – Johannes [email protected]
Slide 173
(and our poor reputation as professionals)
Copyright 2004 – Johannes [email protected]
Slide 174
When I speculate, I’m usually wrong
Copyright 2004 – Johannes [email protected]
Slide 175
So instead...
Copyright 2004 – Johannes [email protected]
Slide 176
1. Short-term decisions
Copyright 2004 – Johannes [email protected]
Slide 177
2. Deliver something
Copyright 2004 – Johannes [email protected]
Slide 178
3. Get feedback
Copyright 2004 – Johannes [email protected]
Slide 179
4. Adapt
Copyright 2004 – Johannes [email protected]
Slide 180
(requires practices and tricks)
Copyright 2004 – Johannes [email protected]
Slide 181
Summary of tricks
Copyright 2004 – Johannes [email protected]
Slide 182
Prioritize with a backlog
Copyright 2004 – Johannes [email protected]
Slide 183
Keep in touch with stand-up meetings
Copyright 2004 – Johannes [email protected]
Slide 184
Just-in-time planning and requirements
Copyright 2004 – Johannes [email protected]
Slide 185
Simple design
Copyright 2004 – Johannes [email protected]
Slide 186
Test only what you want to work
Copyright 2004 – Johannes [email protected]
Slide 187
Refactor mercilessly
Copyright 2004 – Johannes [email protected]
Slide 188
Continuous Integration
Copyright 2004 – Johannes [email protected]
Slide 189
Parting words
Copyright 2004 – Johannes [email protected]
Slide 190
Software isn’t a canned good
Copyright 2004 – Johannes [email protected]
Slide 191
It rots during storage
Copyright 2004 – Johannes [email protected]
Slide 192
Good luck with your agile project!
Copyright 2004 – Johannes [email protected]
Slide 193
Thank you for listening
http://smidig.no/forum/http://xp.meetup.com/13/