Channel is something that passes messages between stakeholders. Channels can transform/enrich and aggregate messages.
Channels can be:
- Synchronous or asynchronous. Texting and e-mail are asynchronous. Phone and video are synchronous.
- Pushing or polling. Calling all your friends and telling them that you caught a fish is pushing. When your friends ask you about your fishing trip is polling.
- Unidirectional or bidirectional
- Delivering to a single recipient or multiple recipients
For example, a book might be considered as a message addressing potential readers’ concerns. It is delivered over the publisher channel (LeanPub, Amazon), which is:
- Asynchronous,
- Polling,
- Might be bidirectional if readers can contact the author,
- Delivers to multiple recipients,
- Aggregates chapters with each chapter being a message on its own adressing specific readers’ concerns,
- Transforms the book to multiple formats (PDF, EPUB, Web).
Examples
This section contains examples of channels in a software development enterprise consisting of human and automation stakeholders. While it might be argued that an automation stakeholder is a resource, we’ll consider it as a stakholder because it can receive messages and act on them including sending other messages.
Version control system
Version control systems like Git (GitHub, GitLab) can be considered a distributed event store and stream-processing platform similar to Apache Kafka.
Commit is an event/message, branches are streams of commits. Both humans and automated agents may receive messages by polling (pull) or pushing (web hooks).
Sample scenario:
- A developer commits a new Java file
- An automated AI assistant
- The developer
- Reviews proposed generated changes
- Makes necessary adjustments
- Merges changes
There are two demos of the above scenario - retrieving sources from GitLab, generating a test case using OpenAI, committing generated code and creating a merge request:
- TestGitLab - all functionality is implemented in a single test method with 80 lines of code leveraging Nasdanika Java Model with Nasdanika GitLab Model’s GitLabURIHandler to transparently load and parse Java files, and gitlab4j-api to commit generated sources and create a merge request.
- TestAnalyzers.testTheoryBuilder() and ReflectiveInspectors.untestedMethodInspector() implement the same functionality using Nasdanika Rules to separate loading, inspection, and commit/merge request concerns.
Version control system can be also used to pass “messsages” - files - to a web browser. Examples:
Issue management system
An issue tracking system like GitHub issues or Jira may also be considered as a channel with issues being messages.
In the above example, an automated AI assistant may:
- Create an issue to merge generated code
- Attach generated source code to the issue instead of creating a branch and a merge/pull request
- Or establish a link between the issue and the branch or merge/pull request
- Asssign the issue to the same developer
- Add the issue to the backlog or to the next/current sprint
- Link the issue to a parent issue (epic/initiative) which tracks progress of addressing technical debt
In the above example there are multiple recipients of the message (issue):
- Developer - responsible, needs to address the issue by merging code
- Scrum master - accountable, ensures that the merge is performed by the developer
- Leadership - informed via dashboards or other means about the level of code coverage and amount of effort spent on addressing technical debt. An example of message aggregation.
Maven repository
A Maven repository can be used to pass generated documentation “messaages” to development environments such as Eclipse and web browsers using solutions like https://javadoc.io/ as an intermediary channel.
P2 repository
P2 repositories can be used to deliver integrated documentation “messages” - bundles/plugins - to Eclipse IDE including Eclipse Help System server.
Nasdanika Models