📖Siyuan's Notes
中文
Tools2026-09-18

GitHub Issues Project Management Guide: Turn Repos Into a Task Board in 2026

#GitHub#Project Management#Issues#Automation#Developer Tools

GitHub Issues Project Management Guide: Turn Repos Into a Task Board in 2026

GitHub Issues is the most widely used lightweight project management tool for software teams. With over 200 million repositories on GitHub, Issues is the default way developers track bugs, feature requests, and project progress. But most people use only 20% of its capabilities. GitHub Projects (the newer board view), milestones, labels, issue templates, GitHub Actions automation, and cross-repository linking together turn a simple repo into a Kanban-style project management system that rivals Jira, Linear, and Asana — at zero cost for teams up to five people. This guide walks through the complete setup, from creating your first issue to building automated workflows that move cards, assign reviewers, and close stale issues on a schedule.

Why GitHub Issues for Project Management in 2026

There are dozens of project management tools. Here is how GitHub Issues compares for developer-centric teams.

Tool Free Plan Kanban Board Native Git Integration Automation Best For
GitHub Issues + Projects Unlimited public repos, unlimited collaborators Yes (Projects v2) Yes (built-in) GitHub Actions + workflows Developer teams, open source
Jira 10 users, 2GB Yes Via plugins Jira Automation Enterprise software teams
Linear 250 issues Yes GitHub sync Basic automations Product-focused startups
Asana 15 users Yes No Rules (paid) Non-technical teams
Trello 10 boards Yes No Butler (limited) Simple task tracking
Notion Unlimited Yes (databases) No No native automation All-in-one docs

GitHub Issues wins for developer teams because it lives where the code lives. No context switching between GitHub and a separate PM tool. When you commit code, you can close an issue with Fixes #42 in the commit message — GitHub auto-links, auto-closes, and moves the project card. This native integration is something no external tool can fully replicate.

GitHub Pricing in 2026

Plan Monthly Cost Private Repos Collaborators Key Features
Free $0 Unlimited Unlimited 2,000 Actions min/month, 500MB Packages, Community Support
Pro $4 Unlimited Unlimited 3,000 Actions min/month, 2GB Packages, Advanced Insights
Team $4/user Unlimited Unlimited 3,000 Actions min/user, Team insights, Draft PRs
Enterprise $21/user Unlimited Unlimited 50,000 Actions min/user, SSO, audit logs, advanced security

For most side hustles and small teams, the Free plan is enough. GitHub Projects, Issues, milestones, labels, templates, and 2,000 Actions minutes per month are all free.

Step 1: Setting Up Your Repository for Project Management

Before creating issues, structure your repo for project management.

1.1 Create a Repository

  1. Go to github.com/new
  2. Enter a repository name (e.g., my-saas-app)
  3. Set visibility: Public (free unlimited collaborators) or Private
  4. Check "Add a README file"
  5. Check "Add .gitignore" and select your language (e.g., Node)
  6. Click "Create repository"

1.2 Enable GitHub Projects

Projects are enabled by default on new repos. To verify or enable:

  1. Go to your repository → Settings → Features
  2. Ensure "Projects" is checked
  3. This enables the repository-level project board

For organization-level projects (cross-repo), go to Organization → Projects → New project.

1.3 Create Your First Project Board

  1. Go to your repository → Projects → New project
  2. Choose a template or start from scratch:
    • Bug Triage: Todo → In Progress → Done
    • Feature Board: Backlog → To Do → In Progress → Review → Done
    • Kanban Board: To Do → In Progress → Done
  3. Name your project (e.g., "Q4 2026 Roadmap")
  4. Click "Create"

1.4 Configure Board Columns

GitHub Projects v2 uses a flexible field system. Default columns:

Column Purpose WIP Limit (recommended)
Backlog Ideas and future work, not yet prioritized No limit
Todo Prioritized work ready to start next No limit
In Progress Work currently being done 3 per person
In Review Work awaiting PR review 5 total
Done Completed work, auto-archived after 30 days No limit

