Title: No Silver Bullet
1No Silver Bullet Essence and AccidentNot
only are there no silver bullets now in view, the
very nature of software makes it unlikely that
there will be any no inventions that will do
for software productivity, reliability, and
simplicity what electronics, transistors, and
large-scale integration did for computer
hardware.
2Productivity Equation
- Time of task SUM(frequency)i X (time)i
- Conceptual components of the task take most of
the time (deciding what to build) - In order to increase software productivity we
must focus on this aspect of software development
3Promising Attacks on the Conceptual Essence
- Buy vs. Build
- Requirements refinement - Rapid Prototyping
- Incremental development
4Buy versus BuildThe most radical possible
solution for constructing software is not to
construct it at all
- ANY software product is cheaper to buy than to
build - Even at a cost of 100,000, a purchased piece of
software is costing only about as much as one
programmer-year - Delivery is immediate
- The cost of software is in development, not
replication. By sharing the cost among a large
number of users, the per-user cost is lowered. - Examples spreadsheets/payroll apps/accounting
software
5Requirements Refinement
- Most difficult step in software development
- Any mistakes in the requirements cripple the
resulting system and are difficult to rectify
later - Clients generally do not know what they want or
know what questions must be answered - Clients almost never communicate the problem to
the software designers in the detail that must be
specified - It is the designers job to iteratively extract
and refine the product requirements from the
client
6Rapid Prototyping
- Prototypes generally simulate important
interfaces and perform major functions of the
intended system - Prototypes are an important tool designers use to
extract requirements specifications from the
client - Give clients a chance to test versions of the
product they are specifying to designers - Any problems in requirements are caught early in
the design phase
7Incremental Development
- Software is not written
- Software is grown by incremental development
- Every new function or class grows out of what is
already in the program - Decreases bugs
- Ease of backtracking
- Prevents the project from going off course