This is a list of reading for someone who wants to study software design.

There are many resources available, but they overlap a lot. With this list I try to provide good coverage of the subject and little redundancy. If you have the opportunity, I think it’s worth to read everything on this list (or the alternatives).

If you only read a single book, it better be Code Complete. Do it a couple of times.

I will update the page over time as I remember other relevant resources or find better ones.

Analysis

  • Structured Analysis and System Specification by Tom DeMarco explains data flow analysis really well. An alternative is Modern Structured Analysis, Yourdon.

  • Writing Effective Use Cases by Alistair Cockburn - a great guide on discovering use cases.

Design Fundamentals

  • Code Complete by McConnel - has a couple of valuable sections on design. It’s also the top one book for any software developer overall.
  • The Practical Guide to Structured Systems Design by Meilir Page-Jones - covers design fundamentals in depth. Or try Structured Design: Fundamentals of a Discipline of Computer Program and Systems Design.

Architecture

  • Documenting Software Architectures - explains solution-level design patterns and documentation approach.

Object-Oriented Design

  • Patterns of Enterprise Application Architecture, Fowler - presents solutions to design problems typical for enterprise software.

  • Agile Principles, Patterns and Practices, Martin - covers object-oriented design principles, such as SOLID.

  • Head First Design Patterns nicely explains the principles behind object-oriented design patterns. The alternative is Design Patterns Elements of Reusable Object-Oriented Software. It is the classic, it is more comprehensive, but also harder to read.

  • Domain-Driven Design by Eric Evans - the classic on domain driven design. You must read it to the end though because the most important stuff is in the second half of the book. I also like Implementing Domain-Driven Design, Vaughn Vernon. It has better ordering of material and covers some new concepts.