Doing What Works to Build Better Software Faster
" Modern Software Engineering gets it right and describes the ways skilled practitioners actually engineer software today. The techniques Farley presents are not rigid, prescriptive, or linear, but they are disciplined in exactly the ways software requires: empirical, iterative, feedback-driven, economical, and focused on running code." -- Glenn Vanderburg, Director of Engineering at Nubank "There are lots of books that will tell you how to follow a particular software engineering practice; this book is different. What Dave does here is set out the very essence of what defines software engineering and how that is distinct from simple craft. He explains why and how in order to master software engineering you must become a master of both learning and of managing complexity, how practices that already exist support that, and how to judge other ideas on their software engineering merits. This is a book for anyone serious about treating software development as a true engineering discipline, whether you are just starting out or have been building software for decades." -- Dave Hounslow, Software Engineer "These are important topics and it's great to have a compendium that brings them together as one package." -- Michael Nygard, Author of Release IT, Professional Programmer, and Software Architect "I've been reading the review copy of Dave Farley's book and it's what we need. It should be required reading for anyone aspiring to be a software engineer or who wants to master the craft. Pragmatic, practical advice on professional engineering. It should be required reading in universities and bootcamps." -- Bryan Finster, Distinguished Engineer and Value Stream Architect at USAF Platform One
David Farley, founder and consultant for Continuous Delivery Ltd., has been a programmer, software engineer, and systems architect since the early days of modern computing. He has shaped ground-breaking approaches that have transformed how developers and teams work. With Jez Humble, Farley coauthored the best-seller Continuous Delivery. As Head of Software Development for the London Multi Asset Exchange (LMAX), he built one of the world's fastest financial exchanges. One of the earliest adopters of agile techniques employing iterative development, continuous integration, and high levels of automated testing, he also coauthored the Reactive Manifesto.
Foreword Preface Acknowledgments About the Author Part I: What Is Software Engineering? Chapter 1: Foundations Chapter 2: What Is Engineering? Chapter 3: Fundamentals of an Engineering Approach Part II: Optimize for Learning Chapter 4: Working Iteratively Chapter 5: Feedback Chapter 6: Incrementalism Chapter 7: Empiricism Chapter 8: Experimental Part III: Optimize for Managing Complexity Chapter 9: Modularity Chapter 10: Cohesion Chapter 11: Separation of Concerns Chapter 12: Information Hiding & Abstraction Chapter 13: Managing-Coupling Part IV: Tools to Support Engineering in Software Chapter 14: The Tools of an Engineering Discipline Chapter 15: Modern Software Engineering Index