I sometimes think about how good software quality would be if we all wrote test cases in the morning and coded in the afternoon. Motorola used to have a processes something like this…write and review tests at the same time as requirements are being approved, well before any coding starts. The number of defects we’d find in final system test was very small.