Software Development Book List
When I started developing software my focus was on technology, programming languages and tools. Therefore my reading reflected this. However as I progressed I found less and less of the problems I was running into were technical in nature and therefore the material I started reading changed. This was because the most difficult problems in software development are often not technical in nature but involve communication, process, organizational and people problems.
Here is my top ten must read books for anyone serious about software development.
The Mythical Man-Month: Essays on Software Engineering, (2nd Ed) by Frederick Brooks
Those who are blind to history are doomed to repeat it. This timeless classic helps you navigate around certain problems that crop up once your project reaches significant size and complexity. Technologies may change but dealing with people inside and outside the team, unknowns inherent in doing something new, and complexity involved capturing value beyond the obvious low hanging fruit, that hasn’t changed.
The Design Of Everyday Things by Donald A Norman
Everyone who has struggled with a piece of technology that does not work as they expected it to understands the value of good design. I have talked about this in more detail elsewhere. It is unfortunate that some developers blame users of their software for misunderstandings. The problems are usually not with the users but with the design of their software.
It is tempting when embarking on a software project to rush into implementing the first solution proposed. However it is better to take the time to understand the problem domain and to understand the system the eventual solution needs to be a part of. The Fifth Discipline teaches a system thinking approach that can save your project from going down a blind alley.
Getting To Yes — Negotiating Agreement Without Giving In by Roger Fisher and William Ury
Sometimes you do not have the authority to remove road blocks that are crippling your project, especially if third parties are involved. It this case you need persuasion, influence and negotiation.
The Principles of Product Development Flow: Second Generation Lean Product Development by Donald G. Reinertsen
Whether is it the work involved in implementing your project, or the business processes interacting with or embedded within your problem domain, or the workflow and processes that your implementation encourages users to follow, concepts such as scheduling, workflow and queues are everywhere. This book will help you manage that flow. To quote the book -
“What actually works is surprisingly different from the standard advice.”
Reinertsen advice is non-standard, systematic, very detailed and very good.
Design Patterns : Elements of Reusable Object-Oriented Software by GoF (Eric Gamma, Richard Helm, Ralph Johnson and John Vlissides)
Shows a way of capturing proven reusable solutions for commonly occurring problems, solutions that have been reinvented over and over again by different software teams in different industries using different technologies. For many years my teams would study a different design pattern each week during the weekly brown bag lunches.
Refactoring : Improving the Design of Existing Code by Martin Fowler
Allows you to safely keep your code flexible and easily modifiable.
Change : patterns for introducing new ideas by Mary Lynn Mann and Linda Rising
As a software developer you are automatically an agent of change (If you are successful that is. If your software doesn’t change anything that's a different problem). This book helps you introduce change into your organization.
Agile Retrospectives : Making Good Teams Great by Esther Derby and Diana Larsen
If you don’t reflect on your experiences you are unlikely to improve. This book gives you the tools to systematically and regularly assess those experiences.
A startup environment has many differences from an established company. Startups are often in a customer search phase rather than a product development. This will impact how you approach software development in each environment.
The following books are close runners up to the top 10.
Working Effectively with Legacy Code by Michael Feathers
Not everyone has the luxury of working in a greenfield environment. It can be difficult to make changes to an established application that has no unit test without introducing breaking changes. This book gives you strategies to make changes safely.
A smorgasbord of useful advice distilled from a long consulting career. I found the Satir change model very useful.
Kanban by David J. Anderson
Limit work in progress and reduce cycle times.
Agile And Iterative Development : A Manager’s Guide by Craig Larman
Compares and contrasts many light-weight processes and gives evidence that they produce better results than heavy-weight processes.
Refactoring to Patterns by Joshua Kerievsky
Either introduce and remove patterns to your code without breaking anything.
The Five Dysfunctions Of A Team : A leadership fable by Patrick Lencioni
Trust is the key. If your team is not working effectively together, then the chances of successfully completing a software project is greatly reduced.
Lean Thinking: Banish Waste and Create Wealth in Your Corporation by James P Womack & Daniel T Jones
Explains many of the core concepts of lean.
Out Of The Crisis by William Edwards Deming
How to manage variation. What is significant incident and what is random noise. How to improve practises and processes in a systematic way. The original source of many lean concepts.
Lean Software Development: An Agile Toolkit by Mary and Tom Poppendieck plus it’s two sequels
Applying lean thinking to the software industry.
Gives techniques for promoting collaboration and coordination.
The Goal: A Process of Ongoing Improvement by Eliyahu M Goldratt
Uses narrative to explain flow and the effect of queues on systems. Less systematic than The Principles of Product Development Flow. Gives some theory behind the recommended practices but lacks the comprehensive theoretical framework contained in the other book.
The Effective Executive by Peter Drucker
It is all about priorities and making sure your behaviour matches your stated priorities.
Influence : Science and Practice by Robert Cialdini
Sometimes you do not have the needed authority to achieve your objectives. As I said before you often need persuasion, influence and negotiation.
Explains many of the core concepts of lean.
Some times in software development you need to interact with third parties. This book opened my eyes to alternative ways companies and organizations can coordinate with each other. Giving examples where these methods have been effective.
Originally published at geoffburns.blogspot.com on October 15, 2009 and Updated March 12, 2017.