Why Don't People Use Formal Methods?
The really simple answer to this question is: because at a high level of abstraction, it isn&#x27;t useful.  Most applications are being specified by people who don&#x27;t understand in any detail what they want the application to do.  They can&#x27;t even imagine the problem well enough to discuss it let alone specify it.  A very large proportion of failed projects I&#x27;ve seen is due to this break down.  The people who have the time and inclination to investigate the details are not the ones who care what it does.  You can have an incredibly low defect count and still not build the thing you need.<p>But if you look at a lower level of specification, then formal methods start making a lot more sense.  For example, let&#x27;s say I have to implement a communications protocol.  This is something I can specify and that I can build against that specification.  Companies sell protocol testers that test your implementation against a protocol.  It might be nicer to have a formal specification than a back end test -- especially because there are often more scenarios you care about than you can feasibly test.<p>At an even smaller scale, we are now realising some benefits of this mode of thinking.  For example, we&#x27;ve had types in programming languages for a long time, but lately we&#x27;re able to actually make statements about what the code does, simply by analysing the types.  This is a massive step forward and I&#x27;m really looking forward to things like constrained types making it into the mainstream.  Similarly things like Rust&#x27;s borrow checker can allow you to make analytical statements about how much memory you are using (if you are careful), etc, etc.  These are great.<p>I think that the success of formal methods is going to be through the backdoor and at this design&#x2F;implementation level for a long time.  In fact, pretty much forever.