37
Construx Software Development Best Practices ® © 2006 Construx Software Builders, Inc. All Rights Reserved. www.construx.com The 10 Most Important Ideas in Software Development “Software Development Best Practices” 2 Most Key Ideas Are Not New Q: What are the most exciting/promising software engineering ideas or techniques on the horizon? A: I don’t think that the most promising ideas are on the horizon. They are already here and have been here for years but are not being used properly. — David L. Parnas

The 10 Most Important Ideas in Software Development

Embed Size (px)

Citation preview

Page 1: The 10 Most Important Ideas in Software Development

ConstruxSoftware Development Best Practices

®

© 2006 Construx Software Builders, Inc.All Rights Reserved.

www.construx.com

The 10 Most Important Ideas in Software Development

“Software Development Best Practices” 2

Most Key Ideas Are Not New

Q: What are the most exciting/promising software engineering ideas or techniques on the horizon?

A: I don’t think that the most promising ideas are on the horizon. They are already here and have been here for years but are not being used properly.

— David L. Parnas

Page 2: The 10 Most Important Ideas in Software Development

ConstruxSoftware Development Best Practices

®

#1

Software Development Work is Performed by Human Beings

“Software Development Best Practices” 4

Team Cohesion

Platform Experience

Language and Tools Experience

Cocomo II’s View of Software Project Influences

1.26

1.29

1.31

1.33

1.38

1.40

1.42

1.43

1.43

1.46

1.49

1.50

1.51

1.52

1.54

1.56

1.59

1.63

1.76

2.00

2.38

Applications Experience

Personnel Continuity

Programmer Capability (general)Analyst Capability (general)

Development Flexibility

Developed for ReusePrecedentedness

Architecture and Risk Resolution

Database Size

Process MaturityStorage Constraint

Platform VolatilityUse of Software Tools

Documentation Match to Lifecycle NeedsRequired Software Reliability

Multi-site Development

Time Constraint

Product Complexity

Page 3: The 10 Most Important Ideas in Software Development

“Software Development Best Practices” 5

Importance of Human Influences

Human Influences make a 14x difference in total project effort & cost, according to Cocomo IICapability factors alone make a 3.5x differenceExperience factors alone make a 3.0x difference

“Software Development Best Practices” 6

Why Do These Variations Exist?

Experience?Technology knowledge?Business knowledge?Personal processes?

Page 4: The 10 Most Important Ideas in Software Development

“Software Development Best Practices” 7

This Just In …

Human Beings Exhibit the Same Variations in Performance That Programmers Do

Human Beings Exhibit the Same Variations in Performance That Programmers Do!

“Software Development Best Practices” 8

Conclusions You Can Take to the Bank

With 20x differences in individuals and 10x With 20x differences in individuals and 10x differences in teams commonly reporteddifferences in teams commonly reported……Technical successes of Google, Amazon, Technical successes of Google, Amazon, Microsoft and similar companies are not Microsoft and similar companies are not accidentsaccidentsRecruiting top staff is easily cost justifiedRecruiting top staff is easily cost justifiedEven elaborate staff retention programs Even elaborate staff retention programs are also easily cost justifiedare also easily cost justified

Page 5: The 10 Most Important Ideas in Software Development

ConstruxSoftware Development Best Practices

®

#2

Incrementalism is Essential

“Software Development Best Practices” 10

Incrementalism

Definition: “The use of a series of regular additions or contributions”An “incremental” approach is one that is done a little bit at a time. The final result may be completely mapped out in advance

Page 6: The 10 Most Important Ideas in Software Development

“Software Development Best Practices” 11

What do you get from What do you get from incrementalismincrementalism??Feedback! Feedback! Feedback! Feedback! Feedback! Feedback!

Conclusions You Can Take to the Bank

(on the software itself)(on the software itself)(on the dev process)(on the dev process)(on the people/dev capability)(on the people/dev capability)

Ability to adaptAbility to adapt

“Software Development Best Practices” 12

Or, Another Perspective on Feedback …

If the map and the terrain If the map and the terrain disagree, trust the terrain!disagree, trust the terrain!

Page 7: The 10 Most Important Ideas in Software Development

ConstruxSoftware Development Best Practices

®

#3

Iteration is Essential

“Software Development Best Practices” 14

Iteration

Definition: “Recital or performance a second time; repetition”An “iterative” approach is one that converges to a solution a little bit at a timeThe result is not known in advance

Page 8: The 10 Most Important Ideas in Software Development

“Software Development Best Practices” 15

News Flash!

ITERATION!

People People Are Not Are Not ComputersComputers

“Software Development Best Practices” 16

News Flash!

ITERATION!

Practice Helps!Practice Helps!

