A book worth reading is for sure the book “The Architecture of Open Source Applications” (eds. Amy Brown and Greg Wilson ). in it, the authors of twenty-five open source applications explain how their software is structured, and why. What are each program’s major components? How do they interact? And what did their builders learn during their development? […] If you are a junior developer, and want to learn how your more experienced colleagues think, this book is the place to start. If you are an intermediate or senior developer, and want to see how your peers have solved hard design problems, this book can help you too.
I’ve learnt a lot reading the book. Reading ALL these “lessons learnt” really helps you to see architecture design with a different perspective. Let me just give you 15 of the many wisdom pearls on software architecture you’ll learn when you buy the book (sure you can also read it online but remember that all royalties from these sales will be donated to Amnesty International).
15 wisdom pearls on software architecture (in no particular order; enjoy!):
- The structure of a program […] clearly is not designed up front. It is something that develops over time. James Crook
- It’s difficult to think clearly about program architecture after code debugging begins. Margo Seltzer and Keith Bostic
- Two copies of any specific functionality in your code guarantees that one of them is incorrectly implemented. Margo Seltzer and Keith Bostic
- Developers are happier and more productive when using the tools they are most familiar with. By allowing developers to use their preferred tools, projects can take the best advantage of their most important resource: the developer. Bill Hoffman and Kenneth Martin
- You don’t have to maintain backward compatibility with something that users don’t have access to. Bill Hoffman and Kenneth Martin
- The choice of architecture seems to canalize or direct development towards a particular set of features. C. Titus Brown and Rosangela Canino-koning
- API IS forever. A stable API is a contract between the client or API consumer and the provider. Kim Moir
- It is hardly ever worth it to spend a lot of time designing an application to be 100% future-proof. it is quite likely that a painstaking design phase will introduce complexities that
you will never need because the scenarios you prepared for never happen. Emil Ivov
- A Package that enters the standard library has one foot in the grave. Tarek Ziadé
- Design principle. Accept that one programmer is finite. Eric Allman.
- Most features in the system were designed as direct response to user feedback. However,[…] being responsive to users does not necessarily mean doing exactly what they ask for. Juliana Freire, David Koop, Emanuele Santos, Carlos Scheidegger, Claudio Silva, and Huy T. Vo
- The near-term future focuses more on managing the growth of the community as well as the software. Berk Geveci and Will Schroeder
- Scalability has very little to do with low-level performance but instead is a product of overall design. Chris Davis
- You can learn much more from closely studying actual failures than from theorizing about superior strategies. Chris Davis.
- Keeping replicas of your data on multiple machines consistent with one-another is hard. Adam Marcus
And if you enjoyed this wisdom pearls, you may also enjoy the book Delft Students on Software Architecture: a collection of architectural descriptions of open source software systems written by students from Delft University of Technology during a master-level course taking place in the spring of 2015. In this book, the Delft students chose an open source project (such as the Play Framework, Diaspora, Vagrant or Jekyll) and spent one semester studying and contributing to it with the final goal of understanding and describing the software architecture of those projects. The complete book is available on this GitHub project so feel free to contribute to it yourself if you happen to know any of the projects (or just have some comments while reading it). Definitely, a different way of teaching software architecture while at the same time contributing to our knowledge of the field.