Message Bus Project Charter
From EDURange
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?)