And making small mistakes that prevent large mistakes helps too

Page 9: The 10 Most Important Ideas in Software Development

“Software Development Best Practices” 17

This Just In …

INSANITY!

One Definition: One Definition: Doing the same thing over Doing the same thing over and over and expecting and over and expecting different results.different results.

One More Definition: One More Definition: Not doing the same thing Not doing the same thing over because you think the over because you think the results wonresults won’’t change.t change.

“Software Development Best Practices” 18

In the Midst of These Important Ideas, Some Are Just Plain Silly

Mildly Serious

Neutral

Somew

hat S

illy

Incredibly Incredibly SeriousSerious Incredibly Silly

Software Silly MeterSoftware Silly Meter

Page 10: The 10 Most Important Ideas in Software Development

“Software Development Best Practices” 19

Software Concept

System Testing

Architectural Design

Requirements Analysis

Detailed Design

Coding and Debugging

Silly Idea: The only two development options in existence are “Iterate Nothing” and “Iterate Everything”

Software Silly MeterSoftware Silly Meter

“Software Development Best Practices” 20

Conclusions You Can Take to the Bank

Some practices derive their power from Some practices derive their power from incrementalismincrementalism (doing a little bit at a time)(doing a little bit at a time)Some practices derive their power from Some practices derive their power from iteration (repeating the same task)iteration (repeating the same task)You can iterate You can iterate withinwithin an activity or phase an activity or phase (e.g., (e.g., withinwithin requirements)requirements)You can iterate You can iterate acrossacross any pair of activities or any pair of activities or phases (e.g., requirements & architecture)phases (e.g., requirements & architecture)You can iterate You can iterate acrossacross entire development entire development cyclescyclesThe degree of iteration can vary from The degree of iteration can vary from practically 0practically 0--100% either 100% either withinwithin or or acrossacrossactivitiesactivities

Page 11: The 10 Most Important Ideas in Software Development

ConstruxSoftware Development Best Practices

®

#4

The Cost To Fix A Defect Increases Over Time

“Software Development Best Practices” 22

Defect Cost Increase (DCI)

Requirements

Architecture

Construction

System testRequirements Architecture Construction Post-Release

AverageCost toCorrect

Activity in which aDefect IsIntroduced

Activity in Which a Defect Is Detected

Page 12: The 10 Most Important Ideas in Software Development

“Software Development Best Practices” 23

Notable Historical Mistakes

480 BC:

“Thisis a nicegift!”

Greatest Mistakes in History

“Software Development Best Practices” 24

Notable Historical MistakesGreatest Mistakes in History

1999:1999:““In the New In the New Economy, Economy, companies companies won't need to won't need to make a profit to make a profit to be successful.be successful.””

Page 13: The 10 Most Important Ideas in Software Development

“Software Development Best Practices” 25

Notable Historical MistakesGreatest Mistakes in History

2006:2006:““Agile projects Agile projects arenaren’’t affected by t affected by Defect Cost Defect Cost Increase.Increase.””

Requirements

Architecture

ConstructionSystem testRequirements ArchitectureConstruction Post-Release

AverageCost toCorrect

Activity in which aDefect IsIntroduced

Activity in Which a Defect Is Detected Software Silly MeterSoftware Silly Meter

“Software Development Best Practices” 26

Conclusions You Can Take to the Bank

Defect creation is a function of effortDefect creation is a function of effortDefect detection and removal is a Defect detection and removal is a function of QA activitiesfunction of QA activitiesFix more defects earlier!Fix more defects earlier!Use practices that reduce the Use practices that reduce the magnitude of DCImagnitude of DCI

Page 14: The 10 Most Important Ideas in Software Development

ConstruxSoftware Development Best Practices

®

#5

There’s an Important Kernel of Truth in the Waterfall Model

“Software Development Best Practices” 28

Remember This?

Software Concept

System Testing

Architectural Design

Requirements Analysis

Detailed Design

Coding and Debugging

“I’m Not Bad. I’m Just Drawn That

Way.”--Jessica Rabbit

Page 15: The 10 Most Important Ideas in Software Development

“Software Development Best Practices” 29

Intellectual Phases

Schedule

Focus

Discovery Invention Construction

“Software Development Best Practices” 30

Schedule

Focus

Discovery Invention Construction

Cost of Overlapping Intellectual Phases

Overlap =DependenciesUncertaintyRiskReworkHigher costsLonger schedulesLower quality

Page 16: The 10 Most Important Ideas in Software Development

“Software Development Best Practices” 31

Conclusions You Can Take to the Bank

