Architecture Recommended Reading List
Systems
- Building Evolutionary Architecture, by Ford, Parsons & Kua
- Provides a holistic overview of the current landscape of large-scale distributed systems with a perspective of how well they support on-going evolutionary changes.
- Aligns very well with edX architecture thoughts on domain-driven design and the reactive manifesto.
- Explains Fitness functions and how to use them to evolve a large-scale system.
- Some book club notes are captured at Building Evolutionary Architecture.
- Provides a holistic overview of the current landscape of large-scale distributed systems with a perspective of how well they support on-going evolutionary changes.
- Domain-driven Design, by Eric Evans
- Provides a fundamental perspective on designing software with an emphasis on modeling business needs and creating a common ubiquitous language with an ongoing partnership between engineers and knowledge experts.
- Additionally, an understanding of its design principles leads to an essential perspective on where to create boundaries around microservices and how they should interact (a.k.a., bounded contexts).
- Overall, this original book is hard to read since it is wordy and redundant. However, there are various attempts at creating more comprehensible texts for DDD, including the recommended one below.
- A group of brave and persistent edX engineers ventured into reading this original text and captured notes at Domain-Driven Design Book Club Notes.
- Patterns, Principles, and Practices of Domain-driven Design, by Scott Millet
- This is a must-read for anyone interested in designing microservices and their interactions! It clearly explains the main concepts of Domain-Driven Design, while incorporating modern ideas of Reactive Manifesto and Self-contained Systems (although not necessarily using those terms).
- It is relatively a lengthy book, but definitely not as long as Eric Evan's original DDD text - and the last chapters with coding examples can be quickly skimmed through (or even skipped).
- Building Microservices, by Sam Newman
- A good overview of microservices with a recommended design mindset.
- Information on some tools and patterns when implementing and managing microservices.
- Notes captured at Building Microservices.
- Reactive Manifesto
- Very clearly describes and explains how a well-crafted message-driven (event-passing) system architecture can lend itself to a highly Responsive, Resilient, and Elastic system.
- edX experiences in following this manifesto have thus far yielded good results.
- Self-contained Systems
- Building on top of the design principles of the Reactive Manifesto, SCS takes a more extreme standpoint and encourages entirely autonomous, highly decoupled, self-contained services that contain their own UI, business logic, and data storage, with only asynchronous communications between SCS'.
- The slides at the top of their page provide great visuals of these concepts.
- Thinking in Systems
- A superb book on systems thinking, including key concepts such stocks, flows, and feedback loops.
- It will likely change the way you look at the world around you, whether it be climate change or organizational dynamics or system architecture.
Coding Best Practices
- Clean Code, by Robert Martin (Uncle Bob)
- Good perspective on coding best practices - though some may have differing thoughts on some recommendations.
- Book club notes captured at Clean Code.
- A Philosophy of Software Design, by John Osterhaut
- Relatively easy to read, given its structure of short sections. Covers concepts of information hiding, controlling complexity, and naming.
Extensions
- Clean Architecture, by Robert Martin (Uncle Bob)
- Excellent description of how SOLID coding design principles can be taken to a higher (course-grained) component level.
- Great read to formulate ideas around plugins and extensions.
Frontend Architecture
- Atomic Design, by Brad Frost
- 1st half provides a ubiquitous language for reusable frontend components: Atoms, Molecules, Organisms, Templates, and Pages.
- 2nd half speaks to the challenges and importance of alignment throughout the organization on developing, using, and maintaining a Design System.
- https://micro-frontends.org/
- This is the resource that Nimisha used when she introduced micro-frontends as an architectural pattern at edX.
- Building Micro-Frontends, by Luca Mezzalira
- Luca was an invited guest at Arch Hour: Arch Tea with Luca Mezzalira (Pre-Work) - 2020-07-09
- His book covers both architecture theory and tactical best practices for MFEs.
Soft Skills
- Non-violent Communication: A Language of Life, by Marshall Rosenberg
- "If we change ourselves, we can change the world and changing ourselves begins with changing our language and methods of communication." - Arun Gandhi, grandson of Mahatma Gandhi
- Part 1 provides a structured method for communication: Observation, Feeling, Need, Request
- Part 2 describes empathic listening, which can be transformative in any relationship. Simply paraphrasing and echoing what you hear enables compassionate communication.
- Change Management
- ADKAR - technique to help individuals transition through changes
- Kotter's 8 steps - framework for large-scale changes
- SCARF: a brain-based model for collaborating with and influencing others - neuroscience-backed understanding of our need to move away from perceived threats and toward perceived rewards.