Demonstrates how formal mathematical methods of proving correctness can help decrease the incidence of design errors (``bugs'') in software development. While all the techniques described here have a rigorous mathematical foundation, it is omitted in favor of emphasizing practical applications.