This book is intended as a handbook for students and practitioners alike. The book is structured around the type of tasks that practitioners are confronted with, beginning with requirements definition and concluding with maintenance and withdrawal. It identifies and discusses existing laws that have a significant impact on the software engineering field. These laws are largely independent of the technologies involved, which allow students to learn the principles underlying software engineering. This also guides students toward the best practice when implementing software engineering techniques.