24
“You should use iterative development only on projects that you want to succeed.” − Martin Fowler

“You should use iterative development only on projects that you want to succeed.” − Martin Fowler

Embed Size (px)

Citation preview

Page 1: “You should use iterative development only on projects that you want to succeed.” − Martin Fowler

“You should use iterative development only on projects that you want to succeed.”

− Martin Fowler

Page 2: “You should use iterative development only on projects that you want to succeed.” − Martin Fowler

Barry W. Boehm, “A Spiral Model of Software Development and Enhancement”. Computer

21(5), pp. 61-72, May 1988

Prof. Software engineering, Univ. Southern California

Worked at General Dynamics, Rand, TRW

Director of DARPA Information Science and Technology Office 1989-1992

Fellow of ACM, IEEE

COCOMO cost model, Spiral model, ...

Page 3: “You should use iterative development only on projects that you want to succeed.” − Martin Fowler

The Basic Force

Code-driven development “Code-and-fix” approach No design leads to poor code and frustrated clients

Document-driven development Waterfall model: each step produces a new document Requirement for fully developed documents unrealistic

Risk-driven development Support iterative development Decide how to proceed by reducing risk of failure

Page 4: “You should use iterative development only on projects that you want to succeed.” − Martin Fowler

The Spiral Model

Several rounds of development: system concept, requirements, design

In each round, mitigate risks Define objectives of part you are doing Map alternatives for implementation Recognize constraints on these alternatives Use prototyping, analysis, etc. to gain necessary

knowledge and reduce risk Plan the next step

At the end, perform sequence of coding, testing, and integration

What you actuallydo depends on

the biggestremaining risk

Page 5: “You should use iterative development only on projects that you want to succeed.” − Martin Fowler
Page 6: “You should use iterative development only on projects that you want to succeed.” − Martin Fowler

Using the Spiral

Start with hypothesis that something can be done

Round 1: concept and lifecycle plan Round 2: top level requirements Additional rounds: preliminary design, detailed

design May go back and redo previous round if needed If the evaluation at some stage shows that it

won't work then stop

Page 7: “You should use iterative development only on projects that you want to succeed.” − Martin Fowler

Risks

Developing software is fraught with uncertainty Uncertainty implies risk This needs to be quantified:

RiskExposure = Probability x Loss Can be used to chose between alternatives:

select the one where the expected exposure is smaller

Page 8: “You should use iterative development only on projects that you want to succeed.” − Martin Fowler

Risk Management

Riskmanagement

assessment

control

identification

analysis

prioritization

planning

resolution

monitoring

Page 9: “You should use iterative development only on projects that you want to succeed.” − Martin Fowler

Milestones

In waterfall model there are many milestones This is too rigid and sequential

But there are three really important ones: Life-cycle objectives Life-cycle architecture Initial operational capability

(these foreshadow the unified process)

Make sure weknow what we want

to do, and that itcan be done

Elaborate onhow things will

be builtPrepare for thetransition to theclient in terms ofsite and training

Page 10: “You should use iterative development only on projects that you want to succeed.” − Martin Fowler

Milestones

Milestones are not (necessarily) documents! Not a fully specified spec or architecture, but a

framework that will evolve For example, important interfaces must be specified

precisely, but user interfaces can be a prototype Articulation of feasibility and rationale are important Agreement of stakeholders is crucial

Page 11: “You should use iterative development only on projects that you want to succeed.” − Martin Fowler

Tom Gilb

Principles of Software Engineering Management

Addison Wesley, 1988

Born in the USAMoved to UK to studyFell in love, moved to NorwayWorked for IBM for 5 yearsIndependent consultant with son Kaiwww.gilb.com

Page 12: “You should use iterative development only on projects that you want to succeed.” − Martin Fowler

EVO

• Short for Evolutionary Delivery, chapters 7 and 13 in the book

• “Arguably the best systems engineering project management method. However, it is also probably the least known and the least discussed”

• Core idea:

Deliver value to stakeholders early and often

Page 13: “You should use iterative development only on projects that you want to succeed.” − Martin Fowler

EVO

• Iterative and incremental

• Deliver in small parts, instead of big bang at the end (note: not only develop in parts, but actually deliver)

Page 14: “You should use iterative development only on projects that you want to succeed.” − Martin Fowler
Page 15: “You should use iterative development only on projects that you want to succeed.” − Martin Fowler
Page 16: “You should use iterative development only on projects that you want to succeed.” − Martin Fowler

EVO

• Iterative and incremental

• Deliver in small parts, instead of big bang at the end (note: not only develop in parts, but actually deliver)

• Each iteration is like a waterfall

• Analysis, design, build, test

• Small scope and fast turnaround

• Each iteration must give customer some value

• Prioritize according to maximal value for minimal cost

• Don’t over-plan

Page 17: “You should use iterative development only on projects that you want to succeed.” − Martin Fowler

EVO

The Norwegian mountain survival principle:

You need never be ashamed of turning back in time

The juicy bits first principle:

If you deliver the juiciest bits of the project first, they will forgive cost and budget overruns

The mountain goat principle:

Take one step at a time up the slippery mountain, and make sure each hoof is on solid ground first

Page 18: “You should use iterative development only on projects that you want to succeed.” − Martin Fowler

Prioritization1. Divide functions into “urgently needed”, “needed

soon”, and “needed later”

2. Divide urgent functions into high/low political value and high/low economic value

3. Divide high-value functions into low/high implementation cost

4. Divide low-cost functions into fast implementation or slower implementation

5. Divide fast implementation into low/high risk of failure

6. Implement low-risk, fast, low-cost, high-value, urgent function

7. Repeat, monitoring and learning from mistakes

Page 19: “You should use iterative development only on projects that you want to succeed.” − Martin Fowler

Planning

• Need a general idea of where you want to go

• But not a detailed plan for the whole way

• inflexible

• Wasted effort

• Analogy of road trip from London to Rome

• At each step, plan only that step

Page 20: “You should use iterative development only on projects that you want to succeed.” − Martin Fowler

Contracts

• Conventionally pay for work

• Millions of dollars paid for work that led to failure

• No incentive to deliver working software

• “No cure no pay”

• Pay for delivered functionality

• Incremental payments match incremental development

• Incentive to produce working software

Page 21: “You should use iterative development only on projects that you want to succeed.” − Martin Fowler

Additional Emphases

• Don’t forget non-functional requirements

• Quality attributes such as performance

• Resource attributes such as storage space

• Providing this can be more costly than the basic functionality

• Everything can and should be quantified

• Break it down into components

• Find the relevant scale for each one

Page 22: “You should use iterative development only on projects that you want to succeed.” − Martin Fowler

Example: Ease of Access

Page 23: “You should use iterative development only on projects that you want to succeed.” − Martin Fowler

Perspective

• What projects can benefit from EVO?

Page 24: “You should use iterative development only on projects that you want to succeed.” − Martin Fowler

Slide from presentation about NSA system leaked by Edward Snowden, 2013