theory-part-2

1
Extreme Programming
&
New Theory of Programming
2
Recap
• Time is important
• Time estimation via features
• Quality: linear burn curve
3
XP
• The most famous agile methodology
• First XP project: Chrysler’s C3 system (1997)
• Notable figures: Kent Beck, Ron Jeffries
• Toyota production system
– Low latency: Unimplemented idea pile up (stock)
– Stop the line: Detect a Defect as soon as it is introduced
4
XP’s Basic Idea
• A fixed scope is a loose-loose situation
– Customer wants to maximize scope
– Developers want to minimize scope
• Instead, decide on fixed time intervals
– Periodically, re-negotiate scope
• The software is always working
– Short cycles of break-repair
• Customer can always provide feedback
• Project cannot take a wrong path for more than a week
5
The Scope Equation
Scope = Time x Quality
• You can only fix two of the variables:
– Scope, time => Quality
– Time, Quality => Scope
– Scope, Quality => Time
6
XP: Values
• Communication
• Simplicity
• Feedback
• Courage
• Respect
7
Simplicity
•
•
•
•
Passes all tests
Reveals intentions
No duplication/Locality
Minimal number of classes and methods
8
Locality
Structure the code so changes have local
consequences
9
Stories and Tasks
• Story: a short description of customer
visible functionality
• Task: Breakdown of a task into code-level
additions/changes
• It is often that story == task
10
Iteration Cycle
• Define scope (stories)
– Planning game
• For each story: Implement smallest delta needed
to realize the story
– “minimal thing that could possibly work” (YAGNI)
– May trigger refactoring
– Incremental steps
• Reflection – what have been doing?
– Everyone can see where the project is standing
– Customer can see what is still missing
– Learning: enhance the process
11
The Planning Game
• Negotiate scope with customer
– Customer: chooses stories
– Developers: What can be completed
• Output: a set of prioritized task
• Deciding what can be completed
– Esitmate task/story using points
– Esitmate task/story using hours
– Compare to previous week
* Total capacity: “Yesterday’s weather”: Same as last weeks
• Re-plan if completed early
12
XP: Practices
• Negotiated Scope Contract
• Incremental Design
• Shared Code + Single Code Base
• Intensive testing (easiest via TDD)
– Ten-Minute Build
– Continuous Integration
– Daily Deployment
* Customer can check the system on a daily basis => Can define the
scope for the next iteration
13
Iteration-0
• At each iteration, the program evolves
– By adding new functionality to the prev. iteration
• Q: What happens at the very first iteration?
• A: Develop a skeleton
– Most of the parts
– Degenerated functionality
14
Informative Workspace
• AKA:
– “Information Radiators”
– “talking walls”
• Continues Integration Status
• Burn up
• Stories: Waiting, In progress, Completed
15
Human Factor
• Pairs
• Standup meetings
• Sense of accomplishment
– Working software
– Constant customer feedback
• TDD keeps developer focused
• Working software
– No frustration over the weekend
• Stories on real index card
– Can be sorted, shuffled, grouped, passed, posted to a wall
– Many people say they are better than s/w tools
16
XP: Larger Scale
• Decompose into several smaller projects
– Along the “natural fracture lines”
• Release Planning
– Quarterly
– Choose themes – build a bank of stories
17
Technical Debt
• A quick and dirty solution induces a technical debt
– similar to a financial debt
– Incurs interest payments: Extra effort due to the dirty design
• We can choose to continue pay the interest
• Or, we can pay down the principal
– Refactor the dirty design into a clean one
• Sometimes, quick and dirty is sensible
– Taking a loan to take advantage of a business opportunity
– Going into technical debt to meet a deadline
18
Costs
• Past
– cost = Tdevelop
• Present
– cost = Tplan + Tdevelop + Ttest + Tdeploy
• Maintenance: Tplan includes time needed for understanding
the existing system
• XP
– I have tests -> Code can adapt -> No need for sophisticated
planning (other than choosing the iteration’s scope)
– Tplan: Low
• UML process
– I carefully planned -> I have good code -> no need to adapt
– (Planning requires foresight)
– Tplan: high
19
Axioms
• Super-linearity
• Instability
• Uncertainty
• Non-traceability
20
Instability
Existing code will need to change
•
•
Code should adapt
Testing
21
Uncertainty
The more accurate the specification, the
more error prone it is
• Precise planning of the full system is a
waste of time
• XP: Roughly plan the current iteration
22
Non-traceability
It is impossible to estimate the full
effect of a change
• Instead of inventing a design, discover it
as you go along
23
Super Linearity
A large task is relatively (and absolutely)
more expensive than a small task
24
Program Breakdown
• Two ways to decompose a software project
• Feature by feature
– Many small tasks
• Subsystem by subsystem
– Few large tasks
• Essentially same amount of code
• Feature by feature is less work
– If we accept the super-linearity axiom