The Reactive Principles

Design Principles for Distributed Applications

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.

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.

Design Principles for Cloud Native Applications

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

Learn
  • The constraints Edge Native imposes on design

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

The Reactive Principles

Learn
  • 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 2020-11-06