Daniel T. Barry

Various studies indicate that the optimal team size is between 2 and 5, with 3 being the mode. With more than 5 team members, team management begins to dominate the work.

A stupid error is an algorithmically avoidable error. Mainly, you are stupid if you let an error that a program can detect go undetected.

Every time you improve process, work becomes harder.

There is never enough time to do it right, but there is always enough time to fix it or to do it over.

Code is expensive to change, but design is cheaper to change, and requirements are even cheaper to change.

The cost to repair an error goes up dramatically as project moves towards completion and beyond.

A team of highly competent programmers who are also highly territorial, egotistical politicians will fail while a team of equally competent programmers, who are also egoless, cooperative, team players will succeed.

For most software, efficiency just does not matter.

Thoroughly testing a program is impossible (requires unbounded number of test cases); so try to choose test cases that will expose all errors. That’s very difficult, especially since we do not know what all the errors are, and if we did, we would not need the test cases!

Reliable computations are obtainable from buggy programs, which after all, are the only kind of programs there are.

Ed Adams of IBM found that 80% of the reliability problems are caused by only 2% of the defects.

Any technological or managerial scheme to force documentation can be subverted by unwilling programmers.

Most errors are introduced during requirements specification!

A number of studies have shown testing not very effective at finding bugs.

The key to keeping software costs down is to write code that is easily modified.

The notions of correctness in mathematics and programs are different. A mathematical model must be consistent; it need not match reality (be correct), and it need not be complete (in the formal sense). A program model must be consistent; it must match reality; and it must be complete (in the sense that it reacts gracefully to all inputs).

Programming is at least as difficult as developing a mathematical theory.