This book bridges the communication gap between project managers and software developers working toward the common goal of developing successful software products and software systems. It provides the insights, methods, tools, and techniques necessary to understand the basic principles of software project planning and estimating, measuring and controlling, leading and communicating, and managing risk. It introduces software development methods, from traditional (hacking, requirements to code, and waterfall) to iterative (incremental build, evolutionary, agile, and spiral), and illustrates and emphasizes how to tailor the development process to specific projects. This book serves as an accessible textbook for advanced undergraduate- and graduate-level software engineering courses, as well as a valuable reference for software developers and software project managers.