Tech debt without a system becomes invisible until it causes an incident. For remote teams without hallway conversations, the invisibility problem is worse: engineers work around problems silently, never surfacing them to the people who could allocate time to fix them. This guide covers a practical async system for capturing, scoring, and allocating time to tech debt in a distributed team.
The Core Problem with Remote Tech Debt Management
In co-located teams, tech debt often gets discussed in passing (“this module is a nightmare, we should really fix it”). Remote teams lose that informal channel. The result: engineers work around problems individually without a shared picture of the worst offenders.
A good remote tech debt system needs:
- Zero-friction capture (adding debt items takes less than 2 minutes)
- Async scoring (no meeting required to prioritize)
- Visibility (any engineer can see the current backlog and its priority)
- Time allocation that’s explicit, not ad-hoc
Tool Choice: GitHub Issues with Labels
GitHub Issues works better than Jira or Linear for tech debt because it lives in the same repository as the code. When an engineer notices debt while working on a PR, they can file an issue in seconds.
Label system:
Type:
tech-debt — catch-all for debt items
tech-debt-hotspot — frequently touched area with known problems
tech-debt-risk — risk of incident if not addressed
Impact:
impact-high — affects multiple teams or frequent workflows
impact-medium — affects one team or infrequent workflows
impact-low — minor or edge case
Effort:
effort-days — 1-5 days of work
effort-weeks — 1-3 weeks of work
effort-months — multi-sprint effort
Status:
debt-new — filed, not yet scored
debt-scored — has a priority score
debt-scheduled — allocated to a sprint or quarter
debt-blocked — waiting on external dependency
GitHub CLI to create labels:
# Create all labels in bulk
gh label create "tech-debt" --color "d93f0b" --description "Technical debt items"
gh label create "tech-debt-hotspot" --color "e11d48" --description "Frequently touched problem area"
gh label create "tech-debt-risk" --color "dc2626" --description "Risk of incident"
gh label create "impact-high" --color "7c3aed" --description "High user or team impact"
gh label create "impact-medium" --color "6d28d9" --description "Medium impact"
gh label create "impact-low" --color "8b5cf6" --description "Low impact"
gh label create "effort-days" --color "059669" --description "1-5 days"
gh label create "effort-weeks" --color "10b981" --description "1-3 weeks"
gh label create "effort-months" --color "34d399" --description "Multi-sprint"
gh label create "debt-new" --color "6b7280" --description "Not yet scored"
gh label create "debt-scored" --color "f59e0b" --description "Scored, awaiting scheduling"
gh label create "debt-scheduled" --color "3b82f6" --description "In a sprint or quarter plan"
Issue Template
<!-- .github/ISSUE_TEMPLATE/tech-debt.md -->
---
name: Tech Debt
about: Document a technical debt item
title: '[DEBT] '
labels: tech-debt, debt-new
assignees: ''
---
## What is the problem?
<!-- Describe what's broken, slow, hard to maintain, or risky -->
## Where is it?
<!-- File paths, modules, services, or layers affected -->
Module:
Files:
## Business Impact
<!-- What happens when this debt causes a problem? Who is affected? -->
## Frequency
<!-- How often do engineers encounter this? -->
- [ ] Daily
- [ ] Weekly
- [ ] Monthly
- [ ] Rare but high risk
## Proposed Fix
<!-- High-level approach. Does not need to be detailed. -->
## Effort Estimate
- [ ] Days (1-5)
- [ ] Weeks (1-3)
- [ ] Months (multi-sprint)
## Score (filled in during async review)
<!-- Impact (1-5) × Frequency (1-5) ÷ Effort (1-5) -->
Score: TBD
Scoring System (Async, No Meeting Required)
Use a simple formula: Score = (Impact × Frequency) ÷ Effort
Score each dimension 1-5:
- Impact: 1=minor nuisance, 5=incident risk or blocks multiple teams
- Frequency: 1=rare, 5=daily for many engineers
- Effort: 1=days, 5=months (invert so easy items score higher)
A GitHub Action triggers when an issue is labeled debt-new and posts a scoring template as a comment, requesting async input from the team:
# .github/workflows/tech-debt-scoring.yml
name: Tech Debt Scoring Request
on:
issues:
types: [labeled]
jobs:
request-scoring:
if: github.event.label.name == 'debt-new'
runs-on: ubuntu-latest
steps:
- name: Post scoring comment
uses: actions/github-script@v7
with:
script: |
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: `## Tech Debt Scoring
Please score this item by replying with your assessment (any team member can score):
**Impact (1-5):** How severely does this affect users or engineering velocity?
1 = minor | 3 = moderate | 5 = critical/incident risk
**Frequency (1-5):** How often do engineers encounter this?
1 = rare | 3 = weekly | 5 = daily for most engineers
**Effort (1-5):** How much work to fix? (1=easy, 5=large)
1 = days | 3 = weeks | 5 = months
Reply with: Impact: X | Frequency: X | Effort: X
I'll aggregate scores after 48 hours.`
});
Weekly Async Review (No Meeting)
Instead of a debt review meeting, use a structured async thread:
<!-- Posted every Monday in #eng-tech-debt Slack channel -->
## Tech Debt Weekly Review — Week of 2026-03-22
### New items (score by Wednesday EOD)
- [DEBT] Payment service uses deprecated Stripe API (#451) — @maria
- [DEBT] OrderRepository N+1 query on list endpoint (#452) — @james
### Top 5 by score (action required)
1. Score 8.3 — [DEBT] Auth module has no tests (#398) — @platform-team, scheduled Q2
2. Score 7.1 — [DEBT] Search uses full table scan (#412) — scoring complete, needs owner
3. Score 6.8 — [DEBT] Deploy script has hardcoded prod secrets (#399) — CRITICAL, @security-team
### This week's debt time budget: 8 engineer-hours
Current allocation: [#398 auth tests — 4h] [#412 search — 4h pending]
### Needs owner (reply by Friday)
- #412 Search optimization (4h estimated) — any takers?
React ✅ to confirm you've read this.
Time Allocation Policy
Without explicit time allocation, tech debt never gets done. Establish a policy:
## Tech Debt Time Budget Policy
Every sprint allocates 15% of engineering capacity to tech debt.
For a team of 6 engineers × 80h sprint = 72h × 15% = ~10h/sprint.
### Allocation rules:
1. Items with score ≥ 7 must be scheduled within the current quarter
2. Items with score ≥ 9 (risk items) must be addressed within 2 sprints
3. No more than 50% of debt budget on any single item
4. "Debt tax" on new features: any PR adding complexity must include a debt issue
### Tracking velocity:
- Items closed per month: target ≥ 4
- Items added per month: track to ensure net negative trend
- Oldest open item: should be < 3 months for scored items
GitHub Project Board Setup
# Create a project board for tech debt
gh project create --owner @org --title "Tech Debt Backlog" --format table
# Add columns: Scored, Scheduled, In Progress, Done
# Fields to add:
# - Score (number)
# - Quarter (select: Q1/Q2/Q3/Q4)
# - Owner (person)
# Filter view: sorted by Score descending, open items only
# This is the primary view for weekly review
Metrics to Track Monthly
# GitHub CLI: count debt items by status
gh issue list --label "tech-debt" --state open --json number,labels,createdAt \
| jq 'length'
# Items closed this month
gh issue list --label "tech-debt" --state closed \
--json closedAt \
| jq --arg date "$(date -d '30 days ago' +%Y-%m-%d)" \
'[.[] | select(.closedAt >= $date)] | length'
# Items added this month
gh issue list --label "tech-debt" --state all \
--json createdAt \
| jq --arg date "$(date -d '30 days ago' +%Y-%m-%d)" \
'[.[] | select(.createdAt >= $date)] | length'
If additions consistently exceed closures, increase the debt budget or reduce feature velocity until the trend reverses.
Related Reading
- Async Decision Making with RFC Documents for Engineering Teams
- ADR Tools for Remote Engineering Teams
- Async Engineering Proposal Process Using GitHub Discussions
- How to Manage Remote Team Documentation Debt: Complete Guide
Related Articles
- How to Manage Remote Team Technical Debt in 2026
- How to Manage Remote Team Documentation Debt: Complete Guide
- How to Manage Multi-Repo Projects with Remote Team
- How to Run Sprints with a Remote Team of 4 Engineers
- How to Maintain Remote Team Culture When Transitioning
Built by theluckystrike — More at zovo.one