This talk will describe programming mistakes or puzzlers found in production code and discuss lessons learned about how to construct high-quality software. While there are many types of mistakes, some mistakes are much more common than others. And for various reasons, many blatant errors in code never cause any problems in production. This session is intended for intermediate to advanced Java developers and will cover: * The Java language and API puzzlers encountered in production code * Techniques such as dynamic instrumentation, logging tricks, and using FindBugs (or other static analysis tools) to detect serious coding mistakes * Ways to effectively apply these techniques to find the mistakes that matter  Drawing lessons from the FindBugs static analysis tool and eight months at Google as a visiting scientist, this session's speaker discusses programming mistakes that cause real problems in practice and presents techniques for preventing and/or catching these mistakes early. He discusses some of the elements of the Java programming language, libraries, and IDEs that can cause problems and offers lessons learned from them, such as the dangers of trusting refectoring tools. He also talks about mistakes that can be found with static analysis and problems that have been identified by defect postmortems and dynamic techniques.