I’m potentially about to start some controversy here. Don’t judge. I’m reporting the weather, not making it.
In a paper by Daniel Jackson of the MIT Computer Science and Artificial Technology lab titled A Direct Path to Dependable Software, he writes:
Problems with requirements and usability dwarf the problems of bugs in code, suggesting that the emphasis on coding practices and tools in both research and industry may be mistaken. Exploiting tools to check arguments at the design and requirements level may be more important, and is often more feasible since artifacts at the higher level are much smaller.
This is at least the tenth time I have heard an argument along these lines. I believe a lot of the material from Construx and Steve McConnell (particularly in his book Professional Software Development) also points this out. The biggest bang for software teams wishing to reduce waste in their pipeline isn’t to insure correctness of code, it’s to focus on architecture and requirements engineering.
My own personal experience also bears this out. Much of the waste in projects I’ve been involved in have to do with inadequate requirements, not with bugs in the code that need to be fixed. In some ways, this is a relief because it points the finger upstream from the developer. In other ways it is frustrating because it means that even more developer time needs to actually be spent away from the software construction activities that are in their wheelhouse and instead on requirements and design.