Development Teams¶
Teams benefit from distributed coordination that syncs via git without requiring external services.
Why Grite for Teams?¶
- Decentralized: No central server needed
- Git-native: Syncs with existing git workflows
- Offline-capable: Team members work offline
- Conflict-free: CRDT merging, no manual conflicts
Distributed Coordination¶
Multiple team members sync issues through standard git operations:
# Developer A creates an issue
grite issue create --title "API response time degradation" \
--body "P95 latency increased 40% after last deploy" \
--label "bug" --label "priority:P1"
grite sync --push
# Developer B pulls and claims
grite sync --pull
grite issue list --label "priority:P1"
grite issue comment $ISSUE_ID --body "I'll investigate this"
grite sync --push
# Developer A sees the update
grite sync --pull
grite issue show $ISSUE_ID
Code Review Workflows¶
Track code review feedback offline, sync when ready:
# Reviewer creates review issues
grite issue create --title "Review: PR #87 - Add caching layer" \
--body "$(cat <<'EOF'
## Overall
Good approach, some concerns about cache invalidation.
## Required Changes
- src/cache/mod.rs:45 - Need TTL on cache entries
- src/cache/mod.rs:78 - Handle cache miss more gracefully
## Suggestions
- Consider using dashmap instead of RwLock<HashMap>
- Add metrics for cache hit rate
EOF
)" --label "review" --label "pr:87"
# Author addresses feedback
grite issue comment $ISSUE_ID --body "Addressed TTL and cache miss handling. Will look into dashmap."
grite sync --push
Review Workflow¶
- Create review issue when starting review
- Document findings in the issue body
- Author responds via comments
- Close when PR is merged
Onboarding Task Lists¶
Create templated onboarding checklists for new team members:
# Team lead creates onboarding issue for new developer
grite issue create --title "Onboarding: Alice" \
--body "$(cat <<'EOF'
## Week 1
- [ ] Set up development environment (see docs/setup.md)
- [ ] Complete codebase walkthrough with mentor
- [ ] Fix a "good first issue" bug
- [ ] Set up grite actor: `grite actor init --label "alice-laptop"`
## Week 2
- [ ] Pair on a medium complexity feature
- [ ] Review and understand CI/CD pipeline
- [ ] Shadow on-call rotation
## Resources
- Architecture docs: docs/architecture.md
- Team conventions: docs/conventions.md
- Contact: @bob for backend, @carol for frontend
EOF
)" --label "onboarding" --assignee "alice"
Knowledge Base / ADRs¶
Record architectural decisions with rationale:
grite issue create --title "ADR-001: Use PostgreSQL for primary database" \
--body "$(cat <<'EOF'
## Status
Accepted
## Context
Need to choose a primary database for the application. Options considered:
- PostgreSQL
- MySQL
- MongoDB
## Decision
Use PostgreSQL.
## Rationale
- Strong ACID compliance needed for financial data
- Team has PostgreSQL expertise
- Excellent tooling (pgAdmin, pg_dump)
- JSONB for semi-structured data where needed
## Consequences
- Must manage PostgreSQL in production
- Schema migrations required for changes
- Some team members need PostgreSQL training
EOF
)" --label "adr" --label "database"
ADR Conventions¶
# List all ADRs
grite issue list --label "adr"
# ADR naming
"ADR-001: Short title"
"ADR-002: Another decision"
# ADR labels
--label "adr"
--label "status:proposed" # Under discussion
--label "status:accepted" # Approved
--label "status:deprecated" # No longer applies
Large Refactoring Coordination¶
Track progress on refactoring efforts spanning multiple team members:
# Create tracking issue for refactoring
grite issue create --title "Refactor: Migrate from callbacks to async/await" \
--body "$(cat <<'EOF'
## Scope
Convert all callback-based async code to async/await syntax.
## Progress Tracker
| Module | Status | Owner |
|--------|--------|-------|
| src/api/ | Not started | - |
| src/db/ | In progress | Bob |
| src/services/ | Not started | - |
| src/utils/ | Complete | Alice |
## Guidelines
- One module at a time to minimize merge conflicts
- Update tests alongside implementation
- Use `grite lock acquire --resource "path:src/<module>"` before starting
EOF
)" --label "refactor" --label "epic"
# Team members update progress
grite issue comment $ISSUE_ID --body "src/db/ complete, moving to src/api/"
Code Ownership Documentation¶
Track who owns/maintains which areas:
grite issue create --title "[Ownership] Code ownership map" \
--body "$(cat <<'EOF'
## Module Owners
| Path | Primary | Secondary |
|------|---------|-----------|
| src/api/ | @alice | @bob |
| src/auth/ | @carol | @alice |
| src/db/ | @bob | @dave |
| src/frontend/ | @eve | @carol |
| infra/ | @dave | @bob |
## Review Policy
- Changes require approval from primary owner
- Secondary can approve if primary unavailable >24h
EOF
)" --label "meta" --label "ownership"
Sprint Planning¶
Track sprint tasks:
# Create sprint issue
grite issue create --title "Sprint 2024-W03" \
--body "$(cat <<'EOF'
## Goals
- Complete authentication refactor
- Deploy new monitoring
## Committed Work
- [ ] AUTH-123: Add MFA support (@alice)
- [ ] AUTH-124: Session management (@bob)
- [ ] OPS-456: Prometheus setup (@carol)
## Stretch Goals
- [ ] UI-789: Dark mode toggle
EOF
)" --label "sprint" --label "sprint:2024-W03"
# Close at sprint end
grite issue close $SPRINT_ID
Standup Notes¶
Quick daily standup documentation:
grite issue create --title "Standup: 2024-01-15" \
--body "$(cat <<'EOF'
## Alice
- Yesterday: Completed MFA backend
- Today: Start MFA frontend
- Blockers: None
## Bob
- Yesterday: Investigated session bug
- Today: Fix session bug
- Blockers: Need access to prod logs
## Carol
- Yesterday: Prometheus config
- Today: Grafana dashboards
- Blockers: None
EOF
)" --label "standup"
Team Conventions¶
Label Standards¶
Agree on team-wide labels:
# Types
bug, feature, tech-debt, docs, refactor
# Priority
priority:P0, priority:P1, priority:P2
# Status
status:todo, status:in-progress, status:blocked, status:review
# Components
component:api, component:frontend, component:infra
# Sprint
sprint:2024-W01, sprint:2024-W02
Actor Naming¶
Each team member uses consistent actor labels:
grite actor init --label "alice-work-laptop"
grite actor init --label "bob-desktop"
grite actor init --label "ci-main"
Sync Frequency¶
Establish team sync practices:
- Sync at start and end of work sessions
- Sync before and after major changes
- Push before going offline
Best Practices¶
Use Locks for Coordination¶
When working on shared resources:
# Before editing shared config
grite lock acquire --resource "path:config/settings.json" --ttl 30m
# Make changes
grite lock release --resource "path:config/settings.json"
Keep Issues Updated¶
# Regular progress updates
grite issue comment $ID --body "50% complete, tests passing"
grite sync --push
Archive Completed Work¶
Next Steps¶
- Syncing - Team sync patterns
- Distributed Locks - Coordination details
- Actor Identity - Team actor management