In the long run, the biggest gains in productivity come from software re-use.
NASA's Software Engineering Laboratory found that, with planning, functionally-oriented programs could take about 35% of their code from previous projects, rising to 70% for object-oriented programs.
Familiarity breeds productivity. Programmers using a language they have used for at least 3 years are 30% more productive than programmers who are new to a language.
Using high level languages can increase productivity, simplicity, reliability and comprehensibility by up to 5 times.
Defects introduced upstream have a wider impact.
TRW found that a change to requirements costs 50-200 times less to fix if completed during requirements capture than if delayed until construction.
Time needed to fix an error is greater the higher level the error - requirements take the longest, then architecture errors, etc.
IBM found that purging an error early costs 10-100 times less to fix than if delayed until unit or functional test.
Progressive understanding of the development process is a major cause of changing requirements
The average IBM project undergoes about 25% change in requirements during development
Defining the design's rationale is at least as important to maintenance as the design itself.
Lack of familiarity with a language causes developers to overlook that languages capabilities and force it into the mould of languages they know.
The proportion of the project time spent coding is inversely proportional to the project's total productivity.
Productivity of programmers varies by a factor of 10-20
Programmers find modular code 15% more comprehensible.
Up to 90% of code can be dedicated to error and exception handling, housekeeping, etc., with as little as 10% for cases for which the system was nominally built.
Extremely modularised code (eg, 10 lines per routine) is no easier to read than completely unstructured code. Breaking code into routines of about 25 lines increases comprehension by up to two thirds. Only about 5% of errors are caused by hardware, compilers of the operating system.
Almost 40% of all errors are interface errors.
Defects cost more to fix the longer you leave them - much more.
In a small project, the cost of fixing a requirements error during maintenance is about 20 times higher cost of fixing it during the requirements phase itself. In a large project, it can be 100 times higher.
A study of 450 routines showed that 50% of highly cohesive routines were fault-free, but only 18% of routines with low cohesion. Card, Church & Agresti (1986) McConnell (1993), p.81
About 50% of development (not maintenance) effort comes after release.
Modularity contributes more to maintainability than structure.
Almost 90% of code users find modular code more maintainable.
Large programs using information hiding techniques are 4 times as easy to maintain.