This document discusses strategies for gaining confidence in applications and systems. It begins by defining what is meant by "gaining confidence" and why it is important. It then outlines several topics to be covered, including using language paradigms like imperative, object-oriented, and functional programming to perform static and dynamic analysis. It will discuss testing at different levels from unit tests up to integration and system-level tests. It will also look at simulation testing to analyze emergent behaviors and how monitoring in production helps continue analysis.