Architecture Recommended Reading List

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