To write better code and build better products we must understand why engineering and design often fail. Why is it so difficult to write bug-free code? Why do people fail to use products? And why do engineering projects go sideways?
The answer to these questions lies in the shortcomings of human cognition and the nature of complexity. This book explores these topics and presents a human-centric approach to software engineering. An approach that considers and compensates for our cognitive biases, cognitive weaknesses, and the chaotic nature of the universe. The ideas presented will help you write better code, build better products, and be a more effective engineer.
This book is the first part of a two-book series. This part, Part I, focuses on theory and contains almost no code, while Part II is more technical and uses code and case studies to teach how to apply the theory.