The Reactive Principles

Design Principles for Distributed Applications

This document provides guidance and techniques established among experienced Reactive practitioners for building individual services, applications, and whole systems. As a companion to the Reactive Manifesto, new tab it incorporates the ideas, paradigms, methods, and patterns from both Reactive Programming and Reactive Systems into a set of practical principles that software architects and developers can apply in their transformative work.

Our purpose is to help businesses realize the efficiencies inherent to using Reactive. Our collective experience shows that these principles enable the design and implementation of highly concurrent and distributed software that is performant, scalable, and resilient, while at the same time conserving resources when deploying, operating, and maintaining it. Further application of Reactive principles will allow us as a society to depend on software for making our diverse and distributed civilization more robust.

Written by Jonas Bonér—with help (roughly in order of contribution level) from: Roland Kuhn, Ben Christensen, Peter Vlugter, Josh Long, Sergey Bykov, Ben Hindman, Vaughn Vernon, Clement Escoffier, James Roper, Michael Behrendt, Kresten Krab Thorup, Colin Breck, Allard Buijze, Derek Collison, Viktor Klang, Ben Hale, Steve Gury, Tyler Jewell, James Ward, Stephan Ewen, and Ryland Degnan.

Design Principles for Cloud Native Applications

  • How the Reactive approach to Cloud Native provides benefits

  • Why Cloud Native infrastructure alone isn’t enough to achieve elasticity, scalability, and resilience

Design Principles for Edge Native Applications

  • The constraints Edge Native imposes on design

  • How to avoid impedance mismatch between Edge Native and Cloud Native applications

The Reactive Principles

  • What makes a system Reactive

  • How to:

    • Stay responsive

    • Accept uncertainty

    • Embrace failure

    • Assert autonomy

    • Tailor consistency

    • Decouple time

    • Decouple space

    • Handle dynamics

The Reactive Patterns

Learn how the following patterns contribute to Reactive design
  • Partition State

  • Communicate Facts

  • Isolate Mutations

  • Coordinate Dataflow

  • Localize State

  • Observe Communications

Version 1.0 Published 2022-06-15