GitHub Issues are the project management backbone of successful teams. They're where you track bugs, plan features, discuss ideas, and coordinate workβall connected directly to your code. In this lesson, you'll learn how to create effective issues, use labels and milestones to organize work, leverage GitHub Projects for visual planning, automate workflows, and build efficient team processes. By the end, you'll understand how successful teams stay organized and ship great software using GitHub's built-in project management tools!
What Are GitHub Issues?
GitHub Issues are tickets for tracking work in your repository. Think of them as a to-do list, bug tracker, and discussion forum all in one.
What Issues Can Track
- Bugs: "Login button doesn't work on Safari"
- Features: "Add dark mode support"
- Tasks: "Update dependencies to latest versions"
- Questions: "How should we handle API rate limiting?"
- Documentation: "README needs installation instructions"
- Enhancements: "Improve search performance"
- Discussion: "Should we migrate to TypeScript?"
Why use Issues?
- Centralized tracking: Everything in one place
- Connected to code: Link issues to commits and PRs
- Transparent: Everyone sees what's being worked on
- Searchable: Find old discussions and decisions
- Collaborative: Comment, discuss, assign
- Free: Built into every GitHub repository
π Issues vs Pull Requests
Issues track what needs to be done. Pull Requests are how the work gets done. Often, you create an issue first, then a PR that closes it.
Creating Issues
Creating an Issue on GitHub
- Go to the repository
- Click the "Issues" tab
- Click "New issue" button (green)
- Fill in the form:
- Title: Clear, concise summary
- Description: Details about the issue
- Assignees: Who should work on this (optional)
- Labels: Categorize the issue
- Projects: Add to project board (optional)
- Milestone: Group with related issues (optional)
- Click "Submit new issue"
Writing Effective Issue Titles
Good Issue Titles:
- Login button unresponsive on iOS Safari
- Add pagination to search results
- Update React to version 18
- Memory leak when uploading large files
- Document API authentication flow
Bad Issue Titles:
- Bug (too vague)
- Help! (not descriptive)
- This doesn't work (no context)
- Question (says nothing about the question)
Issue Description Template
## Description
Brief overview of the issue.
## Steps to Reproduce (for bugs)
1. Go to login page
2. Click "Sign In"
3. Observe error
## Expected Behavior
What should happen?
## Actual Behavior
What actually happens?
## Environment
- Browser: Chrome 120
- OS: macOS 14
- Version: 2.1.0
## Screenshots

