Message Bus Project Charter

From EDURange
Jump to navigationJump to search

Scoping Outline:

Challenges:

  • What: "Create ways to..." / "Redesign the..."
    • Design a local message bus that allows independently developed software components to communicate through typed broadcast topics without tightly coupling producers to consumers.
    • Create a communication substrate whose traffic can be captured, replayed, and inspected, so that system behavior can be reconstructed after the fact.
    • Support early-stage teams in which contributors may be junior developers, by making the ordinary publishing and subscribing interface simple while centralizing transport, provenance, and capture policy.
  • For Whom: "For <user>... (considering <other stakeholders>)..."
    • For those building modular, event-driven experimental applications, especially teams where independently authored processors, interfaces, and services need to cooperate through stable contracts.
    • For maintainers, researchers, and outside collaborators who need replayable records of component interaction sufficient for debugging, validation, and post hoc analysis.
  • Context: "In a world where..." / "Keeping in mind that..."
    • Keeping in mind that small research and academic software teams often need many contributors to work in parallel before all production infrastructure is complete.
    • Keeping in mind that junior contributors should be able to write useful processors and application components without personally implementing persistence, provenance, or transport policy.
    • Keeping in mind that event streams and request/reply interactions between components may become important evidence when reconstructing system behavior.

Considerations:

  • Goals: "We aim to..."
    • Provide a local publish-subscribe API with minimal friction for ordinary component authors.
    • Provide transport-level message identity, topic identity, writer identity, sequence numbering, and bus ingress timing.
    • Support broad capture of messages crossing component boundaries so runs can be replayed or inspected.
    • Support request/reply interactions without requiring direct component coupling.
    • Support fixture playback and mock services so processors can be developed before production instruments, stores, or external integrations are ready.
    • Allow multiple processors or interfaces to operate in parallel for comparison, A/B testing, and fault isolation.
    • Remain self-contained enough to be used outside the initial use case application that motivated it.
  • Crux: "We really need to..."
    • Make component communication simple for contributors while making message flow accountable enough for replay, debugging, and later research use.
    • Centralize transport discipline and capture-friendly metadata without forcing every component author to understand the full governance model.

Framing Checklist:

We should discuss these qualities:

  • You tried on some behaviors (like empathy and rapid prototyping) on a current project before launching a new one.
  • Project is a human, subjective challenge (understanding people is key to the project success).
  • Project is geared toward discovery (not optimization).
  • Challenge can be solved with a product, service, or event, not a strategy or system (for your first project).
  • Those most affected by the work are acknowledged as actors with agency, not simply receivers of outcomes.
  • Framing doesn’t embed a solution.
  • Framing doesn’t (unintentionally) assume the form of the solution.
  • Framing doesn’t (unintentionally) presume people’s needs.
  • Goal of the project work is clear without dictating the specific solution outcome.
  • You and your team actually care about this challenge. (If not, why are you doing it?)