This is an explanation of the constructive approach to software development. It involves calculating an answer from the initial statement of requirements or specification, rather than "guessing" an answer and then testing whether it actually works. It uses the same basic theory as traditional techniques, but is quicker and easier as no "wrong answers" are obtained, and therefore no incorrect work needs to be discarded. The book is designed to be accessible to anyone with an appropriate basic background knowledge of formal methods. It is intended for fourth or fifth year undergraduate and postgraduate students on formal methods and software engineering courses, and software developers in industry who need a more pragmatic, yet fully formal, approach to software development.