Code hardening can increase our development time, but it routinely reduces our debugging time. By anticipating faults while we design, we automatically increase the reliability and quality of our software, so this technique is one to be mastered. In this chapter we discussed a variety of code hardening techniques, as well as non-coding methods to help create better software and understand its operation.