This book describes the processes involved for high-quality software engineering, both from a software development perspective and from a project management perspective. The book is organized around the different phases of software development, from requirements to support. Key themes are also highlighted throughout the book: a) Understanding rationales to allow rational decisions. b) Programming in the future tense by focusing on maintainability. c) Developing the developers, since their calibre is the most important single factor in achieving software quality.