The Reactive Manifesto names responsive, resilient, elastic and message-driven - how do those four properties depend on one another?
answer
- four properties, not four equal virtues
- only one of them names a person
- two of the four are means
- goal, means, foundation - three layers
- message passing underneath both means
basics
~20 sResponsiveness is the goal. Resilience and elasticity are the means that keep it true under failure and under changing load. Asynchronous message passing is the foundation both means stand on. They are four layers, not four equal virtues.
solid answer
~50 sThe four are layered rather than parallel. Responsiveness - a named request answering inside a bound at a stated load - is the only one defined in terms of somebody outside the system, so it is the goal and the other three exist to keep it true. Resilience keeps it true when something breaks: a failure is contained inside one component and recovery is delegated to something that is not failing, so the rest of the system still answers. Elasticity keeps it true when load moves, in both directions, provided no shared serialized component sits where replication cannot relieve it. Both means rest on asynchronous message passing between components, because that is what lets a receiving side decide when it takes more work and lets a failure travel as data instead of stalling a caller.
go deeper
Learn the four names and, more importantly, that one of them is the outcome and the rest serve it. Being able to say which property a user would notice puts you ahead of a recital.
Explain the layering: responsiveness as the goal, resilience and elasticity as the two conditions under which it survives failure and load, asynchronous message passing as what makes those two implementable. Attach one measurement to each.
Show how you would check each claim in a running system - the load curve, the injected failure with a control path, the ramp back down - and say which claim you would distrust first in a service that asserts all four.
Own the ranking. Set the response-time bound as the acceptance criterion the organisation defends, and treat the other three as instruments that must show, with evidence, that they did not spend the goal they were meant to protect.
## What the four properties claim The Reactive Manifesto names four properties a system may claim: **responsive**, **resilient**, **elastic** and **message-driven**. They are usually recited as a flat list of adjectives, and that recital is exactly what an interviewer is listening for, because it is what a candidate says when none of the four has ever been measured. The four are layered: one is the goal, two are the means by which the goal survives contact with real load and real failure, and one is the foundation the two means are built on. - **Responsive** - a named request answers within a bound that holds under the load and the failures the system claims to handle. It is the only property of the four stated in terms of somebody outside the system. - **Resilient** - a failure is contained inside one component, and recovery is delegated to something outside the failed part, so the rest keeps answering inside the bound. - **Elastic** - the resources committed track load in both directions, and the bound holds across the range, provided nothing shared and serialized sits in the path where replication cannot relieve it. - **Message-driven** - components communicate by asynchronous messages across a boundary, instead of one component holding a resource open while another works. ## The dependency order, with the evidence for each | Property | Layer | The claim | Evidence that settles it | |---|---|---|---| | Responsive | goal | a stated percentile of a named request stays under a stated bound at a stated arrival rate | a load curve: that percentile plotted against arrival rate, including where the bound breaks | | Resilient | means | one component failing does not move the bound for requests that do not depend on it | an injected failure under load, measured against a control path that never touches it | | Elastic | means | the bound holds across a load range, and resources are released again when load falls | a ramp up and back down with the percentile measured through both halves | | Message-driven | foundation | no component is pinned to another's progress; results and failures arrive as messages | a boundary where a slow recipient changes what the sender does, not how long it waits | Read the table downwards and the order is visible. Only the first row mentions a person. The next two rows are conditions under which the first row stays true - one for failure, one for load. The last row is a structural precondition for the middle two. ## Why two of the four are means and not virtues A response-time bound is easy to satisfy in a benchmark and hard to satisfy in the world, and the two ways the world breaks it are failure and load. 1. **Without resilience**, the bound holds only while nothing fails, which makes it a claim about luck. Containment is what converts a component failure from a system-wide latency event into a local one. 2. **Without elasticity**, the bound holds only at the one load it was measured at. A system sized for the average of a spiky workload misses its bound exactly when the most people are watching. 3. **With both**, the bound becomes a statement with conditions attached, which is the only kind of statement that can be checked. Neither means is wanted for itself. Nobody experiences containment; they experience a page that still answered while something behind it was broken. ## Why message passing sits underneath Asynchronous message passing between components is not a fourth benefit alongside the others. It is what makes the two means implementable: - A boundary that receives messages can decide when it takes the next one, so the amount of work admitted is bounded at the boundary rather than pushed through on arrival. - A recipient addressed as a component rather than held by a caller's stack can be replicated, replaced or moved while callers keep sending - the precondition for elasticity and for recovery. - A failure can travel as a message to something that is not itself failing, instead of unwinding the caller's call stack and becoming the caller's failure - the precondition for containment. A system claiming resilience or elasticity while every component waits on the next one synchronously is usually claiming a wish rather than a property. ## Where the order gets stated backwards 1. **Message-driven read as the goal.** Teams announce asynchronous internals as the achievement. It is the foundation, and on its own it is invisible to users. 2. **Responsiveness read as raw speed.** Measured on an idle system it means nothing; the property is about a bound under stated conditions. 3. **Elasticity read as growth only.** Releasing resources afterwards without a latency regression is the harder half, and it is what shows there is no hidden contention point that only tolerates growth. ## What this sounds like in an interview The strong answer states the layering in one sentence, then attaches a measurement to each property. The weak answer lists four adjectives in the order it memorised them. The follow-up an interviewer usually reaches for is "which of the four would you check first in a service that claims all of them?" - and the answer is the goal, because the other three are only interesting insofar as it holds.
- Which of the four is measured in units somebody outside the system would recognise?Responsiveness. It is a bound on the response time of a named request at a stated load, which a user experiences directly. The other three are measured indirectly, by whether that bound survives an injected failure, a load ramp, or a component being replaced while callers keep sending.
- Does elasticity include shrinking, or only growing to meet demand?Both directions, and shrinking is the harder half. Releasing resources after a spike without the response-time bound regressing shows that nothing in the path depends on the extra capacity remaining, and that no shared serialized component was quietly absorbing the difference. A system that can only grow has been sized, not made elastic.
- A team says its system is resilient because no component has failed in a year. What is wrong with that as evidence?It reports an absence of events, not a property. The claim is that when a component does fail, the failure stays inside it and the bound holds elsewhere. Only a deliberately injected failure, under load, with a path that never touches the failed component as a control, shows whether that is true.
saying these in an interview costs you the question
- Reciting the four adjectives with no relation between them
- Calling message-driven a benefit rather than the foundation
- Treating elasticity as growth only, never release
- Claiming resilience means components do not fail
- Measuring responsiveness on an idle system