Vivek Jalondhara. All writing

Frontend

From Datablocks to React Flow: Build Something Useful First

By Vivek Jalondhara · 5 min read
Published

React Flow began inside Datablocks. Its origin offers a practical way to think about useful abstractions, extraction, and maintenance.

An internal tool can contain an idea worth sharing before anyone plans a developer platform. In their March 2022 React Flow release post, Moritz Klack and Christopher Möller explain that the library was built for Datablocks, their flow-based data-processing tool, before being open sourced.

That origin is a useful starting point for a developer building a demanding interface. The encouragement is concrete: a real product problem can reveal a reusable boundary. The analysis below applies that idea to an educational AV editor exercise, without treating React Flow’s outcome as a promise for every extraction.

Start with the problem that already exists

The founders’ account describes code developed for a specific product and later shared as a library. Their 2022 announcement also introduced a subscription offering intended to support further development and maintenance. Those are the historical facts relevant here; popularity figures from that announcement are not needed to explain the engineering lesson.

For an AV workspace, the immediate problem might be placing equipment and connecting ports while preserving usable selection and navigation. Solving that workflow gives an abstraction concrete inputs and failure cases. Designing a universal editor before one useful workflow works removes that feedback.

Separate the reusable mechanism from its meaning

A node editor can manage positions, selections, and connection gestures without deciding whether a device is a microphone or an amplifier. The AV product still owns port compatibility, equipment identity, and documentation rules. That division makes a component reusable without making the domain generic.

React Flow’s custom-node API illustrates an extension boundary: application React components supply node content while the library provides surrounding interactions. This is a mechanism to evaluate, not an instruction to copy its architecture wholesale. A different product may need a much smaller reusable component.

Use a second consumer as an experiment

Before declaring an internal editor helper a platform, try it in a second bounded context. A floor-plan selector and a signal-diagram selector may share selection behaviour while needing different coordinate rules. If the extracted API requires many mode flags, the apparent commonality may be superficial.

The experiment should allow failure. Keeping two small implementations can be clearer than maintaining a generic layer that every consumer must work around. Reuse is valuable when the shared behaviour is stable and the remaining differences are explicit, not merely when two files look similar.

Write the boundary so another person can use it

An extraction becomes reviewable when its contract says who owns state, which events it emits, and what it leaves to the caller. A small example should demonstrate one normal interaction and one cancellation or invalid action. That is more useful than describing the helper as flexible or extensible.

React’s custom Hook guidance provides a related caution: reusing stateful logic does not automatically create shared state. Two callers can have separate instances. In an AV editor, that distinction determines whether two views observe one equipment selection or accidentally create independent selections with similar names.

Include maintenance in the success condition

Publishing changes the audience for a breaking change. An internal caller can move with the implementation; an external consumer may depend on an older contract. Versioning, examples, issue triage, and migration guidance become part of the artefact’s usefulness.

The practical response is to document a supported scope before offering broad guarantees. A focused selection helper can explicitly exclude collaboration and persistent history. That does not make it incomplete. It gives maintainers and users a boundary they can test and discuss when requirements change.

Allow a worthwhile result to stay small

An internal component, a technical article, or a clear failed experiment can be a valuable result. None needs to become a major open-source project to justify the work. The useful habit is recognizing a recurring problem, testing a boundary, and making the result understandable to someone else.

The portfolio’s AV case study already describes using React Flow to concentrate on equipment and engineering behaviour. The exercise below asks a narrower question: what small piece of that kind of workflow could be explained independently? It is a learning brief, not a claim that private project code can be published.

An extraction experiment with a small finish line

Use synthetic equipment data and a fresh educational implementation. The aim is to test a boundary, not to publish private code or reproduce React Flow.

Illustrative example · Task brief · Simplified for explanation

Candidate: selection behavior shared by two diagram views.
First consumer: a small signal diagram with three devices.
Second consumer: a floor-plan view of the same device identities.
Caller owns: equipment records, coordinates, permissions, and saving.
Helper owns: selected placement IDs and selection-change events.
Verify: selecting, clearing, and removing a selected placement.
Reject extraction if: consumers require incompatible selection semantics.
Deliverable: one documented interface and two synthetic examples.
How the example fits together
  1. Solve one concrete interface problem
  2. Identify a stable mechanism
  3. Try a second bounded consumer
  4. Document the useful boundary

Conceptual flow for the example above.

Tradeoff to keep in mind

A shared library adds a compatibility obligation. A smaller internal abstraction may provide most of the benefit when requirements still change frequently.

Related project: AV Design & Engineering Suite →

References & further reading

Related posts