To add custom columns, click the + icon next to the last column. To set WIP (work in progress) limits, use a numeric custom field and a workflow (covered in Step 5).

Step 2: Creating and Structuring Issues

A well-structured issue is the foundation of good project management. GitHub Issues support Markdown, checklists, code blocks, images, labels, assignees, milestones, and linked PRs.

2.1 Create an Issue

  1. Go to your repository → Issues → New issue
  2. Write a clear title: [Feature] Add password reset via email or [Bug] Login fails on Safari 17
  3. Use the issue template (covered in 2.4)
  4. Add labels, assignees, and milestone
  5. Click "Submit new issue"

2.2 Issue Writing Best Practices

A good issue has these sections:

## Description
Brief summary of what needs to be done and why.

## Acceptance Criteria
- [ ] User can click "Reset Password" on login page
- [ ] Email is sent within 30 seconds
- [ ] Reset link expires after 1 hour
- [ ] Rate limited to 3 requests per hour

## Technical Notes
- Use AWS SES for email delivery
- Token stored in Redis with TTL
- Endpoint: POST /api/auth/reset-password

## Design
Link to Figma file or attach screenshot

## Dependencies
- Requires #18 (email service setup) to be merged first

2.3 Use Labels Effectively

Create a consistent label taxonomy. Go to Issues → Labels → New label.

Recommended label set:

Label Color Purpose
bug Red Something is broken
feature Blue New functionality
enhancement Light blue Improvement to existing feature
documentation Gray Docs changes
priority:critical Dark red Drop everything and fix
priority:high Orange Important, do soon
priority:medium Yellow Normal priority
priority:low Green Nice to have
effort:S Light green < 1 hour
effort:M Yellow 1-4 hours
effort:L Orange 4-16 hours
effort:XL Dark orange > 16 hours
help wanted Purple Open for community contribution
good first issue Pink Beginner-friendly

2.4 Create Issue Templates

Issue templates save time and ensure consistency.

  1. Go to repository → Settings → Features → Issue templates → Set up templates
  2. Or create files manually in .github/ISSUE_TEMPLATE/

Bug report template (.github/ISSUE_TEMPLATE/bug_report.yml):

name: Bug Report
description: Report a bug
labels: ["bug", "priority:medium"]
assignees: []
body:
  - type: textarea
    id: description
    attributes:
      label: Description
      description: What happened?
    validations:
      required: true
  - type: textarea
    id: steps
    attributes:
      label: Steps to Reproduce
      placeholder: |
        1. Go to...
        2. Click...
        3. See error...
    validations:
      required: true
  - type: input
    id: browser
    attributes:
      label: Browser
      placeholder: Chrome 120
  - type: textarea
    id: logs
    attributes:
      label: Error Logs
      render: shell

Feature request template (.github/ISSUE_TEMPLATE/feature_request.yml):

name: Feature Request
description: Suggest a new feature
labels: ["feature"]
body:
  - type: textarea
    id: problem
    attributes:
      label: Problem
      description: What problem does this solve?
  - type: textarea
    id: solution
    attributes:
      label: Proposed Solution

Step 3: Milestones and Sprints

Milestones group issues into a release or sprint with a due date.

3.1 Create a Milestone

  1. Go to Issues → Milestones → New milestone
  2. Title: Sprint 2026-W38 or v2.0 Release
  3. Description: Focus on authentication and billing
  4. Due date: pick a Friday two weeks out
  5. Click "Create milestone"

3.2 Sprint Planning

Two-week sprint structure:

Day Activity Time
Monday (sprint start) Sprint planning meeting 1 hour
Daily Standup (async in a discussion) 15 min
Wednesday Mid-sprint review 30 min
Friday Sprint demo + retrospective 1 hour
Friday (end) Milestone due date, create next milestone 30 min

Assign issues to the milestone during planning. Target 20-30 story points per two-week sprint for a team of 3-4 developers.

3.3 Track Milestone Progress

