Hard-Agile Effective Software Development in the 21st Century “Agile is for wimps” Hard-Agile Effective Software Development in the 21st Century Alistair Cockburn http://Alistair.Cockburn.us
Developing software. consists of People. making Ideas concrete Developing software consists of People making Ideas concrete in an Economic context
inventing, deciding, communicating, People inventing, deciding, communicating, Solving a problem they don't yet understand which keeps changing Creating a solution they don't yet understand Expressing ideas in languages they don’t understand which keep changing To an interpreter unforgiving of error Making decisions with limited resources and every choice has economic consequences
Software development is a Cooperative Game
Games have positions, moves, strategies Career Management Infinite Organization Survival Product Line Management Open-ended King-of-the-hill wrestling Poker Jazz music IT Systems Finite goal-directed Rock-Climbing Theater Journalism Exploration Software Development Swamp game Tennis Chess Competitive Cooperative
Two conflicting subgoals: Deliver this software Set up for the next game Three moves: Invent Communicate Decide and the situations (almost) never repeat!
Adapt to your situation C6 C20 C40 C100 D6 D20 D40 D100 E6 E20 E40 E100 L6 L20 L40 L100 Project Classification Scale: Comfort Essential moneys Life Discretionary Criticality X X Number of people coordinated 1 - 6 - 20 - 40 - 100
Face-to-face is the most effective - Try Video 2 people at whiteboard (Courtesy of Thoughtworks, inc.) 2 people on phone (No Question-Answer) Communication Effectiveness Videotape (Question-and-Answer) 2 people on chat Paper Richness of communication channel
Distance is expensive 12 people: = $100,000 / yr penalty Kim Pat Programming in pairs Kim Pat 12 people: = $100,000 / yr penalty 12 people = $300,000 / yr penalty Kim Pat “Managing the Flow of Technology” “Distance Matters”
People issues determine a project’s speed Can they easily detect something needs attention? (Good at Looking Around) Will they care enough to do something about it? (Pride-in-work; Amicability) Can they effectively pass along the information? (Proximity; face-to-face)
Software development is a Craft
Craft teaches us to pay attention to our skills and to the medium Major crafts: 1 Deciding what to build 2 Managing (people and projects) 3 Modeling 4 Designing the external view 5 Large-scale design (architecting) 6 Fine-scale design (programming) 7 Validating the work
People learn skills in 3 stages Shu: Learn a technique Ha: Collect techniques Ri: Invent / blend techniques
Use Lean Processes
Software = manufacturing if Inventory = Decisions! I wish they’d decide what style they want! I wish they’d decide on the UI design already! A decision UI Designers Every line of code is a decision Users & Sponsors I wish they’d decide what functions they want! Programmers I wish they’d think a bit more carefully before coding! Business Analysts Testers
You can (almost) do away with one loop: buggy code Programmers Testers (from Stefan Roock’s )
From Lean Manufacturing: watch your queues Enough Users & Sponsors UI Designer A few Business Analysts Lots of Programmers Single, solitary Database designer Enough Users & Sponsors Many Business Analysts Not enough Programmers Some Testers Users & Sponsors absent UI Designers Business Analysts some Programmers Database designers Tester
From Lean Manufacturing: aim for continuous flow # of design decisions Testers 100 lines of code show up for testing How long this line of code / screen / use case / decision sits in the testing queue Decisions arriving Decisions being validated or broken time
Design is Knowledge Acquisition
Waterfall is a late-learning strategy Growth of knowledge with big-bang integration cost Knowledge comes at the “moment of truth”: final integration. Delivers nearly no knowledge (or risk reduction) time
We can pay to learn early in the project Growth of knowledge with early, continuous integration Delivers knowledge (risk reduction) Development sequence indifferent (with respect to knowledge) cost time
Develop for business value once risks are down Business value growing Knowledge growing (risk reduction) cost Growth of business value time
“Trim the Tail”: Deliver by value or date Trim to deliver on-time (or early) Delay to get more or better
In the 21st century, software engineering will use craft, cooperative game & lean principles Craft developing skills in a medium shu - ha - ri Cooperative game of invention and communication teamwork, communication, strategies Lean processes (“unvalidated decisions = inventory”) small queues, cross-trained people, varyied processes Design as knowledge acquisition early integration pay to learn trim the tail
http://Alistair.Cockburn.us