Why Reactive?

A person described as being reactive is generally viewed as less mature and responsible than a person who is proactive. This perception doesn’t consider the nature of actions taken by entities, such as people. Normally a person who is considered proactive is actually reacting to one or more stimuli, but they decide that reacting sooner rather than later would be in their best interests. Still, the person has reacted, not pro-acted, as if they foresaw a problem without any external cause.

Reactive People
Are people ever really proactive, or only reactive?

This, in fact, is a force of nature, which is proven by physics. “Sir Isaac Newton first presented his three laws of motion in the “Principia Mathematica Philosophiae Naturalis” in 1686. His third law states that for every action (force) in nature there is an equal and opposite reaction. In other words, if object A exerts a force on object B, then object B also exerts an equal and opposite force on object A. Notice that the forces are exerted on different objects.” [NASA]

In the quoted reference, Newton’s third law is employed to explain aircraft lift and thrust: “For aircraft, the [principle] of action and reaction is very important. It helps to explain the generation of lift from an airfoil. In this problem, the air is deflected downward by the action of the airfoil, and in reaction the wing is pushed upward. Similarly, for a spinning ball, the air is deflected to one side, and the ball reacts by moving in the opposite direction. A jet engine also produces thrust through action and reaction. The engine produces hot exhaust gases which flow out the back of the engine. In reaction, a thrusting force is produced in the opposite direction.” [NASA]

Thus, there is always an action that produces a stimulus on an object, such as a person, to react in a given way. Although we can expect a wing and a ball to react to the described stimulus in a specific way, that isn’t true of all objects. When a free-thinking person is involved, their reaction is often personalized.

Software objects can also offer a number of reactions to a given stimulus, yet these generally have a finite and even rather limited set of reactions that are preprogrammed[1]. Even with a single predetermined reaction to a given stimulus, it is not at all unusual to describe any given software object as reactive.

The Nature of Objects

The very nature of objects, even software objects, is to be reactive. When Alan Kay architected and designed the Smalltalk programming language, among his chief goals was to facilitate message sending between objects. He once said: “The big idea is messaging.” [Kay-Messaging]

Object A sends a message to object B.
Messaging is the big idea: object A sends a message to object B.

The message-sending paradigm requires objects to be reactive, because an object doesn’t know what message it will next receive. Thus, this leads to what Kay considered the full meaning of object-oriented programming: “OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things.” [Kay-OOP]

Reactive Messaging and Communication

Thus, when an object receives a message it must react to it. Humans receive and react to messages all the time. One form of messaging between humans is called communication. When one person speaks to one or more other people, they have in essence sent a message or a stream of messages. When one or more people receive those messages and act on them, they are reactive. Sometimes the reaction is to respond with one or more communication messages. Another common reaction is to commit the pertinent parts of the communication to memory and plan to react to it in a more specific way later on.

Team communication model
Ubiquitous team communication modeled as software in a context.

A vital aspect of human communication is in discussing, learning, and discovering innovation in software products. The natural outcome of a team’s communication, learning, more communication and more learning, and eventual discovery, makes for its own sort of language. Domain-Driven Design (DDD) promotes and supports the concepts of team language development. It offers a contextual boundary as a way to separate the team’s language as a set of terms with specific meaning and rules definitions as ubiquitous within the team’s communication in spoken, written, drawn, and programmed as a set of tests and the software model. This is a Bounded Context and the Ubiquitous Language that it gathers within the boundary.

Combining the Bounded Context and the Ubiquitous Language with a Reactive software architecture, design, and implementation makes for a powerful cohesion of software concepts as an excellent way for teams to express their communication as software.

Reference

[NASA] Newton’s Third Law Applied to Aerodynamics: https://www.grc.nasa.gov/www/k-12/airplane/newton3.html

[Kay-Messaging] https://wiki.c2.com/?AlanKayOnMessaging

[Kay-OOP] http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en

[DDD] https://kalele.io/books/

1. We could of course apply randomality to the reactions of software, but unless the randomness provides some benefit there is no point in doing so other than to attempt to prove that an infinite number of reactions is possible. Even so, the limited range of numeric types would still ultimately yield finality of reactions, even if it would require tens of thousands of years to prove it. This notwithstanding, the host computer would experience hardware failures long before that point.

More to explore

Reactive DDD: Modeling Uncertainty

Domain-Driven Design supports reactive architecture and programming. Still, reactive introduces uncertainty. Back in 2003, the way that Domain-Driven Design was used and

Scroll to Top