Go to Issues → Milestones → click milestone name. You see:

  • Open issues: count of incomplete issues
  • Closed issues: count of completed issues
  • Completion percentage: closed / total
  • Due date: with red warning if overdue

Step 4: Pull Requests and Issue Linking

PRs are how code changes get into the main branch, and linking them to issues keeps the project board updated automatically.

4.1 Create a Branch

# Create and checkout a feature branch
git checkout -b feature/password-reset

# Make changes, commit
git add -A
git commit -m "Add password reset endpoint (#42)"

# Push to GitHub
git push -u origin feature/password-reset

4.2 Open a Pull Request

  1. Go to your repository on GitHub → Pull requests → New pull request
  2. Select your feature branch
  3. Use a PR template (create .github/pull_request_template.md):
## Description
What does this PR do?

## Related Issue
Fixes #42

## Type of Change
- [ ] Bug fix
- [ ] New feature
- [ ] Breaking change
- [ ] Documentation update

## Testing
- [ ] Unit tests pass
- [ ] Manual testing complete

## Checklist
- [ ] Code follows style guide
- [ ] Self-review completed
- [ ] Comments added for complex logic
- [ ] Documentation updated

4.3 Magic Keywords for Auto-Linking

GitHub auto-closes issues when you use these keywords in PR descriptions or commit messages:

Keyword Action
Fixes #42 Closes issue when PR is merged
Closes #42 Same as Fixes
Resolves #42 Same as Fixes
Refs #42 Links but does not close
Fixes #42, #43 Closes multiple issues
Fixes owner/repo#42 Closes issue in another repo

When the PR is merged, GitHub:

  1. Closes the linked issue
  2. Moves the project card to "Done"
  3. Posts a comment on the issue with the PR link

Step 5: Automation with GitHub Actions

GitHub Actions can automate issue management, project board updates, stale issue cleanup, and more. You get 2,000 free Actions minutes per month on the Free plan.

5.1 Auto-Assign Issues

Create .github/workflows/auto-assign.yml:

name: Auto Assign Issues
on:
  issues:
    types: [opened]

jobs:
  auto-assign:
    runs-on: ubuntu-latest
    steps:
      - name: Assign to project
        uses: actions/add-to-project@v1.0.2
        with:
          project-url: https://github.com/users/YOUR_USERNAME/projects/1
          github-token: ${{ secrets.PROJECT_TOKEN }}

5.2 Auto-Move Cards on PR Open

Create .github/workflows/move-on-pr.yml:

name: Move to In Review
on:
  pull_request:
    types: [opened]

jobs:
  move-card:
    runs-on: ubuntu-latest
    steps:
      - name: Move issues linked to PR
        uses: alex-page/github-project-automation-plus@v0.8.3
        with:
          project: My Project
          column: In Review
          repo-token: ${{ secrets.PROJECT_TOKEN }}

5.3 Close Stale Issues

GitHub has a built-in stale action. Create .github/workflows/stale.yml:

name: Mark Stale Issues
on:
  schedule:
    - cron: '0 0 * * *'  # Daily at midnight UTC

jobs:
  stale:
    runs-on: ubuntu-latest
    permissions:
      issues: write
      pull-requests: write
    steps:
      - uses: actions/stale@v9
        with:
          stale-issue-message: 'This issue has been inactive for 60 days. It will be closed in 7 days unless updated.'
          stale-issue-label: 'stale'
          days-before-stale: 60
          days-before-close: 7
          exempt-issue-labels: 'pinned,security,enhancement'

5.4 Actions Usage and Limits

Plan Free Minutes/Month Overage Cost Storage
Free 2,000 $0.008/min 500MB
Pro 3,000 $0.008/min 2GB
Team 3,000/user $0.008/min 2GB/user
Enterprise 50,000/user $0.008/min 50GB/user

Linux runners are cheapest. Windows runners cost 2x, macOS runners cost 10x. A typical issue automation workflow uses 15-30 seconds per run.

