paper
active
1998
paper:2021-11-10-garethrees-p27-pdf-c6b5ce

Garden of Applications

ByNicholas Jacobs

TL;DR

The Garden of Applications pattern language establishes that large-scale Java systems can achieve piecemeal growth without upfront master plans by structuring the runtime architecture around 5 interlocking patterns: Backplane, Standard Applications, Interface Repository, Bootstrap Applications, and Configuration Services. The core technical contribution is the Backplane construct—implemented as a singleton derived from java.awt.applet and exploiting Java's late-binding class-loading mechanism—which externalizes lifecycle management (init, start, stop, destroy) as an explicit runtime contract that all Standard Applications must satisfy, enabling dynamic application loading into the Java Virtual Machine without compile-time coupling. The Interface Repository, inspired by CORBA's hierarchical namespace, maps symbolic names to public interface implementations so that new functionality can be injected or replaced at runtime without modifying the Backplane itself; Bootstrap Applications load this repository during system initialization, prior to user-facing application launch. The working system delivered real-time security prices and news headlines via a Java-enabled web browser, and the framework was validated when a mid-project requirement to change news-display behavior was accommodated purely through the Interface Repository without Backplane modification. The pattern language—presented at PLoP-98 and shepherded by Kent Beck—argues that this architecture makes Alexander's notion of piecemeal growth directly applicable to software: stable meta-constructs act as a trellis against which application-level vines grow and change, provided a Revision Control System buffers experimental development from production.

What to take away

  1. 1. The Backplane is implemented as a Java singleton (Backplane.getInstance()) derived from java.awt.applet, inheriting the applet lifecycle states init, start, stop, and destroy, and chains these state changes to all loaded Standard Applications.
  2. 2. Java's late-binding class loading (Class.forName() in AppManager.init()) is elevated from loading individual classes to loading entire applications at runtime, enabling the system to add or replace functionality without recompilation.
  3. 3. The Interface Repository—inspired by CORBA's hierarchical namespace—maps unique string keys (typically the interface class name) to live implementation objects, allowing any application to fetch a capability via fetchInterface() without holding a direct reference to the provider.
  4. 4. Bootstrap Applications are a special subclass of Standard Applications that are loaded by the Backplane during system initialization, before user-selectable applications are available, and typically have a lifespan equal to the Backplane itself.
  5. 5. A mid-project requirement to change how news stories were displayed was accommodated by introducing the Interface Repository and Bootstrap Applications without modifying the Backplane, validating the pattern's core claim that the Backplane can remain stable under evolving requirements.
  6. 6. The SwingDesktop implementation defaults to a 640×480 window size when ConfigurationService cannot parse width/height properties from backplane.cfg, demonstrating the Configuration Services pattern's role as a runtime-configurable alternative to compile-time constants.
  7. 7. The Standard Application pattern is explicitly compared to Alexander's MAIN ENTRANCE (Pattern 110) in A Pattern Language, arguing that a known entry point (the abstract StandardApp superclass) serves the same orientation function for software maintainers as a building's entrance does for inhabitants.
  8. 8. The paper raises the open hypothesis that certain Java idioms—specifically dynamic class loading and explicit lifecycle management—are universal across client-side and server-side contexts, citing the then-recently released Java Server Toolkit as suggestive parallel evidence, but does not empirically test this claim.
  9. 9. A researcher replicating this architecture should implement the Backplane as a singleton that reads its list of Bootstrap Applications from a flat configuration file (backplane.cfg) parsed by a Properties object at first instantiation of ConfigurationService, then sequentially calls init() and start() on each loaded StandardApp.
  10. 10. The pattern language is explicitly described as incomplete, with the author acknowledging that additional constructs that contributed to the system's success—beyond the 5 documented patterns—remain undocumented and represent unfinished work presented at PLoP-98.

Peer brief — for seminar discussion

Presented at PLoP-98 and shepherded by Kent Beck, this paper documents a pattern language of 5 interlocking patterns—Garden of Applications, Backplane, Standard Applications, Interface Repository, and Bootstrap Applications—extracted from a production Java system that delivered real-time securities prices and news headlines through a Java-enabled browser. The system was built under an explicit requirement that the final architecture was unknown at project outset, which ruled out conventional upfront master planning and motivated a framework designed for piecemeal growth in Christopher Alexander's sense. The Backplane, the paper's load-bearing construct, is implemented as a Java singleton extending java.awt.applet and exposing four lifecycle methods (init, start, stop, destroy) that it chains to every loaded Standard Application; Java's Class.forName() late-binding mechanism is promoted from class-level to application-level dynamic loading, meaning new applications can be added at runtime by updating a configuration file rather than recompiling. The Interface Repository—architecturally inspired by CORBA's naming service—maps string-keyed symbolic names to live interface implementations via registerInterface() and fetchInterface(), so that cross-application dependencies are mediated through a runtime registry rather than compile-time imports. Bootstrap Applications are a restricted subclass of Standard Applications that the Backplane loads automatically during initialization, before user-launched applications appear, and they pre-populate the Interface Repository with system-wide services. The load-bearing empirical claim is that a mid-project demand to change news-display behavior was absorbed entirely through the Interface Repository without touching the Backplane, which the paper treats as validation that the Backplane can function as a stable meta-construct even under evolving requirements. The implied prediction is that this same architecture generalizes from GUI client applications to server-side contexts, with the Java Server Toolkit cited as suggestive but unexamined evidence. An alternative design the paper could have evaluated is a straightforward publish/subscribe (observable/observer) bus—acknowledged in footnote 4 as a MESSAGE BUS pattern—which it defers to rather than replaces, leaving unresolved when the Interface Repository's pull-based lookup is preferable to event-driven notification. The most pointed pushback a critical reader would raise is the single-system evidentiary basis: the entire pattern language is abstracted from one project, and the paper offers no comparative data, no independent replication, and no failure cases, making it impossible to distinguish patterns that are genuinely generative from idioms that happened to work under one team's constraints. The paper explicitly concedes the language is incomplete and that additional constructs from the same project remain undocumented, which further limits the ability to assess whether the 5 published patterns are the causally important ones or simply the most legible ones in retrospect.

Frameworks (5)

Claims (15)

Questions (2)

Related work— refs + corpus + external arXiv

Cited / in-corpus / arXiv badges show which signals surfaced each row. Multi-source rows weighted higher.

Similar preprints — Semantic Scholar

Cross-corpus bridges (2)

same_concept_as · Nomic cosine

External markdown files that talk about the same concept as this entity.

  • alexander
    **GARDEN OF APPLICATIONS**papers/extracted/2021-11-10_garethrees_P27.pdf_c6b5ce.md0.863
  • alexander
    Source: https://subconscious.substack.com/p/simple-seedsarticles/substack/2022-09-20_Stefan-Lesser_subconscious.substack.com_p-simple-seeds_635400.md0.761