Fun with Learning Technology
LearnCoursesQuestionsTracksToolsNewsExplorePractice
Fun with Learning Technology

A new problem, explained clearly, every day.

Subscribe
Learn
  • Lessons
  • Topics
  • News
  • Tools
  • Courses
  • Career tracks
  • Everything
Site
  • About
  • Contact
  • Support
  • Privacy
  • Terms
Get the daily one

One email per new problem. No spam.

Request a tutorial

Requests shape what gets made next.

© 2026 Fun with Learning TechnologyRSS
Home›Courses›Git & GitHub›GitHub Issues and Projects

GitHub

GitHub Issues and Projects

GitHub Issues and Projects serve as a centralized hub for tracking software development tasks, bugs, and feature requirements directly alongside the codebase. By integrating project management into the repository, teams maintain a single source of truth that links granular work items to specific commits and pull requests. You should reach for these tools when you need to coordinate complex development workflows, manage feature roadmaps, or ensure that every code change has a documented purpose and status.

Understanding the Anatomy of an Issue

An Issue is more than a simple to-do list; it acts as a structured communication forum for a specific unit of work within a repository. At its core, an issue is designed to be the nexus where discussion, requirements, and documentation converge before code is ever written. When you create an issue, you are essentially establishing a clear objective or identifying a problem that needs a resolution. The reasoning behind using issues lies in the necessity for asynchronous communication. By having a persistent record that is tied directly to the project, developers can share context, discuss potential approaches, and document decisions without relying on external messaging tools that might lose history or context. This structured approach ensures that any team member—or even a future version of yourself—can trace the evolution of a feature or bug fix from initial request to the final implementation, providing essential project transparency and technical accountability throughout the software lifecycle.

# To create a new issue via GitHub CLI, use the following command structure
# gh issue create --title "Fix login timeout" --body "The user login API times out after 30 seconds."

Labeling and Organizing Issues

Labels are the primary metadata layer applied to issues to enable efficient filtering, sorting, and reporting. While a repository may contain hundreds of issues, labels provide the cognitive structure required to navigate them. From a system design perspective, labels work because they function as a non-hierarchical tagging system that allows you to categorize work by type, such as 'bug', 'enhancement', or 'documentation', and by priority, such as 'high' or 'good first issue'. This organizational capability allows for rapid assessment of project health. When you properly label issues, you transform a disorganized backlog into a manageable set of data points. This enables stakeholders to quickly identify bottlenecks, determine which bugs are impacting the user experience the most, and allocate resources effectively. By using labels, you are essentially embedding your development strategy directly into the repository, allowing for automated workflows that trigger based on these classifications, such as automatically moving a high-priority bug into a specialized triage column.

# Apply a label to an existing issue to categorize it for workflow automation
# gh issue edit 42 --add-label "bug,high-priority"

Linking Issues to Pull Requests

The most significant power of GitHub resides in the integration between issues and code changes via pull requests. By linking a pull request to an issue using specific keywords, GitHub automates the transition of task statuses. This mechanism works by establishing a formal dependency between documentation and implementation. When you open a pull request and use 'Closes #123', you are creating a logical connection that the repository platform understands as an intent to resolve that work item. Once the pull request is merged, GitHub automatically closes the linked issue. This ensures that the state of your issue tracker always reflects the reality of the codebase. By enforcing this linkage, you prevent 'orphan' code—code added without a documented reason—and you ensure that the history of your project remains clean. It serves as a verification layer that prevents accidental deployments of unfinished features, keeping your development process disciplined and your issue tracker consistently accurate.

# Link a pull request to an issue so the issue closes upon merge
# git commit -m "Fix database connection leak (Closes #10)"

Introduction to Projects and Boards

While issues handle individual tasks, Projects provide a spatial, board-based view that enables high-level orchestration of a team's workflow. A Project board typically uses a Kanban-style layout with columns representing stages like 'To Do', 'In Progress', and 'Done'. The underlying logic is to visualize the flow of work, helping teams identify where tasks are stagnating. By moving an issue across these columns, you provide immediate visual feedback on the progress of various initiatives. Projects allow you to aggregate issues from multiple repositories into a single view, which is essential for larger teams handling cross-functional projects. The project board acts as a coordination engine that replaces manual status reports. By maintaining an updated board, everyone understands the current capacity, the blockers that exist, and the trajectory of the development sprint, allowing for proactive adjustments before a project deadline is compromised by unforeseen technical challenges.