Step 6: Projects v2 Advanced Features

GitHub Projects v2 (the current version) is a powerful spreadsheet-database hybrid.

6.1 Custom Fields

Add fields beyond the default Status/Assignee:

  1. Open your project → Click + in the field bar
  2. Choose field type: Text, Number, Date, Single select, Iteration

Useful custom fields:

Field Type Values
Priority Single select P0, P1, P2, P3
Effort Single select S, M, L, XL
Sprint Iteration 2-week intervals
Start Date Date
Due Date Date
Est. Hours Number

6.2 Views: Board, Table, Roadmap

Projects v2 supports multiple saved views:

  • Table view: spreadsheet-like, sortable, filterable
  • Board view: Kanban columns based on any single-select field
  • Roadmap view: timeline with date fields
  • Insights view: charts and metrics

Create a view: Click the view dropdown → New view → choose type. Save different views for different stakeholders (board for developers, roadmap for product, insights for management).

6.3 Group, Sort, Filter

  • Group by: Group issues by assignee, priority, or sprint
  • Sort by: Sort by created date, priority, due date
  • Filter: status = "In Progress" AND priority = P0

6.4 Insights and Metrics

The Insights view lets you build charts:

  1. Open project → New view → Insights
  2. Choose chart type: Bar, Line, Pie, Donut
  3. Configure X/Y axes from your fields

Useful metrics to track:

Metric How to Calculate Target
Sprint completion rate Closed issues / planned issues per sprint > 80%
Cycle time Avg days from "In Progress" to "Done" < 5 days
Issue throughput Issues closed per week Track trend
Bug ratio Bug issues / total issues < 20%
Stale issue rate Issues open > 60 days / total open < 10%

Step 7: Team Workflows and Code Review

7.1 Branch Protection Rules

Protect your main branch to enforce quality:

  1. Go to Settings → Branches → Add branch protection rule
  2. Branch name pattern: main
  3. Enable:
    • Require a pull request before merging
    • Require status checks to pass (CI must be green)
    • Require approval from 1+ reviewers
    • Require linear history
    • Do not allow bypassing the above

7.2 CODEOWNERS

Create .github/CODEOWNERS:

# Default owner
* @teamlead

# Frontend
/src/components/ @frontend-team

# Backend
/src/api/ @backend-team

# Infrastructure
/infra/ @devops-team

# Documentation
/docs/ @docs-team

GitHub auto-requests review from the code owners when a PR touches their files.

7.3 Review Process

Step Who Time
PR opened Author Self-review, check CI
Auto-assigned CODEOWNERS system Reviewer notified
Review Reviewer 24-hour SLA
Changes requested Reviewer Author addresses within 48h
Approved Reviewer Author merges
Merged Author Issue auto-closes, card moves

Step 8: Integrations and API

8.1 GitHub CLI

The GitHub CLI (gh) lets you manage issues from the terminal:

# Install
brew install gh  # macOS
sudo apt install gh  # Ubuntu

# Authenticate
gh auth login

# Create an issue
gh issue create --title "Fix login bug" --label "bug,priority:high" --assignee "@me"

# List issues
gh issue list --assignee "@me" --state open

# View an issue
gh issue view 42

# Close an issue
gh issue close 42

# Create a PR
gh pr create --title "Fix login bug" --body "Fixes #42"

8.2 REST API

# Create an issue via API
curl -X POST \
  -H "Authorization: token YOUR_TOKEN" \
  -H "Accept: application/vnd.github+json" \
  https://api.github.com/repos/OWNER/REPO/issues \
  -d '{"title":"Bug: API returns 500","labels":["bug"],"assignees":["username"]}'

# List project items
curl -H "Authorization: token YOUR_TOKEN" \
  -H "Accept: application/vnd.github+json" \
  https://api.github.com/projects/PROJECT_ID/items

API rate limits:

Plan Authenticated Unauthenticated
Free 5,000 req/hour 60 req/hour
Enterprise 15,000 req/hour N/A