Some degree of wickedness is Some degree of wickedness is inevitable. Plan for it. inevitable. Plan for it. Much wickedness is avoidable. Plan Much wickedness is avoidable. Plan for that, too. for that, too. Attack wickedness actively, Attack wickedness actively, especially via incremental and especially via incremental and iterative approaches. iterative approaches.

ConstruxSoftware Development Best Practices

®

#6

Ability to Create Useful Software Estimates Can be Improved Over Time (The Cone Of Uncertainty)

Page 17: The 10 Most Important Ideas in Software Development

“Software Development Best Practices” 33

Cone of Uncertainty

0.67x

0.8x1.0x

0.5x

0.25x

2x

4x

1.5x

1.25x

Project Scope(effort, cost, or features)

Time

“Software Development Best Practices” 34

Conclusions You Can Take to the Bank

Estimation must be iterativeEstimation must be iterativeProject planning must be incrementalProject planning must be incrementalAn estimate isnAn estimate isn’’t meaningful unless it t meaningful unless it contains a description of its contains a description of its inaccuracyinaccuracy

Page 18: The 10 Most Important Ideas in Software Development

ConstruxSoftware Development Best Practices

®

#7

The Most Powerful Form of Reuse is Full Reuse

“Software Development Best Practices” 36

History of Reuse

First idea was to reuse codeLater idea was to reuse code + designCurrent idea is to reuse as much as possible, including processes and plans

Page 19: The 10 Most Important Ideas in Software Development

“Software Development Best Practices” 37

Effect of Adding Process the First Time (What I Wrote in SPSG in 1997)

Percent of Effort

0%

100%

Time

Thrashing

Process Overhead

Productive Work

“Software Development Best Practices” 38

Effect of Adding Process the First Time (What I Think Now)

Percent of Effort

0%

100%

Time

Thrashing

Process Overhead

Productive Work

Page 20: The 10 Most Important Ideas in Software Development

“Software Development Best Practices” 39

Effect of Adding ReusedProcesses

Percent of Effort

0%

100%

Time

Thrashing

Process Overhead

Productive Work

“Software Development Best Practices” 40

Conclusions You Can Take to the Bank

Consider reusing any or all of these:Consider reusing any or all of these:Coding standardsCoding standardsChange control policiesChange control policiesEstimation proceduresEstimation proceduresFormats & outlines of project plans, Formats & outlines of project plans, requirements doc, design docs, QA plan, requirements doc, design docs, QA plan, test plan, etc.test plan, etc.Checklists for plans, estimates, change Checklists for plans, estimates, change control, inspections, QA, etc.control, inspections, QA, etc.Roles & responsibilitiesRoles & responsibilitiesTrainingTraining

Page 21: The 10 Most Important Ideas in Software Development

ConstruxSoftware Development Best Practices

®

#8

Risk Management Provides Critical Insights into Many Core Software Development Issues

“Software Development Best Practices” 42

Risk Management Type 1: Extrinsic

Added on to the project primarily for purposes of risk managementExamples of Extrinsic Risk Management

Top 10 Risks listRisk management plansRisk officer Etc.

Page 22: The 10 Most Important Ideas in Software Development

“Software Development Best Practices” 43

Risk Management Type 2: Intrinsic

Built into the project for other reasons; risk reduction is an additional benefitExamples of intrinsic risk management

Active project trackingUI PrototypingEnd-user involvementIncremental deliveryUpstream technical reviewsEtc.

“Software Development Best Practices” 44

A View of Software Risk Reduction

Planned Work

Typical Relationship between Planned Work and Variable Work:

Unplanned, Variable Work (typically >50% of total)

Planned Work

Better Relationship:

Planned“Overhead”

Unplanned, Variable Work

Page 23: The 10 Most Important Ideas in Software Development

“Software Development Best Practices” 45

A View of Software Risk Reduction

Planned WorkPlanned

“Overhead”Unplanned, Variable Work

“Software Development Best Practices” 46

Conclusions You Can Take to the Bank

RiskRisk is the key to many tough decisions in is the key to many tough decisions in project management:project management:

What is the best lifecycle model?What is the best lifecycle model?How much requirements work is enough? How much requirements work is enough? How much design work is enough? How much design work is enough? Can you use junior staff instead of senior staff? Can you use junior staff instead of senior staff? Should you do design reviews? Code reviews?Should you do design reviews? Code reviews?How much schedule buffer do you need?How much schedule buffer do you need?

Page 24: The 10 Most Important Ideas in Software Development

“Software Development Best Practices” 47

A Silly View of Risk …

“We’re an entrepreneurial company. We can’t be afraid of risk”Not separating business risk from project risk from product risk

Software Silly MeterSoftware Silly Meter

ConstruxSoftware Development Best Practices

®

#9

Different Kinds of SoftwareCall For Different Kinds of Software Development(The “Toolbox”)

