A lightweight dependency tracking system for mapping technical capabilities to user stories and outcomes
Project description
Mouc - Mapping Outcomes User stories and Capabilities
A lightweight dependency tracking system for software development that maps relationships between technical capabilities, user stories, and organizational outcomes.
Overview
Mouc helps engineering teams track and visualize dependencies between:
- Capabilities - Technical work your team builds
- User Stories - What other teams need from you
- Outcomes - Business/organizational goals that depend on the work
This is not a project management system. It's a technical dependency tracker that answers "what depends on what" and "what blocks what."
Installation
Install with uv (recommended):
uv pip install mouc
Or with pip:
pip install mouc
Quick Start
- Create a
feature_map.yamlfile:
metadata:
version: 1.0
team: middleware_platform
entities:
message_bus:
type: capability
name: Inter-Process Message Bus
description: |
High-performance message passing system for services.
Provides reliable, ordered message delivery.
dependencies: []
links:
- jira:INFRA-123
tags: [infrastructure]
service_communication:
type: user_story
name: Service Communication
description: Frontend team needs services to communicate
dependencies: [message_bus]
meta:
requestor: frontend_team
links:
- jira:STORY-456
q3_launch:
type: outcome
name: Q3 Product Launch
description: Launch new product features in Q3
dependencies: [service_communication]
links:
- jira:EPIC-789
meta:
target_date: 2024-Q3
- Generate documentation:
mouc doc
- Generate dependency graph:
mouc graph all > deps.dot
dot -Tpng deps.dot -o deps.png
Commands
Documentation Generation
Generate markdown documentation from your feature map:
mouc doc # Output to stdout
mouc doc --output docs.md # Output to file
mouc feature_map.yaml doc # Specify input file
Graph Generation
Generate dependency graphs in DOT format:
# All entities and relationships
mouc graph --view all
# Critical path to a specific outcome
mouc graph --view critical-path --target q3_launch
# Filter by tags
mouc graph --view filtered --tags infrastructure monitoring
# Timeline view grouped by timeframe
mouc graph --view timeline
# Timeframe-colored view (colors indicate time progression)
mouc graph --view timeframe-colored
Render graphs with Graphviz:
mouc graph --view all | dot -Tpng -o graph.png
mouc graph --view all | dot -Tsvg -o graph.svg
YAML Schema
Full Example
metadata:
version: 1.0
last_updated: 2024-01-15
team: middleware
entities:
lock_free_queue:
type: capability
name: Lock-Free Queue Implementation
description: |
High-performance thread-safe queue using atomic operations.
Performance targets:
- 10M ops/sec single producer/consumer
- Sub-microsecond latency at p99
dependencies: [] # List of entity IDs this depends on
links:
- design:[DD-123](https://docs.google.com/document/d/abc123)
- jira:INFRA-456
tags: [critical, performance] # Arbitrary tags
message_bus:
type: capability
name: Inter-Process Message Bus
description: Reliable message passing built on lock-free queue
dependencies: [lock_free_queue]
links:
- jira:INFRA-789
tags: [infrastructure]
meta:
timeframe: Q1 2025 # Optional: for timeline view
analytics_realtime:
type: user_story
name: Real-time Analytics Pipeline
description: |
Analytics team needs to process streaming data at 100Hz
with strict latency requirements.
dependencies: [message_bus] # Can depend on capabilities or other user stories
meta:
requestor: analytics_team # Who asked for this
links:
- jira:STORY-100
tags: [q2_commitment]
mobile_app:
type: outcome
name: Mobile App Launch
description: Launch new mobile application by Q3
dependencies: [analytics_realtime] # Can depend on user stories or capabilities
links:
- jira:EPIC-1000 # Always present for exec visibility
meta:
target_date: 2024-Q3
tags: [company_priority]
Field Reference
Required fields for all entities:
type: Entity type (capability,user_story, oroutcome)name: Human-readable namedescription: Can be single line or multi-paragraph markdown
Optional fields for all entities:
dependencies: List of entity IDs this depends on- Capabilities can only depend on other capabilities
- User stories can depend on capabilities or other user stories
- Outcomes can depend on any entity (capabilities, user stories, or other outcomes)
links: List of links in various formats:design:[DD-123](https://...)- Design doc with markdown linkjira:TICKET-123- Jira ticket referencehttps://...- Plain URL
tags: List of arbitrary tagsmeta: Dictionary of metadata. Common fields include:timeframe: Time period for timeline view (e.g.,"Q1 2025","Sprint 23")requestor: Team or person requesting (for user stories)target_date: Target completion date (for outcomes)
Use Cases
Find Critical Path
What needs to be done for the Q3 launch?
mouc graph --view critical-path --target q3_launch | dot -Tpng -o critical_path.png
Filter by Team
What infrastructure work is planned?
mouc graph --view filtered --tags infrastructure | dot -Tpng -o infra_work.png
Generate Reports
Create documentation for architecture review:
mouc doc --output architecture_review.md
View Timeline
Group work by time periods (quarters, sprints, etc.):
# Add timeframe metadata to entities:
# meta:
# timeframe: "Q1 2025"
# Clustered by timeframe
mouc graph --view timeline | dot -Tpng -o timeline.png
# Colored by timeframe
mouc graph --view timeframe-colored | dot -Tpng -o timeframe_colored.png
Best Practices
- Keep it current: Update dependencies when architecture changes
- Don't over-specify: Only use fields you need
- Rich descriptions: Spend time documenting critical capabilities
- Consistent tags: Agree on tag conventions with your team
- Version control: Keep feature_map.yaml in git
- Review regularly: Quarterly reviews to prune obsolete items
Development
Setup
# Clone the repository
git clone https://github.com/rnortman/mouc.git
cd mouc
# Install with development dependencies
uv pip install -e ".[dev]"
Testing
# Run tests
pytest
# Run with coverage
pytest --cov=mouc
# Type checking
pyright
# Linting
ruff check src tests
ruff format src tests
Contributing
- Fork the repository
- Create a feature branch
- Make your changes with tests
- Run linting and tests
- Submit a pull request
License
MIT License - see LICENSE file for details
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mouc-0.1.2.tar.gz.
File metadata
- Download URL: mouc-0.1.2.tar.gz
- Upload date:
- Size: 27.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9d87ac56684b2dbb7a70dc9ab16b73651d59f0c06d9578e9798aab76c091a42e
|
|
| MD5 |
2afb4ed54d292b998cad1ec7e24d4716
|
|
| BLAKE2b-256 |
93e66ab41d61b562902efc08851eda6ec5592c86335b1a91f47f67a5eaefef7f
|
File details
Details for the file mouc-0.1.2-py3-none-any.whl.
File metadata
- Download URL: mouc-0.1.2-py3-none-any.whl
- Upload date:
- Size: 17.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dcca804ca7432224fb334c6fbc7e69574c000fda5cf2b396268f4203858a0123
|
|
| MD5 |
27cb6a666a84692135ded2fda1ec9711
|
|
| BLAKE2b-256 |
6606720fbe4a9b64d672ae3e3da84bb4e16ce6dcf6a4a637bdc7cbd69d809205
|