Software engineering research is a train wreck
I was reading this thesis the other day[0], which is on precision machine design. It got me comparing precision machine design to  software engineering.<p>A big part of why we're able to design extremely precise machines (the author worked on a lathe used for machining optical parts for the National Ignition Facility) is because we can characterize exactly where errors will come from (e.g. structure isn't rigid enough, temperature variation causes parts to expand by different amounts, parts not round or flat enough, etc.). Once we know what errors we need to control and their rough order of importance we can start improving the machine design to control them better.<p>In theory, something similar could be done in software engineering (formal methods are part of this, but not a full solution). Rather than an error budget, you'd have some sort of bug budget, where you tracked what sort of bugs were caused by what sort of constructs, and design your program in such a way to minimize their chance of being introduced. I've never heard of anyone except Dan Bernstein[1] actually doing anything approximating this. Probably because the perceived level of effort is too high.<p>I actually don't think it would take that much <i>effort</i>, but it would require quite a bit of organization to track where bugs are introduced and what their root causes are. This is probably why Bernstein, an individual, is able to do this, while no large team (that I'm aware of) has done anything similar.<p>Of course, just like your toaster doesn't need to use precision machine design techniques (an over-engineered toaster is a bad toaster), most software doesn't need the effort/expense of a rigorous design process either, but some would benefit from it.<p>[0]: <a href="https://dspace.mit.edu/handle/1721.1/9414" rel="nofollow">https://dspace.mit.edu/handle/1721.1/9414</a><p>[1]: <a href="https://cr.yp.to/djb.html" rel="nofollow">https://cr.yp.to/djb.html</a>