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.
  • 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
    • 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

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