Blog

Alexander Bird Software • Blog

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

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
Evans
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).
Refactoring
Improving the Design of Existing Code
Fowler
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
Tornhill
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.
Rework
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
Prince
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
Patton
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
Duarte
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
Krug
Defensive Design for the Web
How to improve error messages, help, forms, and other crisis points
37signals

Other

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

Reading

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

Want to Read

Analysis Patterns
Reusable Object Models
Fowler
How Google Works
Schmidt
Powerful
Building a Culture of Freedom and Responsibility
McCord
The Lean Startup
How Today's Entrepreneurs Use Continuous Innovation to Create Radically Successful Businesses
Ries
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
Martraire
Competing with Unicorns
How the World’s Best Companies Ship Software and Work Differently
Rasmusson
Shape Up
Stop Running in Circles and Ship Work that Matters
Singer
Domain Storytelling
A Collaborative Modeling Method
Hofer & Schwentner
Waltzing with Bears
Managing Risk on Software Projects
DeMarko & Lister
Working Effectively with Legacy Code
Feathers
Extreme Programming Explained
Embrace Change
Beck & Andres
An Elegant Puzzle
Systems of Engineering Management
Larson