Agile Software Development
Strawman Waterfall ("Plan-driven")
Step in strict order through
- Requirements (what?)
- Design (how?)
- Implementation (do it)
- QA (check it)
Avoid going backwards at all costs
"Waterfall" because the steps flow down like water
Strawman Waterfall Is No Good
Not real-world usable or used much
Requirements take too long to "perfect" and then are defective anyway
Design takes too long to "get right" and then is wrong anyway
Not enough time for coding, the only important part of development
</s>
Mistakes in requirements and design lead to expensive rework
Incremental Iterative Waterfall
Incremental: Build the core of the project, then build an expanded version, etc
Iterative: Work backward as needed, checking as you go. QA tasks should be planned and completed as early as possible
Pretty good in real world
Agile: Cut Twice, Measure Once
Idea: Reduce "overhead" — "activity that doesn't contribute directly to rapid product delivery"
- Careful specification
- In-cycle and post-cycle QA
- "Documentation"
Obviously a parody, but…
"Almost all software products are now developed with an agile approach"?
The Agile Manifesto
We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to 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
That is, while there is value in the items on the right, we value the items on the left more.
(Signed by folks including Ward Cunningham)
The Agile Promise
Less ceremony = more time grinding code
Shorter cycles = better risk management
Finer granularity = better direction and scheduling
Integrated QA = less rework and better product
A Cynic's View Of Agile
Pretty ill-defined ("Scrumbut")
Easy excuse to skimp the unpleasant parts of software dev
Works best in easy cases where reqs and design are not as important e.g. web / mobile
Check out Table 2.2 in the text. What important phase of engineering is just flat out left out? (Hing: Design)
When executed carefully, Scrum™ looks a lot like incremental iterative waterfall
Customers can get hypothetical fast
Good luck with this in actual contract situations