First, some background on me. I'm a professional software engineer with just shy of 15 years experience. I've worked on everything from compilers and virtual machines for industrial automation to websites at massive scale with tens of the thousands of requests per second. I've freelanced for clients, served under managers, and led development teams.
I can say that nothing has been harder and more painful to learn in my career so far than quality and schedule management. I was never taught proper planning and estimation, and most of the books I read on Agile development never provided effective estimation tools - clients were rarely happy with estimation performance. As for testing, I learned very quickly and painfully that at scale, doing TDD alone is an inadequate quality management strategy - there are simply far too many types of issues TDD can't or won't catch. So what other strategies are there if not TDD? This book has many answers and will point you to even more.
The book provides many of the missing pieces glossed over or skipped entirely by university computer science programs and other, more popular books on software engineering. Namely, how to measure and manage software quality, construct sane plans, and produce reliable estimates. It provides exercises and process scripts to help you practice and reinforce what you've learned. The process evolution is also designed to introduce the new and usually foreign practices in a piecemeal fashion to prevent you from getting overwhelmed.
The main gripe that people seem to have with the book is the level of discipline required to actually follow its practices, which I think many view as oppressive or scary. However, as mentioned many times in the book - maintaining that discipline eventually becomes habitual and the insight and improvement produced by the process more than make up for the initially intimidating level of discipline.
As a motivator, I used the PSP to develop a project recently. I constructed a plan, used personal design and code reviews to manage quality, and filled out forms to log all the required data. While my estimation error for individual components was between -75% and +50% - the project itself ended up being delivered 8% ahead of schedule. The overall size was roughly 5,000 LOC, and to-date there have only been 3 defects found after development.
If this were a traditional software project there would have been no plan or the plan would have been no better than a guess, so I couldn't have tracked my planning performance or given a reliable estimate. Additionally, testing would have been my only quality management strategy, and using my earlier data as a guide there would have been anywhere from 250 - 1000 defects in the overall program. Even assuming an atypically high testing yield of 75% there would have been 63 - 250 defects remaining after development.
If you're ready to move from chaotic and undisciplined practices to something that will make your professional life more sane and effective I'd highly recommend this book to you.
I have and will continue to recommend this book to other software developers despite its relative obscurity. It has been invaluable for me, and I hope it will be for others too.