8.3 Slack/Discord Integration

Get notifications in Slack:

  1. Go to slack.github.com
  2. Add to your Slack workspace
  3. Subscribe your channel to repository events: issues, PRs, commits, deployments

For Discord, use a webhook:

# Add webhook URL to GitHub
# Settings → Webhooks → Add webhook
# Payload URL: your Discord webhook URL
# Content type: application/json
# Events: Issues, Pull requests

Step 9: Monetizing Your GitHub Expertise

If you master GitHub project management, there are several ways to monetize:

Method Effort Income Potential Time to First $
GitHub consulting High $50-200/hour 2-4 weeks
Creating GitHub Action templates Medium $500-5,000/month 3-6 months
Writing tutorials/guides Medium $200-2,000/article 1-2 weeks
YouTube tutorials High $500-5,000/month 6-12 months
Open source sponsorship High $500-10,000/month 6-24 months
Freelance GitHub setup Low $200-1,000/project 1-2 weeks

Freelance GitHub Setup Service

Many non-technical founders and small businesses need help setting up GitHub:

  1. Create a Fiverr/Upwork gig: "I will set up your GitHub project board with automation"
  2. Price: $150-500 per project
  3. Deliver: repo setup, project board, issue templates, 2-3 automation workflows, branch protection
  4. Upsell: monthly retainer for maintenance ($200-500/month)

Action Checklist

  • Create a GitHub account if you don't have one
  • Create a repository for your project
  • Enable Projects and create a project board
  • Set up 5 standard columns (Backlog → Done)
  • Create a label taxonomy (type, priority, effort)
  • Create issue templates (bug, feature)
  • Create a PR template
  • Set up your first milestone (2-week sprint)
  • Create 5-10 issues and assign them
  • Enable branch protection on main
  • Create a CODEOWNERS file
  • Set up GitHub Actions for stale issue cleanup
  • Install GitHub CLI (gh)
  • Connect Slack/Discord for notifications
  • Track sprint metrics in Insights view
  • Create custom fields (Priority, Effort, Sprint)
  • Create saved views (Board, Roadmap, Insights)
  • Document your workflow in a README or wiki

Common Pitfalls and How to Avoid Them

Pitfall Impact Solution
Issues without acceptance criteria Ambiguous "done" Require criteria in templates
No WIP limits Bottlenecks, context switching Set custom field limit, enforce
Too many labels Label sprawl, confusion Limit to 12-15 labels max
No stale issue cleanup Issue list becomes graveyard Enable stale action
No linked PRs Manual card movement Use Fixes #N keywords
No sprint cadence No rhythm, ad hoc work Fixed 2-week sprints
Over-automating early Brittle workflows Start simple, add automation later

GitHub Issues vs Competitors: When to Switch

If You Need... Better Tool
Non-technical team members Asana or Trello
Visual roadmaps for stakeholders Linear
Enterprise compliance Jira
Time tracking and invoicing Toggl + GitHub
Complex cross-team dependencies Jira or Asana
Just simplicity Trello

Stay with GitHub Issues if your team is primarily developers and your work is code-centric. The native Git integration alone saves 2-3 hours per week compared to syncing an external tool.

Final Word

GitHub Issues with Projects v2 is a complete project management system for developer teams — and it's free for teams of any size on public repositories. The setup takes 2-4 hours: create your repo, set up a project board, design your label taxonomy, create issue and PR templates, configure milestones for sprints, set up branch protection, add a few automation workflows, and install the CLI. The native integration between issues, PRs, commits, and the project board creates an automated flow that no external tool can replicate: commit code, PR opens, card moves, PR merges, issue closes, card moves again — all without a single manual update. For side hustles, freelancers, and small teams, GitHub Issues eliminates the need for a paid PM tool, saving $10-50 per user per month. Start with the checklist above, run a 2-week sprint, and iterate on your workflow from there.

More guides: bsynet.cc

Tags

#GitHub#Project Management#Issues#Automation#Developer Tools

Related Posts