Managing Workstreams and Dependencies
Master workstreams (teams) and dependencies to create accurate project plan forecasts. Learn how capacity, concurrency, and dependencies affect your timeline.
What is a Workstream?
A workstream represents a team or group of people working on your project plan. Think of workstreams as:
- Development teams (Frontend, Backend, Mobile)
- Functional groups (Design, QA, DevOps)
- Individual contributors working independently
Examples:
- "Frontend Team" (5 developers)
- "Design" (2 designers)
- "Backend Services" (3 engineers)
- "QA Team" (2 testers)
Workstream Properties
Name (required)
The display name for the team.
name: Frontend TeamCapacity (required)
How much work the team can complete per week, in your project's units.
capacity: 10What capacity means:
- If using story points: "This team completes 10 story points per week"
- If using days: "This team has 10 person-days of capacity per week"
- If using hours: "This team has 10 hours per week"
Calculating capacity:
- Team size × velocity per person = capacity
- Example: 5 developers × 2 points each = 10 points/week
- Or use historical data from past sprints
Work Items (required)
The list of work items this workstream will complete.
work_items:
- id: feature-a
name: Feature A
size: 20
- id: feature-b
name: Feature B
size: 30Start Delay (optional)
Delay when the workstream begins work, in weeks.
start_delay: 2Use cases:
- Team not available immediately
- Waiting for hiring to complete
- Phased project start dates
WIP Limit / Max Concurrent Items (optional)
Maximum number of work items the team can work on simultaneously (Work In Progress limit).
max_concurrent_items: 2Default behavior: Teams work on as many items as capacity allows (up to floor of capacity)
With WIP limit: Team works on max 2 items at a time, even if capacity could support more
Why use WIP limits?
- Focus: Fewer concurrent items means more capacity per item and faster completion
- Reduced context switching: Teams aren't spread thin across many items
- Realistic forecasts: Matches how agile/kanban teams actually work
- Higher throughput: Counterintuitively, limiting WIP often increases delivery rate
Example without WIP limit:
workstreams:
- name: Development
capacity: 5
# No max_concurrent_items - all ready items run in parallel
work_items:
- id: A, B, C, D, E
size: 50
workstream: DevelopmentResult: All 5 items start together, each gets 1 capacity (5/5), taking 50 weeks each
Example with WIP limit:
workstreams:
- name: Development
capacity: 5
max_concurrent_items: 2 # Focus on 2 items at a time
work_items:
- id: A, B, C, D, E
size: 50
workstream: DevelopmentResult: A and B start first (2.5 capacity each = 20 weeks), then C and D start when slots open, then E
Best practice: Set WIP limit to 2-3 for focused teams, or leave unlimited for flexible teams
How Capacity Affects Timeline
Capacity is the most important factor in project duration.
Example: Low Capacity
name: Small Team
capacity: 5
work_items:
- id: item-1
name: Big Feature
size: 50Result: Takes 10 weeks (50 ÷ 5 = 10)
Example: High Capacity
name: Large Team
capacity: 20
work_items:
- id: item-1
name: Big Feature
size: 50Result: Takes 2.5 weeks (50 ÷ 20 = 2.5)
Example: Parallel Work with Capacity Sharing
name: Team
capacity: 10
work_items:
- id: item-a
name: Feature A
size: 40
- id: item-b
name: Feature B
size: 40If no dependencies:
- Both items start simultaneously
- Each gets 5 capacity (10 ÷ 2)
- Both take 8 weeks (40 ÷ 5)
- Project completes in 8 weeks
If item-b depends on item-a:
- item-a gets full 10 capacity
- item-a takes 4 weeks (40 ÷ 10)
- item-b starts after item-a, gets full 10 capacity
- item-b takes 4 weeks
- Project completes in 8 weeks
Organizing Teams
One Workstream Per Team
Match workstreams to your actual team structure:
workstreams:
- name: iOS Team
capacity: 8
work_items: [...]
- name: Android Team
capacity: 8
work_items: [...]
- name: Backend Team
capacity: 12
work_items: [...]Pros:
- Reflects real org structure
- Easy to understand
- Clear ownership
Multiple Workstreams Per Specialty
Split work by type rather than team:
workstreams:
- name: UI Development
capacity: 15
work_items: [...]
- name: API Development
capacity: 10
work_items: [...]
- name: Data Pipeline
capacity: 5
work_items: [...]Pros:
- Shows work distribution by area
- Highlights specialty bottlenecks
- Useful for skill-based planning
Hybrid Approach
Combine teams and specialties:
workstreams:
- name: Product Team (Frontend)
capacity: 12
work_items: [...]
- name: Product Team (Backend)
capacity: 8
work_items: [...]
- name: Platform Team
capacity: 6
work_items: [...]
- name: Design
capacity: 4
work_items: [...]Dependencies Between Workstreams
Dependencies create handoffs and sequencing across teams.
Simple Handoff
Design completes mockups before Engineering starts:
workstreams:
- name: Design
work_items:
- id: mockups
name: Design Mockups
size: 10
- name: Engineering
work_items:
- id: build-ui
name: Build UI
size: 40
dependencies: [mockups]Timeline:
- Design works on mockups (1-2 weeks)
- Engineering starts build-ui after mockups complete
- Total time = design time + engineering time
Multi-Team Integration
Multiple teams working toward a shared integration point:
workstreams:
- name: Frontend
work_items:
- id: ui-components
name: UI Components
size: 30
- name: Backend
work_items:
- id: api-endpoints
name: API Endpoints
size: 25
- name: Integration Team
work_items:
- id: connect-ui-api
name: Connect UI to API
size: 15
dependencies: [ui-components, api-endpoints]Timeline:
- Frontend and Backend work in parallel
- Integration Team waits for BOTH to finish
- Integration starts when last dependency completes
Phased Dependencies
Each phase builds on previous work:
workstreams:
- name: Infrastructure
work_items:
- id: cloud-setup
name: Cloud Infrastructure
size: 10
- name: Backend
work_items:
- id: services
name: Build Services
size: 30
dependencies: [cloud-setup]
- name: Frontend
work_items:
- id: app
name: Build App
size: 40
dependencies: [services]Timeline:
- Infrastructure (1 week)
- Backend (3 weeks) - starts after infrastructure
- Frontend (4 weeks) - starts after backend
- Total = 8 weeks (sequential chain)
Priority vs Dependencies
Understanding when to use priority vs depends_on:
Priority (Soft Hint)
Use priority when you want to influence which items get slots first when WIP limits apply, but items can still run in parallel if capacity allows.
workstreams:
- name: Development
capacity: 10
max_concurrent_items: 2 # WIP limit = 2
work_items:
- id: feature-a
priority: 1 # Gets slot first
- id: feature-b
priority: 2 # Gets slot second
- id: feature-c
priority: 3 # Waits for slotBehavior: With WIP limit of 2, feature-a and feature-b start first. When one completes, feature-c gets the slot.
Key points:
- Priority is a soft hint - doesn't block parallel work
- Only matters when WIP limits are in effect
- Items with same priority can run in parallel
- Lower numbers = higher priority
Dependencies (Hard Blocking Constraint)
Use depends_on when one item must complete before another can start.
work_items:
- id: design
size: 10
- id: build
size: 30
depends_on: [design] # Cannot start until design completesBehavior: build waits until design finishes, then starts.
Key points:
- Dependencies create hard blocking constraints
- Item cannot start until all dependencies complete
- Creates sequential ordering
- Use for true prerequisites (e.g., "can't build until design is done")
When to Use Each
Use Priority when:
- You want to influence slot allocation with WIP limits
- Items can technically run in parallel
- You want to express preference, not requirement
- Example: "Feature A is more important, so give it slots first"
Use Dependencies when:
- One item truly requires another to complete first
- There's a technical or logical prerequisite
- You want to enforce sequential ordering
- Example: "Can't test until code is written"
Use Both Together:
work_items:
- id: design-a
priority: 1
- id: design-b
priority: 2
- id: build
priority: 1
depends_on: [design-a, design-b] # Waits for both designsBehavior: design-a and design-b run in priority order. build waits for both, then gets priority slot when ready.
Common Dependency Patterns
Parallel + Merge
Teams work independently then integrate:
workstreams:
- name: Team A
work_items:
- id: module-a
size: 20
- name: Team B
work_items:
- id: module-b
size: 20
- name: Integration
work_items:
- id: merge
size: 10
dependencies: [module-a, module-b]Sequential Pipeline
Work flows through multiple teams:
workstreams:
- name: Discovery
work_items:
- id: research
size: 10
- name: Design
work_items:
- id: design
size: 15
dependencies: [research]
- name: Development
work_items:
- id: build
size: 40
dependencies: [design]
- name: QA
work_items:
- id: test
size: 10
dependencies: [build]Shared Foundation
Multiple teams wait for foundation work:
workstreams:
- name: Platform
work_items:
- id: auth-system
size: 20
- name: Feature Team A
work_items:
- id: feature-a
size: 30
dependencies: [auth-system]
- name: Feature Team B
work_items:
- id: feature-b
size: 30
dependencies: [auth-system]Optimizing Your Timeline
Reduce Sequential Dependencies
Before (slow):
- id: design
size: 10
- id: develop
size: 30
dependencies: [design]
- id: test
size: 10
dependencies: [develop]Total: 50 units sequential
After (faster):
- id: design-and-develop
size: 35
- id: test
size: 10
dependencies: [design-and-develop]Total: 45 units, overlapped work
Increase Parallelism
Add more teams or split work to run in parallel:
Before:
workstreams:
- name: Team
capacity: 10
work_items:
- id: feature-1
size: 40
- id: feature-2
size: 40
dependencies: [feature-1]Total: 8 weeks sequential
After:
workstreams:
- name: Team A
capacity: 10
work_items:
- id: feature-1
size: 40
- name: Team B
capacity: 10
work_items:
- id: feature-2
size: 40Total: 4 weeks parallel
Increase Capacity
Add people or improve velocity:
Before:
capacity: 10Feature takes 4 weeks
After:
capacity: 15Same feature takes 2.67 weeks
Common Issues
Bottlenecks
Problem: One team with low capacity blocks others
Example:
- name: Design (bottleneck)
capacity: 2
work_items:
- id: mockups
size: 20 # Takes 10 weeks!
- name: Engineering
capacity: 20
work_items:
- id: build
size: 40
dependencies: [mockups]Solution: Increase Design capacity or reduce mockups scope
Over-Dependency
Problem: Too many dependencies create sequential work
Example:
- id: a
size: 10
- id: b
size: 10
dependencies: [a]
- id: c
size: 10
dependencies: [b]
- id: d
size: 10
dependencies: [c]Solution: Find work that can happen in parallel, reduce chain length
Idle Teams
Problem: Team waiting for dependencies has nothing to do
Example:
- name: QA Team
capacity: 10
work_items:
- id: testing
size: 20
dependencies: [all-development] # QA waits 8 weeks!Solution: Add earlier QA work, shift-left testing, or reduce QA team size during early phases
Best Practices
Match capacity to reality: Use historical velocity data when possible
Don't over-specify: Not every handoff needs a dependency
Balance teams: Avoid one team being much smaller than others
Plan for ramp-up: Use start_delay for new hires or delayed starts
Review critical path: Identify which workstream determines project end date
Test "what if" scenarios: Use AI to explore capacity changes
Keep it simple: Start with 3-5 workstreams, add more if needed
Related Articles
- Working with Work Items - Master work item sizing and organization
- Understanding the Forecast Results - Read your project timeline
- Creating Your First Project - Step-by-step project creation
- Using the Advanced Editor - Complete project definition reference
Last updated: 2025-12-19