Why Agile?

Software projects fail

  • Internal government and corporate projects
  • Failed: never finished
  • Challenged: seriously over-budget or short of goals

The Waterfall Approach

  • Get all requirements, then design, then implement, then ...
  • Even though the original paper said this "is risky and invites failure"...
  • ...it became the model for development for decades

Agile

  • Design, implement, test, in very short build-measure-learn cycles
  • Assumes many requirements are unknown initially, and others will change

Agile vs Waterfall

  • Still many challenged projects, but...
  • Agile 3x more likely to succeed
  • Waterfall 2x more like to fail

Agile Ideas

A Starting List

Agile Is Not About Speed


No

Yes

Common Agile Techniques

  • Acceptance tests
  • Backlogs
  • Burnup / burndown charts
  • Continuous deployment
  • Continuous integration
  • Daily stand-up
  • DTSTTCPW
  • Five Whys
  • Four-panel Storyboards
  • Information Radiators
  • Iterations
  • Mood charts
  • Pairing
  • Parking lot
  • Plan B
  • Polling
  • Pulling tasks
  • Refactoring
  • Retrospectives
  • Scenarios
  • Story points
  • Swarming
  • Taskboards
  • TDD
  • Technical spike
  • Timebox
  • User stories
  • Velocity
  • Vertical slices
  • YAGNI
For more info on any term, web search "agile" + term

Anti-Agile Techniques

  • BDUF
  • Gantt Chart thinking
  • Solo coding
  • Silos
  • Waterfall
  • Pushing task assignments

Agile ≠ Practices

  • Doing one or more agile practices does not make you agile.
  • The last lines of The Agile Samurai:
    Whenever you are wondering whether you are doing things the "agile way," instead ask yourself two questions:
    • Are we delivering something of value every week?
    • Are we striving to continuously improve?
    If you can answer yes to both those questions, you're being agile.

Underlying Agile Themes

  • Delivering value early
  • Defining by story
  • Timeboxing
  • Deferring commitment
  • Slicing
  • Transparency
  • Testability
  • Minimizing work in progress
  • Minimizing waiting
  • Minimizing waste

Deliver value early

  • If it's important, do it first

Define by story

  • Scenarios
    • 4-panel storyboard
    • scenario canvas
    • scenario-based user testing
    • scenario-based acceptance tests
  • User stories define
    • user-centered functionality
    • useful unit of progress

Timebox

  • Set the deadline first, then set the goals
  • Deadlines never slip -- goals get reduced or dropped
  • Shorter is better

Defer commitment

Slice

Make it visible

  • Hide nothing from client or team
    • Including progress (or lack of it), roadblocks, mistakes, ignorance, ...
  • If it matters, make it visible

Make it testable

  • The ideal requirement is executable acceptance tests
  • SMART goals
    • Not "faster" but "20% lower median response time"
    • Not "more intuitive" but "15% fewer measured user errors"

Minimize work in progress

  • One task 100% done is better than 4 items 25% done

Minimize waste

Readings

<More to come!>

Thanks to Hakim El Hattab for RevealJS