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”
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.
Construx
Software Development Best Practices ®
#1
Software Development
Work is Performed by
Human Beings
Team Cohesion Platform Experience Language and Tools ExperienceCocomo 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 Reuse Precedentedness Architecture and Risk Resolution Database Size Process Maturity Storage Constraint Platform Volatility Use of Software Tools Documentation Match to Lifecycle Needs Required Software Reliability Multi-site Development Time Constraint Product Complexity
“Software Development Best Practices” 5
Importance of Human Influences
Human Influences make a 14x
difference in total project effort & cost,
according to Cocomo II
Capability factors alone make a 3.5x
difference
Experience factors alone make a 3.0x
difference
“Software Development Best Practices”
Why Do These Variations Exist?
Experience?
Technology knowledge?
Business knowledge?
Personal processes?
“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!
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 reported
differences 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
accidents
accidents
Recruiting top staff is easily cost justified
Recruiting top staff is easily cost justified
Even elaborate staff retention programs
Even elaborate staff retention programs
are also easily cost justified
Construx
Software Development Best Practices ®
#2
Incrementalism is
Essential
“Software Development Best Practices”
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
“Software Development Best Practices” 11
What do you get from
What do you get from
incrementalism
incrementalism
?
?
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 adapt
Ability to adapt
Or, Another Perspective on Feedback …
If the map and the terrain
If the map and the terrain
disagree, trust the terrain!
Construx
Software Development Best Practices ®
#3
Iteration is Essential
“Software Development Best Practices”
Iteration
Definition: “Recital or performance a
second time; repetition”
An “iterative” approach is one that
converges to a solution a little bit at a time
“Software Development Best Practices” 15
News Flash!
ITERATION!
People
People
Are Not
Are Not
Computers
Computers
News Flash!
ITERATION!
Practice
Helps!
Practice
Helps!
And making small mistakes
that prevent large mistakes
helps too
“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 won
results won
’
’
t change.
t change.
“Software Development Best Practices”
In the Midst of These Important Ideas,
Some Are Just Plain Silly
M
i
l
d
l
y
S
e
r
i
o
u
s
Neutral
So
m
ew
ha
t S
ill
y
Incredibly
Incredibly
Serious
Serious
Incredibly Silly
Software Silly Meter
“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 Meter
Software Silly Meter
Conclusions You Can Take to the Bank
Some practices derive their power from
Some practices derive their power from
incrementalism
incrementalism
(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
within
within
an activity or phase
an activity or phase
(e.g.,
(e.g.,
within
within
requirements)
requirements)
You can iterate
You can iterate
across
across
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
across
across
entire development
entire development
cycles
cycles
The degree of iteration can vary from
The degree of iteration can vary from
practically 0
practically 0
-
-
100% either
100% either
within
within
or
or
across
across
activities
Construx
Software Development Best Practices ®
#4
The Cost To Fix A Defect
Increases Over Time
“Software Development Best Practices”
Defect Cost Increase (DCI)
Requirements
Architecture
Construction
System test
Requirements Architecture Construction Post-Release
Average
Cost to
Correct
Activity in which a
Defect Is
Introduced
“Software Development Best Practices” 23
Notable Historical Mistakes
480 BC:
“This
is a
nice
gift!”
Greatest Mistakes in History
Notable Historical Mistakes
Greatest 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.
”
”
“Software Development Best Practices” 25
Notable Historical Mistakes
Greatest Mistakes in History
2006:
2006:
“
“
Agile projects
Agile projects
aren
aren
’
’
t affected by
t affected by
Defect Cost
Defect Cost
Increase.
Increase.
”
”
Requirements Architecture Construction System test Requirements ArchitectureConstruction Post-ReleaseAverage Cost to Correct Activity in which a Defect Is Introduced
Activity in Which a Defect Is Detected
Software Silly Meter
Software Silly Meter
“Software Development Best Practices”
Conclusions You Can Take to the Bank
Defect creation is a function of effort
Defect creation is a function of effort
Defect detection and removal is a
Defect detection and removal is a
function of QA activities
function of QA activities
Fix more defects earlier!
Fix more defects earlier!
Use practices that reduce the
Use practices that reduce the
magnitude of DCI
Construx
Software Development Best Practices ®
#5
There’s an Important Kernel
of Truth in the Waterfall
Model
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
“Software Development Best Practices” 29
Intellectual Phases
Schedule
Focus
Discovery
Invention
Construction
“Software Development Best Practices”
Schedule
Focus
Discovery
Invention
Construction
Cost of Overlapping Intellectual
Phases
Overlap =
Dependencies
Uncertainty
Risk
Rework
Higher costs
Longer schedules
Lower quality
“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.
Construx
Software Development Best Practices ®
#6
Ability to Create Useful
Software Estimates Can
be Improved Over Time
(The Cone Of Uncertainty)
“Software Development Best Practices” 33
Cone of Uncertainty
0.67x 0.8x 1.0x 0.5x 0.25x 2x 4x 1.5x 1.25x Project Scope (effort, cost, or features)Time
“Software Development Best Practices”
Conclusions You Can Take to the Bank
Estimation must be iterative
Estimation must be iterative
Project planning must be incremental
Project planning must be incremental
An estimate isn
An estimate isn
’
’
t meaningful unless it
t meaningful unless it
contains a description of its
contains a description of its
inaccuracy
Construx
Software Development Best Practices ®
#7
The Most Powerful Form
of Reuse is Full Reuse
History of Reuse
First idea was to reuse code
Later idea was to reuse code + design
Current idea is to reuse as much as
“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”
Effect of Adding Process the First
Time (What I Think Now)
Percent
of Effort
0% 100%Time
Thrashing
Process Overhead
Productive Work
“Software Development Best Practices” 39
Effect of Adding Reused
Processes
Percent
of Effort
0% 100%Time
Thrashing
Process Overhead
Productive Work
Conclusions You Can Take to the Bank
Consider reusing any or all of these:
Consider reusing any or all of these:
Coding standards
Coding standards
Change control policies
Change control policies
Estimation procedures
Estimation procedures
Formats & 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 & responsibilities
Roles & responsibilities
Construx
Software Development Best Practices ®
#8
Risk Management
Provides Critical Insights
into Many Core Software
Development Issues
“Software Development Best Practices”
Risk Management Type 1: Extrinsic
Added on to the project primarily for
purposes of risk management
Examples of Extrinsic Risk Management
Top 10 Risks list
Risk management plans
Risk officer
Etc.
“Software Development Best Practices” 43
Risk Management Type 2: Intrinsic
Built into the project for other reasons;
risk reduction is an additional benefit
Examples of intrinsic risk management
Active project tracking
UI Prototyping
End-user involvement
Incremental delivery
Upstream technical reviews
Etc.
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“Software Development Best Practices” 45
A View of Software Risk Reduction
Planned Work
Planned “Overhead”
Unplanned, Variable Work
“Software Development Best Practices”
Conclusions You Can Take to the Bank
Risk
Risk
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?
“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 Meter
Software Silly Meter
Construx
Software Development Best Practices ®
#9
Different Kinds of Software
Call For Different Kinds of
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”
Time for More Silliness
There is one single development
approach that works best for all projects.
Software Silly Meter
“Software Development Best Practices” 51
This is a saw …
“Software Development Best Practices” 53
… and so is this …
“Software Development Best Practices”
“Software Development Best Practices” 55
… and so is this …
“Software Development Best Practices” 57
… and so is this …
“Software Development Best Practices”
“Software Development Best Practices” 59
… and so is this …
“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”
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 project
Construx
Software Development Best Practices ®
#10
Software Engineering
Body of Knowledge
(SWEBOK)
The SWEBOK
(Software Engineering Body of Knowledge)
Software Configuration Management
Software Construction
Software Design
Software Engineering Management
Software Engineering Process
Software Maintenance
Software Quality
Software Requirements
Software Testing
“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”
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
“Software Development Best Practices” 67
Alternative #1 to the SWEBOK
I could try to
explain software to
you, but you
wouldn’t
understand.
Alternative #2 to the SWEBOK
Don’t ask
questions.
Just have faith
“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”
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
processes
processes
Academic curriculums
Academic curriculums
Career development
Career development
Professional certification
Professional certification
Employment interviewing
Employment interviewing
Technical skills inventory
Technical skills inventory
And we
“Software Development Best Practices” 71
Is the SWEBOK the Ultimate Answer?
“Truth will sooner come out of error
than from confusion.”
– Francis Bacon
Construx
Software Development Best Practices ®
Construx
Software Development Best Practices ®