Page 25: The 10 Most Important Ideas in Software Development

“Software Development Best Practices” 49

Examples of Overreaching Claims

“The pace of information technology (IT) change is accelerating and agile methods adapt to change better than disciplined methods therefore agile methods will take over the IT world.”

“Software development is uncertain and the SW-CMM improves predictability therefore all software developers should use the SW-CMM.”

Examples from Balancing Agility and Discipline: A Guide for the Perplexed, Barry Boehm, Richard Turner, 2004

“Software Development Best Practices” 50

Time for More Silliness

There is one single development approach that works best for all projects.

Software Silly MeterSoftware Silly Meter

Page 26: The 10 Most Important Ideas in Software Development

“Software Development Best Practices” 51

This is a saw …

“Software Development Best Practices” 52

… this is also a saw …

Page 27: The 10 Most Important Ideas in Software Development

“Software Development Best Practices” 53

… and so is this …

“Software Development Best Practices” 54

… and so is this …

Page 28: The 10 Most Important Ideas in Software Development

“Software Development Best Practices” 55

… and so is this …

“Software Development Best Practices” 56

… and so is this …

Page 29: The 10 Most Important Ideas in Software Development

“Software Development Best Practices” 57

… and so is this …

“Software Development Best Practices” 58

… and so is this …

Page 30: The 10 Most Important Ideas in Software Development

“Software Development Best Practices” 59

… and so is this …

“Software Development Best Practices” 60

… and so is this …

Page 31: The 10 Most Important Ideas in Software Development

“Software Development Best Practices” 61

News Flash!

SOFTWARE DEVELOPMENT IS AS DIFFICULT AS SAWING!

SOFTWARE DEVELOPMENT IS AS DIFFICULT AS SAWING!

MARTIAN RESEARCHERS MAKE KEY DISCOVERY!

Aliens donate research results

to Software Community

Aliens donate research results

to Software Community

Different Projects Call for Different Development Approaches!

Different Projects Call for Different Development Approaches!

“Software Development Best Practices” 62

Conclusions You Can Take to the Bank

Which software development Which software development approach works best depends on the approach works best depends on the kind of projectkind of project

Page 32: The 10 Most Important Ideas in Software Development

ConstruxSoftware Development Best Practices

®

#10

Software Engineering Body of Knowledge (SWEBOK)

“Software Development Best Practices” 64

The SWEBOK(Software Engineering Body of Knowledge)

Software Configuration ManagementSoftware ConstructionSoftware DesignSoftware Engineering ManagementSoftware Engineering ProcessSoftware MaintenanceSoftware QualitySoftware RequirementsSoftware Testing Software Tools and Methods

Page 33: The 10 Most Important Ideas in Software Development

“Software Development Best Practices” 65

Effect of the SWEBOK

To organize something is to understand it. – Aristotle

The main contribution of the SWEBOK is to bring clarity to software development research, discussions, and application

“Software Development Best Practices” 66

Alternatives to the SWEBOK

Maybe software is so complicated only gurus can understand it? Perhaps software can’t be reduced to words, and you just have to trust the developers to do the right thing?Maybe good development practices should be kept secret so they don’t fall into the wrong hands

Page 34: The 10 Most Important Ideas in Software Development

“Software Development Best Practices” 67

Alternative #1 to the SWEBOK

I could try to explain software to

you, but you wouldn’t

understand.

“Software Development Best Practices” 68

Alternative #2 to the SWEBOK

Don’t ask questions.

Just have faith in your team.

Page 35: The 10 Most Important Ideas in Software Development

“Software Development Best Practices” 69

Alternative #3 to the SWEBOK

I could explain software to you, but I’d have to kill you.

“Software Development Best Practices” 70

Conclusions You Can Take to the Bank

SWEBOK provides a wide spectrum of support for SWEBOK provides a wide spectrum of support for software development practices:software development practices:Defined, reusable software development Defined, reusable software development processesprocessesAcademic curriculumsAcademic curriculumsCareer developmentCareer developmentProfessional certificationProfessional certificationEmployment interviewingEmployment interviewingTechnical skills inventoryTechnical skills inventory

And weAnd we’’re just getting started!re just getting started!

Page 36: The 10 Most Important Ideas in Software Development

“Software Development Best Practices” 71

Is the SWEBOK the Ultimate Answer?

“Truth will sooner come out of error than from confusion.”

– Francis Bacon

ConstruxSoftware Development Best Practices

®

Conclusions

Page 37: The 10 Most Important Ideas in Software Development

ConstruxSoftware Development Best Practices

®

Breaking News…

TrainingTrainingConsultingConsultingToolsTools

[email protected]+1 (425) 636-0100