Alexander Bird Software • Blog

Learning to build useful, valuable software as part of a team.

Reading List

Books I've found helpful or want to read soon

Before you get into it: I've sorted these to make them easier to browse, but I'm not totally satisfied with the categories — they don't do the books justice. So, take the headings with a grain of salt.

Software Structure

Books about how to structure your software
Building Evolutionary Architectures
Ford, Parsons, & Kua
How to build software that maintains its virtues as it grows and changes
Domain-Driven Design
Tackling Complexity in the Heart of Software
How to architect software to make that solves real problems and can be adapted easily to solve new problems (by making it easy to collaborate with non-technical domain experts).
Improving the Design of Existing Code
Detailed instructions and examples about how to change code without breaking it.
Design Patterns
Elements of Reusable Object-Oriented Software
Gamma, Helm, Johnson, & Vlissides
An inventory of ways to structure your code to solve certain technical problems (including examples and notes on when to prefer one over the other)

Process & People

Books about software development process and how we collaborate
Software Design X-Rays
Fix Technical Debt with Behavioral Code Analysis
Uncovering coupling, pain-points, technical debt, who has what expertise, team boundaries, and many other useful things using your git repository, git commands, and bash.
Lean Thinking
Banish Waste and Create Wealth in Your Corporation
Womack & Jones
How to focus on the useful things and remove the useless things so you can deliver more value more effectively. Many case studies.
Fried & Hansson
Advice about professional attitudes and values that lead to healthy and effective software development
The Practice of Creativity
A Manual for Dynamic Group Problem-Solving
How to run a really effective brainstorming session

Design & Planning

Books about how we decide what software to build
User Story Mapping
Discover the whole story, build the right product
An approach to eliciting, organizing, and collaborating on the details of what the software should do without losing sight of the big picture. So much better than a flat backlog in Jira.
No Estimates
How to measure project progress without estimating
Estimates help us plan because they help us answer several important questions. This book presents an alternative method that is more effective and less effort than traditional estimates.

Web UI

Don’t Make Me Think!
A Common Sense Approach to Web Usability
Defensive Design for the Web
How to improve error messages, help, forms, and other crisis points


Algorithms in a Nutshell
A Desktop Quick Reference
Pollice, Selkow, & Heineman
Practical suggestions for writing performance-optimized software


Implementing Domain-Driven Design
Domain-Driven Design part two.

Want to Read

Analysis Patterns
Reusable Object Models
How Google Works
Building a Culture of Freedom and Responsibility
The Lean Startup
How Today's Entrepreneurs Use Continuous Innovation to Create Radically Successful Businesses
Team Topologies
Organizing Business and Technology Teams for Fast Flow
Skelton & Pais
Living Documentation by design, with Domain-Driven Design
Accelerate Delivery Through Continuous Investment on Knowledge
Competing with Unicorns
How the World’s Best Companies Ship Software and Work Differently
Shape Up
Stop Running in Circles and Ship Work that Matters
Domain Storytelling
A Collaborative Modeling Method
Hofer & Schwentner
Waltzing with Bears
Managing Risk on Software Projects
DeMarko & Lister
Working Effectively with Legacy Code
Extreme Programming Explained
Embrace Change
Beck & Andres
An Elegant Puzzle
Systems of Engineering Management