## Possible Solution (optional)
Ideas for how to fix this
## Additional Context
Any other relevant informationCreating Issues via GitHub CLI
# Install GitHub CLI first: https://cli.github.com
# Create issue interactively
gh issue create
# Create with inline details
gh issue create --title "Fix login bug" --body "Login fails on mobile"
# Create with labels and assignee
gh issue create --title "Add search" --label feature --assignee @meUsing Labels Effectively
Labels categorize issues, making them easy to filter and organize.
Common Label Categories
1. Type Labels
bug- Something isn't workingfeature- New feature requestenhancement- Improvement to existing featuredocumentation- Documentation improvementsquestion- Discussion or clarification needed
2. Priority Labels
priority: critical- Needs immediate attentionpriority: high- Important, address soonpriority: medium- Normal prioritypriority: low- Nice to have
3. Status Labels
in progress- Currently being worked onblocked- Can't proceed until something else is doneneeds review- Waiting for feedbackready- Ready to be worked onwontfix- Decided not to fix
4. Area Labels
frontend- UI/UX relatedbackend- Server/API relateddatabase- Database relateddeployment- CI/CD, infrastructuresecurity- Security concerns
5. Contributor Labels
good first issue- Good for newcomershelp wanted- Looking for contributorsbeginner friendly- Easy to tackle
Creating Custom Labels
- Go to repository β Issues tab
- Click "Labels"
- Click "New label"
- Set:
- Name: Label text
- Description: What it means
- Color: Visual distinction
π¨ Color Coding Strategy
Use consistent colors for categories:
- π΄ Red: Bugs, critical issues
- π’ Green: Features, enhancements
- π΅ Blue: Documentation, information
- π‘ Yellow: Warnings, needs attention
- π£ Purple: Questions, discussion
Managing Labels via CLI
# List labels
gh label list
# Create label
gh label create "priority: high" --color "d73a4a" --description "High priority"
# Edit label
gh label edit "bug" --color "fc2929"
# Delete label
gh label delete "wontfix"Organizing with Milestones
Milestones group related issues toward a common goal, like a release or project phase.
When to Use Milestones
- Version releases: v2.0, v2.1, v3.0
- Time-based goals: Q1 2024, Sprint 15
- Feature sets: Authentication System, API Redesign
- Events: Conference Demo, Beta Launch
Creating a Milestone
- Go to repository β Issues tab
- Click "Milestones"
- Click "New milestone"
- Fill in:
- Title: e.g., "v2.0 Release"
- Due date: Target completion date (optional)
- Description: Goals and scope
Example Milestone Description
# Version 2.0 Release
Target: March 1, 2024
## Goals
- Redesigned user interface
- Performance improvements
- Dark mode support
- API v2 migration
## Success Criteria
- [ ] All critical bugs resolved
- [ ] Performance benchmarks met
- [ ] Documentation updated
- [ ] Beta testing completeMilestone Progress Tracking
GitHub shows progress automatically:
- Open issues: Still need work
- Closed issues: Completed
- Progress bar: Visual completion percentage
Example: "v2.0 Release" milestone
Progress: 15 of 23 complete (65%)
Due: March 1, 2024 (2 weeks remaining)
Issue Workflow and Best Practices
Typical Issue Lifecycle
1. Created β Issue reported
β
2. Triaged β Labels added, priority set
β
3. Assigned β Someone takes ownership
β
4. In Progress β Work begins
β
5. PR Created β Solution proposed
β
6. Reviewed β Code review
β
7. Merged β Fix deployed
β
8. Closed β Issue resolvedLinking Issues to Pull Requests
Connect issues to the PRs that fix them:
Automatic Closing Keywords
Use these keywords in PR descriptions or commit messages:
Fixes #123
Closes #456
Resolves #789
# When the PR merges, these issues automatically close!
# Works with multiple issues:
Fixes #123, fixes #456, closes #789
# Or in commit messages:
git commit -m "Fix login bug
Fixes #123"Manual Linking
Reference issues without auto-closing:
Related to #123
See #456
Addresses #789
# These create links but don't auto-closeIssue Templates
Create templates to standardize issue creation:
---
name: Bug Report
about: Report a bug to help us improve
title: '[BUG] '
labels: bug
assignees: ''
---
**Describe the bug**
A clear description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '...'
3. See error
**Expected behavior**
What you expected to happen.
**Screenshots**
If applicable, add screenshots.
**Environment:**
- OS: [e.g. macOS]
- Browser: [e.g. Chrome]
- Version: [e.g. 2.0]
**Additional context**
Any other context about the problem.---
name: Feature Request
about: Suggest an idea for this project
title: '[FEATURE] '
labels: feature
assignees: ''
---
**Is your feature request related to a problem?**
A clear description of what the problem is.
**Describe the solution you'd like**
A clear description of what you want to happen.
**Describe alternatives you've considered**
Other solutions or features you've considered.
**Additional context**
Any other context or screenshots about the feature request.GitHub Projects (Kanban Boards)
GitHub Projects provide visual project management with Kanban boards, tables, and roadmaps.
Creating a Project
- Go to repository β Projects tab
- Click "New project"
- Choose a template:
- Board: Kanban-style columns
- Table: Spreadsheet view
- Roadmap: Timeline view
- Name your project
Board View (Kanban)
Typical columns:
ββββββββββββ¬βββββββββββ¬βββββββββββ¬βββββββββββ
β Backlog β Todo β Doing β Done β
ββββββββββββΌβββββββββββΌβββββββββββΌβββββββββββ€
β Issue #1 β Issue #5 β Issue #8 β Issue #2 β
β Issue #3 β Issue #6 β Issue #9 β Issue #4 β
β Issue #7 β β β Issue #10β
ββββββββββββ΄βββββββββββ΄βββββββββββ΄βββββββββββ
Drag and drop issues between columns!Automations
Projects can auto-update based on events:
- Auto-add: New issues β Backlog
- Auto-move: PR opened β In Progress
- Auto-close: Issue closed β Done
Custom Fields
Add metadata to issues:
- Priority: Critical, High, Medium, Low
- Size: Small, Medium, Large
- Effort: 1-5 points
- Team: Frontend, Backend, DevOps
Advanced Issue Features
Task Lists
Break issues into subtasks:
## Implementation Checklist
- [x] Design user interface
- [x] Create database schema
- [ ] Implement API endpoints
- [x] GET /users
- [x] POST /users
- [ ] PUT /users/:id
- [ ] DELETE /users/:id
- [ ] Write tests
- [ ] Update documentation
Progress: 5 of 9 tasks completeMentions and Notifications
# Mention users
@username can you review this?
# Mention teams
@organization/frontend-team needs to see this
# Reference other issues
This relates to #123 and #456
# Reference PRs
See PR #789 for the fixIssue Reactions
Quick feedback without comments:
- π Thumbs up - I agree
- π Thumbs down - I disagree
- π Laugh - Funny
- π Hooray - Excited about this
- β€οΈ Heart - Love this idea
- π Rocket - Let's do it!
Saved Replies
Create template responses for common questions:
- Settings β Saved replies
- Create templates for:
- "Thanks for reporting!"
- "Need more information"
- "Duplicate issue"
- "Won't fix - explanation"
Issue Pinning
Pin important issues to the top:
- Important announcements
- Contributing guidelines
- Known issues
- Frequently asked questions
Searching and Filtering Issues
Basic Filters
# In the search box on Issues page:
is:open # Open issues only
is:closed # Closed issues only
is:issue # Issues (not PRs)
is:pr # Pull requests only
label:bug # Has 'bug' label
label:"good first issue" # Has multi-word label
-label:bug # Doesn't have 'bug' label
assignee:username # Assigned to user
assignee:@me # Assigned to you
no:assignee # Not assigned
milestone:"v2.0" # In v2.0 milestone
no:milestone # Not in any milestone
author:username # Created by user
mentions:username # User was mentioned
is:open is:issue assignee:@me label:bug
# Open bugs assigned to meAdvanced Search
# Search in title/body
memory leak in:title
"cannot connect" in:body
# Date filters
created:>2024-01-01 # Created after date
updated:<2024-01-01 # Updated before date
closed:2024-01-01..2024-02-01 # Closed in range
# Interaction counts
comments:>10 # More than 10 comments
comments:0 # No comments
# Sorting
sort:created-desc # Newest first
sort:updated-desc # Recently updated
sort:comments-desc # Most discussedSaved Filters
Bookmark common searches:
- My open issues:
is:open assignee:@me - Critical bugs:
is:open label:bug label:"priority: critical" - Needs triage:
is:open no:label - Stale issues:
is:open updated:<2024-01-01
Team Workflow Examples
Weekly Triage Process
- Monday morning: Review all new issues
- Add labels: Categorize each issue
- Set priority: Critical, high, medium, low
- Assign milestone: Which release?
- Assign owner: Who should handle this?
- Close duplicates: Reference original issue
- Ask for more info: If details missing
Sprint Planning with Issues
1. Create milestone "Sprint 15"
2. Set due date (2 weeks)
3. Add issues to milestone
4. Sort by priority
5. Assign to team members
6. Track progress daily
7. Close completed issues
8. Move incomplete to next sprintRelease Management
1. Create milestone "v2.0 Release"
2. Add all features/bugs for v2.0
3. Track progress:
- Dashboard shows completion %
- Update regularly
4. Feature freeze when 80% complete
5. Only critical bugs after freeze
6. When 100% complete:
- Create release notes
- Tag version
- Close milestone
- Announce releasePractice Issue Commands (GitHub CLI)
Try these commands to manage issues from the terminal:
Practice GitHub CLI Issue Commands
Manage issues from the command line
Try these examples:
Issue Management Best Practices
For Maintainers
- Respond quickly: Acknowledge new issues within 24 hours
- Use templates: Ensure consistent information
- Label everything: Makes filtering easy
- Close stale issues: Keep the backlog manageable
- Be kind: Thank reporters, even for duplicates
- Link related issues: Create context
- Document decisions: Explain why issues are closed
For Contributors
- Search first: Check for duplicates
- Provide details: Steps to reproduce, environment
- One issue per issue: Don't combine multiple problems
- Be patient: Maintainers are often volunteers
- Follow up: Answer questions promptly
- Close when resolved: If you find a solution
Label System Guidelines
- Keep it simple: 10-20 labels max
- Use prefixes:
priority:,type:,status: - Document meanings: Add descriptions
- Review quarterly: Remove unused labels
- Be consistent: Always use the same labels for same things
Key Takeaways
- GitHub Issues track bugs, features, tasks, and discussions
- Labels categorize issues by type, priority, status, and area
- Milestones group issues toward releases or goals
- Use keywords like "Fixes #123" to auto-close issues when PRs merge
- GitHub Projects provide Kanban boards for visual project management
- Issue templates ensure consistent, complete bug reports and feature requests
- Advanced search and filters help find and organize issues effectively
- Task lists break large issues into manageable subtasks
- GitHub CLI (
gh) enables issue management from the terminal - Good issue management improves team communication and productivity
What's Next?
Congratulations! You've completed the Collaboration Workflows section and the entire Git & GitHub tutorial series! You now have comprehensive knowledge of Git version control, GitHub collaboration, pull requests, code review, merge conflicts, and project management.
You've learned everything from basic commits to complex team workflows. You can:
- Use Git for version control locally and on GitHub
- Create branches and merge changes confidently
- Contribute to open source projects through forks and PRs
- Review code professionally and give constructive feedback
- Resolve merge conflicts without fear
- Manage projects effectively with Issues and Projects
These skills form the foundation of modern software development. Keep practicing, contribute to projects, and you'll become more proficient every day!
π― Final Practice Assignment
Put everything together:
- Create a new repository for a project idea
- Set up issue templates for bugs and features
- Create labels for your workflow
- Create a milestone for v1.0
- Add 5-10 issues representing the work needed
- Set up a GitHub Project board with Kanban columns
- Organize your issues in the board
- Create branches and PRs that close issues
- Practice the complete workflow from issue to deployment
You're now equipped to work on any software team or open source project. Welcome to the collaborative world of Git and GitHub! π