Developers: want less overhead, want to focus on "real" work
Customers: want flexibility
Value delivery keeps up with cost
"Especially useful when schedule and resources are fixed, and mission is to provide maximum business value within those constraints"
Agile Manifesto (ca. 2001)
"Reduced emphasis on long-range predictability of features--especially of the combination of cost, schedule and features"
Variation of methodologies is really about the balance of up-front work vs. in-iteration
In-phase defect removal goal is always 100%, at least in theory
Aha: in addition to code defects, can also find requirements defects, architecture/design defects... leaving major testing to end allows build-up of latent defects (all kinds), unexpected fix time
("Evolutionary Delivery" illustrated with arbitrary 25% balance, looks good for us)
Packaged methodologies
XP: developer focused; abandoned more often than retained
Scrum: workflow/management focused; retained more often than abandoned
Few projects use all the practices of a given method; claim of "synergy" among practices is invalid
Useful practices
- Short release cycles (1-4 weeks): does not have to be externally to the customer; virtually always valuable
- Rolling-wave planning: long-term (2-12 months); detailed (30-60 days)
- Timebox development: commit to delivering fixed set of functionality in given timeframe; high morale, visible progress; need a rest period or different activity between sprints
- Empowered, small, cross-functional teams: include all stakeholders needed to make binding decisions
- Active management (coach, Scrum Master): "Theory Y" style; remove barriers to good work
- Coding standards
- Frequent integration & test: daily build and smoke test (no point building if don't also test that build is OK); note that you don't have to deliver new functionality every day, nor even check code in every day
- Automated regression test (TDD): virtually always a good practice with new development, problematic for existing/legacy systems
- Postmortem for each release
- Customer-provided acceptance tests: ongoing participation hard to sustain; customer testers don't always know meaningful comprehensive tests
- Daily stand-up meetings: a good idea that can go too far; less often, shorter, can be OK
- Simple design: don't oversimplify; must fully satisfy known requirements
- Test-first development: culture shift is difficult, high discipline required, worth the effort
- 40-hour work week: we really mean a sustainable pace of work
- System metaphor
- Onsite customer
- Collective code ownership
- Pair programming: good if used selectively
- Refactoring: prone to abuse
Overhyped, buzzwordy, has led to cynicism
Not the best solution for every company, just for many; there are still cases where sequential dev is the best fit
Best outcomes
Importance of short, iterative and/or incremental cycles
Die Waterfall die!
Check-and-balance against overly bureaucratic CMM
Reality check against "omniscience" of requirements, planning, design
In conclusion:
Steve McConnell is a great communicator. I feel like this stuff is really accessible to folks at all tech levels, which makes it helpful for me in taking the Gospel back to our stakeholders.
No comments:
Post a Comment