# Projects are often managed through the UI, but you can track status via CLI
# gh issue list --project "Q3 Roadmap" --state open

Automating Workflow Transitions

Automation within Projects is the final step in mature repository management, allowing you to remove manual overhead from the development process. By configuring workflows, you can define rules that react to repository events. For instance, you can automatically add an issue to a specific project board the moment it is created, or move it to an 'In Review' column as soon as a pull request is linked to it. The reasoning here is to minimize human error and ensure that project tracking does not become an additional burden on the developer. When status updates are handled by the system based on real code events, the board becomes a reliable reflection of the actual work being performed rather than a neglected piece of documentation. This integration allows the team to focus on technical delivery rather than administrative maintenance, ensuring that the project roadmap stays perfectly synced with the actual state of the repository code.

# Example of a custom workflow configuration file (yaml)
name: Move to In Progress
on:
  pull_request:
    types: [opened]
jobs:
  update_board:
    runs-on: ubuntu-latest
    steps:
      - run: echo "Automated move to project column"

Key points

  • GitHub Issues serve as a dedicated forum for discussing and tracking specific tasks within a repository.
  • Labels provide the necessary metadata to organize and prioritize work items effectively.
  • Linking pull requests to issues via keywords automates the lifecycle management of development tasks.
  • Project boards offer a visual Kanban-style interface to manage workflows across multiple issues.
  • Maintaining a single source of truth within GitHub prevents fragmented communication and lost context.
  • Automated project workflows reduce administrative overhead by linking status changes to developer actions.
  • The integration of Issues and Projects ensures that code changes are always mapped to clear, documented requirements.
  • Consistent use of these tools enables teams to identify project bottlenecks and optimize development velocity.

Common mistakes

  • Mistake: Closing issues with a commit message without referencing the issue number. Why it's wrong: GitHub cannot automatically link or close the issue if the syntax isn't followed. Fix: Use keywords like 'closes #123' in your commit message.
  • Mistake: Assigning too many people to a single issue. Why it's wrong: It creates confusion over ownership and accountability. Fix: Assign the primary contributor and use tags or comments for contributors.
  • Mistake: Treating Projects as static to-do lists rather than workflow boards. Why it's wrong: It fails to leverage automation that moves cards between columns based on PR status. Fix: Configure workflows to move items automatically.
  • Mistake: Using issues for feature discussions that should be in Pull Requests. Why it's wrong: Issues are for tracking and bug reports; code-level reviews happen in PRs. Fix: Use issues to define requirements, and PRs to review implementation.
  • Mistake: Neglecting to use Issue Templates. Why it's wrong: Contributors often omit vital diagnostic data. Fix: Create YAML templates to enforce specific info requirements before an issue is created.

Interview questions

What is the fundamental purpose of GitHub Issues in a development workflow?

GitHub Issues function as a centralized tracking system for tasks, enhancements, bugs, and documentation requests within a repository. They are essential because they provide a structured space for asynchronous communication, allowing team members to discuss problems, assign responsibilities, and set labels or milestones without cluttering the codebase. By using issues, you maintain a clear history of why changes were made, which is vital for long-term project maintenance and onboarding new contributors.

How do you link a pull request to a GitHub issue, and why is this practice important?

You can link a pull request to an issue by using keywords like 'fixes', 'closes', or 'resolves' followed by the issue number in the pull request description, such as 'Closes #123'. This is important because it creates a direct traceability bridge between the proposed code changes and the specific requirement or bug being addressed. When the pull request is merged into the default branch, GitHub automatically closes the associated issue, which keeps the project board clean and provides clear visibility into what work has been completed.

Can you explain the difference between GitHub Issues and GitHub Projects?

GitHub Issues are individual units of work or communication focused on specific tasks or bugs, whereas GitHub Projects serve as a high-level management layer used to organize, visualize, and prioritize those issues. You should think of Issues as the 'what' and Projects as the 'when' and 'how.' Projects utilize Kanban-style boards or tables to track the progress of multiple issues across a workflow, enabling teams to manage release cycles, bottlenecks, and overall resource allocation efficiently.

