An account of how structured program design, mathematical reasoning and progressive refinement can make software easier to understand, verify and modify.