This document provides an overview of Spec#, which is a specification language that extends C# with support for design by contract features like preconditions, postconditions, and object invariants. This allows programs to be verified for correctness. The architecture of Spec# compiles the specifications into verification conditions that are passed to an automatic theorem prover called Boogie to formally prove properties about programs. Spec# aims to make program verification practical and cost effective for developing high quality software.