Compare the use of GitHub Milestones versus GitHub Labels for organizing tasks.

GitHub Labels are best used for categorizing the type of work, such as 'bug', 'enhancement', or 'documentation', or indicating priority levels like 'urgent'. In contrast, Milestones are used to group multiple issues that must be completed to reach a specific project goal, such as a v1.0 release or a feature sprint. While labels help with filtering and identifying the nature of a task, milestones provide a time-bound context and a progress tracker for reaching broader development objectives.

How can you leverage GitHub Projects to automate your team's workflow?

You can use GitHub Projects automation to significantly reduce manual maintenance of your board. For example, you can configure workflows so that when a new issue is opened in a repository, it is automatically added to a project board and placed into the 'To Do' column. Similarly, you can trigger status updates when a pull request is created or merged. Automation is vital because it ensures that the project board accurately reflects the state of the codebase without requiring team members to manually move cards constantly.

In a complex repository, how would you manage a situation where multiple developers are working on different issues that touch the same code area?

Managing this requires a combination of strict branch management and issue tracking discipline. I would ensure every developer works on a separate feature branch tied to a specific issue. By using 'Draft' pull requests, developers can share their work-in-progress early, allowing team members to see potential conflicts before they become blockers. I would also leverage GitHub Projects to keep track of dependencies between issues, ensuring that the team coordinates the sequence of merges to avoid race conditions or broken logic within the shared repository files.

All Git & GitHub interview questions →

Check yourself

1. When you want to automatically close an issue via a pull request, what is the best practice?

  • A.Mention the issue number in the PR description using a keyword like 'closes'.
  • B.Delete the issue after you merge the pull request.
  • C.Manually close the issue in the UI after the merge.
  • D.Add a comment to the issue with the link to your code.
Show answer

A. Mention the issue number in the PR description using a keyword like 'closes'.
Using 'closes #number' in the PR description allows GitHub to link and close the issue automatically upon merging. Manually closing or deleting is inefficient and misses the automation; commenting a link does not trigger status updates.

2. Which of the following is the primary purpose of a GitHub Project board?

  • A.Storing the raw source code of the repository.
  • B.Visualizing the status and flow of work items.
  • C.Hosting documentation files for the project.
  • D.Managing user permissions and access levels.
Show answer

B. Visualizing the status and flow of work items.
Project boards are for task management and workflow visualization. Storing code is for the repo, hosting documentation is for Wikis or Markdown files, and permissions are handled in repository settings.

3. Why should you use Labels on GitHub Issues?

  • A.To permanently prevent other users from commenting.
  • B.To categorize issues by type, priority, or status for easier filtering.
  • C.To increase the search engine optimization of your repository.
  • D.To assign multiple developers to a task simultaneously.
Show answer

B. To categorize issues by type, priority, or status for easier filtering.
Labels are the standard way to organize and filter issues. They do not restrict comments, affect SEO, or handle assignments, which are handled by the 'Assignees' field.

4. If an issue is open, but you are waiting for more information from the reporter, what is the recommended workflow?

  • A.Close the issue immediately to keep the board clean.
  • B.Create a new repository to house the conversation.
  • C.Use a label like 'needs-info' and keep the issue open to track the request.
  • D.Ignore the issue until the user submits a new one.
Show answer

C. Use a label like 'needs-info' and keep the issue open to track the request.
Labels like 'needs-info' help maintain transparency. Closing it kills the tracking, a new repo is overkill, and ignoring it prevents the issue from being resolved properly.

5. What happens to a card in a GitHub Project when it is linked to a Pull Request that gets merged?

  • A.The card is automatically deleted from the board.
  • B.The card status can be configured to move automatically to a 'Done' column.
  • C.The project board will lock all other cards from being moved.
  • D.The pull request is automatically reverted.
Show answer

B. The card status can be configured to move automatically to a 'Done' column.
GitHub Projects support automation workflows that trigger state changes based on PR status, such as moving to 'Done'. The card is not deleted, locking is not a feature, and it does not revert code.

Take the full Git & GitHub quiz →

← PreviousBranch Protection RulesNext →Gitflow Workflow

Git & GitHub

20 lessons, free to read.

All lessons →

Track your progress

Sign in to mark lessons done, score quizzes and keep notes.

Open in the app