This document discusses formal verification of functional code. It begins with motivations for formal verification like improving software dependability for mission-critical and safety-critical systems. It then provides an overview of formal verification, describing it as mathematically proving properties of a system's mathematical model. The document discusses examples of formal verification that programmers may already be familiar with, like proving properties of algorithms. It also covers formal verification methods in more depth, like model checking, theorem proving, and temporal logic. Finally, it discusses examples of projects that used formal verification like miTLS, F*, and seL4 microkernel.