Git, GitHub & Version Control

Chapter 8
Issues, Planning and Developer Collaboration

Bachelors Program in Full Stack Development
Git, GitHub & Version Control   •   Bachelor

Issues, Planning and Developer Collaboration

Introduction

Software development is not only the production of source code. It is also the organized interpretation of requirements, reporting of defects, prioritization of work, communication among contributors, and preservation of project knowledge. Git records changes to files, while GitHub provides collaboration structures that connect those changes to decisions and work items.

In a professional repository, an issue may represent a defect, feature request, research question, documentation task, or operational concern. Labels, milestones, templates, discussions, wikis, and GitHub Projects help teams transform loosely expressed needs into visible, traceable, and actionable work. Pull requests and commits then provide an auditable implementation path.

This chapter examines these facilities as parts of a socio-technical system. The objective is not merely to learn where buttons are located in GitHub, but to understand how collaboration mechanisms influence software quality, accountability, planning, and team culture.

Learning Objectives

By the end of this chapter, you should be able to:

  • distinguish issues, discussions, projects, milestones, and pull requests;
  • write actionable issues using appropriate templates and acceptance criteria;
  • design useful labels, milestones, and project workflows;
  • connect branches, commits, and pull requests to work items;
  • apply GitHub Discussions and Wikis appropriately;
  • explain the purposes of CONTRIBUTING.md and CODEOWNERS;
  • analyze collaboration risks, including poor triage, excessive automation, and inaccessible communication;
  • apply these practices to a realistic development scenario.

1. Work Items as a Planning Model

A work item is a visible representation of something that requires attention. It should communicate enough information for another contributor to understand the need, assess its importance, and determine whether the work is complete.

Common work-item categories include:

CategoryTypical questionExample
BugWhat is not working?Login fails after a password reset
FeatureWhat capability is needed?Export reports as CSV
TaskWhat supporting activity is required?Update deployment documentation
Research or questionWhat must be investigated?Compare two caching strategies
MaintenanceWhat should be improved without changing user-visible behavior?Upgrade a dependency

GitHub Issues are suitable for actionable, repository-related work. A well-designed issue generally contains a concise title, context, steps or rationale, expected and actual behavior where relevant, acceptance criteria, and supporting evidence.

A defect report should distinguish observation from interpretation. “The dashboard returns HTTP 500 after selecting March” is more useful than “The dashboard is broken.” Reproduction steps, environment information, logs, screenshots, and a minimal example may substantially reduce the time required for diagnosis.

Requirements and acceptance criteria

Requirements describe desired behavior; acceptance criteria define observable conditions for judging completion. For example:

Requirement: Users should be able to export filtered transaction data.

Acceptance criteria:

  1. The export contains only records matching the active filters.
  2. The file is valid CSV encoded as UTF-8.
  3. The first row contains column headings.
  4. An empty result produces a valid file with headings and no data rows.
  5. Automated tests cover filtered and empty-result cases.

Acceptance criteria are not necessarily implementation instructions. They preserve the user or system outcome while allowing developers to select an appropriate design.

2. Issues, Templates, and Triage

Issue templates

Issue templates standardize the information contributors provide. Common templates include:

  • Bug report: environment, reproduction steps, expected behavior, actual behavior, logs, and screenshots;
  • Feature request: problem, users affected, proposed outcome, alternatives, and acceptance criteria;
  • Task template: purpose, dependencies, definition of done, and relevant files or systems;
  • Security report guidance: instructions for private reporting rather than public disclosure.

Templates improve consistency but should not become bureaucratic questionnaires. Required fields should be limited to information genuinely needed for triage. A template that is too long may discourage legitimate reports or encourage meaningless text.

Templates are commonly stored in repository configuration, often under a GitHub-specific directory. Their exact availability and interface may vary with repository settings and GitHub plan features, so teams should verify current platform documentation.

Triage

Triage is the process of reviewing new work items, clarifying them, estimating their urgency, assigning responsibility, identifying duplicates, and deciding what happens next. Triage is not the same as immediately fixing every issue.

A practical triage sequence is:

  1. Confirm that the report is understandable and reproducible where applicable.
  2. Search for duplicates and link related items.
  3. Classify the work using labels or issue types.
  4. Assess impact, urgency, and dependencies.
  5. Assign an owner or leave the issue available for selection.
  6. Place it in a milestone or project view if appropriate.
  7. Request clarification or close it with a documented reason when necessary.

Teams should distinguish severity from priority. Severity describes the effect of a problem, such as data loss or inconvenience. Priority describes when the team intends to address it. A low-severity issue can have high priority because it affects an important deadline; a severe issue may require immediate attention regardless of its planned milestone.

3. Labels and Milestones

Labels are metadata attached to issues and pull requests. Useful label dimensions include:

  • type: bug, feature, documentation;
  • area: frontend, API, database;
  • status: needs-triage, blocked, ready;
  • risk: security, breaking-change;
  • effort or scope: good-first-issue, small, large.

A labeling system should be small, documented, and mutually intelligible. If labels combine several dimensions into one phrase—for example, frontend-high-risk-urgent—filtering becomes difficult. Separate labels preserve flexibility.

Labels are not a substitute for written reasoning. “Priority: high” does not explain why work is important. The issue description or linked planning record should provide that explanation.

Milestones group work toward a target such as a release, academic sprint, migration, or compliance date. A milestone normally has a name, due date, and collection of issues or pull requests. Milestones communicate scope and progress, but they should not be treated as guarantees. Dependencies, newly discovered defects, and changing requirements may require replanning.

4. GitHub Projects and Workflow Design

GitHub Projects provides configurable planning views for issues and pull requests. Depending on the current product configuration, a project may be represented as a table, board, roadmap, or filtered view. Teams can define fields such as status, priority, iteration, owner, estimate, or target release.

A basic workflow might use these states:

Backlog → Ready → In progress → In review → Done

The states should represent meaningful transitions, not merely activity. “In review” should mean that an implementation is available for review; “Done” should have a clear definition, such as merged code, passing checks, updated documentation, and satisfied acceptance criteria.

Projects are most effective when the team defines:

  • the source of truth for work status;
  • who may change status and priority;
  • how blocked work is represented;
  • how stale items are reviewed;
  • what qualifies an item for completion;
  • how project fields relate to labels and milestones.

A project board can create an illusion of control if cards are not maintained. A small, accurate board is more valuable than a detailed but obsolete one.

Estimation and prioritization

Teams may estimate effort using hours, ideal days, story points, or simple size categories. These measures are not interchangeable. Story points, for example, are relative estimates of complexity, uncertainty, and effort within a particular team; they are not universally comparable units of time.

Prioritization can consider user value, risk reduction, urgency, dependency, and cost. A lightweight scoring model may be useful, but numerical scores should support judgment rather than conceal it. Teams should record assumptions, especially when priority decisions affect security, accessibility, or vulnerable users.

5. Discussions, Wikis, and Durable Knowledge

GitHub Discussions

Discussions support open-ended communication that does not immediately represent a committed unit of work. Appropriate topics include design proposals, usage questions, announcements, community ideas, and experience reports. A discussion may later be converted into or linked with an issue when a concrete action is agreed.

Issues and discussions should not compete ambiguously. A repository should explain which channel to use. For example, “How do I configure the development environment?” may begin as a discussion, whereas “The documented configuration fails on Ubuntu 24.04” is likely an issue.

Wikis and documentation

A wiki is useful for evolving project knowledge such as architecture notes, onboarding instructions, operational procedures, and historical decisions. However, a wiki can become disconnected from reviewed source changes. Critical documentation—API contracts, security procedures, installation steps, and behavior required for tests—often belongs in the main repository so that it can be reviewed alongside code.

A decision record should state the context, alternatives considered, decision, consequences, and date. This prevents future contributors from repeatedly reopening settled questions without understanding the original constraints.

6. Connecting Commits, Branches, Issues, and Pull Requests

Traceability links a requirement or defect to the code that addresses it and to the review that evaluates it. A typical chain is:

Issue → branch → commits → pull request → review and checks → merge → issue closure

A branch name can include an issue identifier, such as fix/142-session-timeout. Commit messages may mention the issue, while the pull request should explain the implementation, testing, limitations, and deployment considerations.

GitHub supports keywords that can close linked issues when a pull request is merged, such as “Fixes #142” or “Closes #142,” subject to repository behavior and the target branch. A reference such as “Refs #142” links the item without necessarily closing it. Contributors must use these conventions deliberately: automatically closing an issue before documentation, deployment, or verification is complete can produce false status information.

A pull request should usually contain:

  • a clear summary of the problem and solution;
  • a link to the relevant issue;
  • testing evidence;
  • screenshots or sample output for interface changes;
  • migration, compatibility, or security notes;
  • known limitations and follow-up work.

Commits should be coherent and explainable. Squashing or preserving individual commits is a project policy decision. The key requirement is that the resulting history remains understandable and supports review, rollback, and investigation.

7. CONTRIBUTING.md and CODEOWNERS

CONTRIBUTING.md

A CONTRIBUTING.md file communicates how people participate in the project. It may define:

  • supported development environments;
  • branch and commit conventions;
  • testing commands;
  • pull request expectations;
  • issue-reporting rules;
  • code style and formatting;
  • documentation requirements;
  • conduct and communication standards.

The document should be concise, discoverable, and tested against reality. Instructions that no longer work damage trust. Automation can verify some commands, but maintainers should periodically perform a fresh setup using the documented process.

CODEOWNERS

CODEOWNERS associates paths with responsible reviewers or teams. For example, changes under src/payments/ might require review from a payments team, while changes under .github/workflows/ might require platform maintainers.

CODEOWNERS supports review routing and accountability; it does not replace technical review by other contributors. It may also create bottlenecks if ownership is too centralized. Teams should keep ownership current, define backup maintainers, and protect sensitive configuration files appropriately. The exact location and enforcement behavior depend on repository configuration and branch protection settings.

8. Collaboration Quality, Governance, and Ethics

Collaboration tools shape who is heard and whose work becomes visible. Ethical and governance concerns include:

  • Privacy: avoid publishing personal data, secrets, customer information, or private vulnerability details in public issues.
  • Security: use a private security reporting channel when public disclosure could increase risk; rotate accidentally exposed credentials immediately.
  • Accessibility: provide text alternatives to screenshots, use descriptive headings, and avoid relying only on color-coded labels.
  • Inclusion: moderate harassment and discriminatory language; make contribution rules explicit.
  • Accountability: preserve decision rationale without turning disagreement into personal criticism.
  • Transparency: document changes to priority and scope, especially when they affect users or contractual obligations.

Automation should assist, not replace, judgment. Bots can label issues, check formatting, identify stale items, and request reviewers. However, automated closure may silence valid reports, stale-bot activity can disproportionately affect infrequent contributors, and machine-generated classifications may misinterpret context. Every automation rule should have an owner, an explanation, and a review or appeal path.

9. An Applied Case: CampusRide

The following is an illustrative case.

Background

CampusRide is a student-developed web application that allows users to view campus shuttle routes and report service disruptions. The team has eight developers, one product coordinator, and rotating student maintainers. The repository contains code and pull requests but has no consistent issue templates or planning workflow.

Problem

Reports arrive through email, chat, and unstructured issues. Developers duplicate work, urgent accessibility defects are mixed with feature ideas, and pull requests often lack testing evidence. A release is approaching, but the team cannot determine which work is complete.

Analysis

The team identifies three primary causes:

  1. There is no agreed definition of a work item or completion.
  2. Communication channels do not distinguish questions from actionable defects.
  3. Code changes are weakly connected to requirements and review responsibility.

Approach and solution

The team introduces the following system:

  • Bug, feature, and documentation templates with minimal required fields;
  • labels for type, subsystem, severity, priority, accessibility, and blocked status;
  • a milestone named “Autumn Release”;
  • a Project with Backlog, Ready, In progress, In review, and Done states;
  • a discussion category for design proposals and user questions;
  • a repository documentation page describing contribution and support channels;
  • CONTRIBUTING.md with setup, test, branch, and pull request guidance;
  • CODEOWNERS requiring route-data review from the transit-data team and workflow review from platform maintainers;
  • branch names and pull requests that reference issue identifiers;
  • a definition of done requiring acceptance criteria, tests where appropriate, review, and updated documentation.

The team also decides that a security-related report must use a private reporting route and that screenshots in issues require text descriptions.

Outcome

The project board now communicates release scope, and maintainers can identify blocked work. A pull request that fixes inaccurate route times references its issue, includes a regression test, and requests the appropriate owner. A separate discussion about real-time notifications is deliberately kept open until the team agrees on requirements; it is not prematurely treated as committed development work.

The system does not eliminate uncertainty. Instead, it makes uncertainty visible and gives the team a shared method for resolving it.

Learning points

  • Planning tools are useful only when their meanings are agreed.
  • Traceability improves review and release confidence.
  • Templates should collect decision-relevant information, not maximize form length.
  • Ownership improves routing but must not create a single-person bottleneck.
  • Documentation and governance are part of engineering work, not administrative extras.

10. Limitations and Contemporary Practice

GitHub is a powerful collaboration platform, but it is not a complete product-management, incident-management, or knowledge-management system. Large organizations may need integration with service desks, security platforms, identity systems, build systems, and compliance records. Integrations can improve continuity but also introduce duplicated data, permission complexity, and synchronization failures.

AI-assisted issue summarization, labeling, code suggestions, and pull request descriptions can reduce repetitive work. Nevertheless, generated text may omit constraints, invent conclusions, expose sensitive information, or reinforce biased prioritization. Human contributors remain responsible for correctness, privacy, licensing, and final decisions. AI output should be treated as a draft requiring verification, not as authoritative project knowledge.

The most durable practice is explicit collaboration design: decide what each artifact means, who maintains it, how it connects to other artifacts, and how exceptions are handled.

Chapter Summary

Issues convert needs, defects, and questions into visible work items. Templates improve the quality of incoming information, while triage determines classification, priority, ownership, and next action. Labels and milestones organize work, and GitHub Projects provide configurable views of workflow and release scope. Discussions support open-ended conversation; wikis and repository documentation preserve knowledge, with critical documentation preferably reviewed alongside code.

Branches, commits, and pull requests create traceability from a requirement to an implementation and its review. CONTRIBUTING.md communicates participation standards, while CODEOWNERS routes changes to responsible reviewers. Effective collaboration also requires privacy, security, accessibility, inclusion, transparent decisions, and cautious use of automation and AI. Tools alone do not create teamwork: shared definitions, disciplined maintenance, and respectful governance do.

Key Terms

Issue: A trackable request, defect, task, or question associated with a repository.

Triage: The process of reviewing, classifying, prioritizing, and routing work items.

Acceptance criteria: Observable conditions used to determine whether work is complete.

Label: Metadata used to classify or filter issues and pull requests.

Milestone: A grouping of work toward a target release or date.

GitHub Project: A configurable planning space for organizing repository work.

Discussion: An open-ended GitHub conversation for questions, proposals, or community communication.

Wiki: A collaboratively maintained space for project knowledge.

Traceability: The ability to connect requirements, code changes, reviews, and outcomes.

Pull request: A proposal to merge changes after review and automated checks.

Definition of done: Agreed conditions that must be satisfied before work is considered complete.

CONTRIBUTING.md: Repository guidance for contributors.

CODEOWNERS: Configuration that identifies responsible reviewers for specified paths.

Severity: The impact of a defect or failure.

Priority: The intended urgency or ordering of work.

Branch protection: Repository controls that enforce review or status requirements before merging.

Acceptance test: A test or evaluation demonstrating that acceptance criteria are met.

Decision record: A durable account of context, alternatives, decision, and consequences.

Review Questions

Short Answer Questions

  1. What is the difference between an issue and a GitHub Discussion?
  2. Why should severity and priority be recorded as separate concepts?
  3. State three elements commonly included in a useful bug report.
  4. What is the purpose of CODEOWNERS?
  5. Why should critical documentation often be reviewed in the main repository?

Long Answer Questions

  1. Explain how templates, labels, milestones, and Projects can work together during issue triage.
  2. Describe a complete traceability path from a requirement to a merged implementation.
  3. Evaluate the benefits and risks of using automated issue labeling and stale-item management.
  4. Design a contribution policy for a medium-sized open-source project.
  5. Explain how privacy, accessibility, and inclusion affect repository collaboration practices.

Analytical / Application Questions

  1. A high-impact security defect is reported publicly with customer data attached. What should maintainers do immediately, and what governance practices could prevent recurrence?
  2. A team has 60 open issues, an inaccurate project board, and pull requests with no linked requirements. Develop a recovery plan using the practices in this chapter.
  3. A CODEOWNERS rule sends every change to one overworked maintainer. Analyze the organizational risks and propose a more resilient ownership model.

Multiple Choice Questions with Answers

Question 1

Which artifact is most appropriate for an open-ended design proposal that has not yet become committed work?

A. Git tag

B. GitHub Discussion

C. CODEOWNERS file

D. Release branch

Correct Answer: B. GitHub Discussion

Question 2

What is the primary purpose of acceptance criteria?

A. To select the programming language

B. To identify repository administrators

C. To define observable conditions for completion

D. To replace all automated tests

Correct Answer: C. To define observable conditions for completion

Question 3

Which statement correctly distinguishes severity from priority?

A. Severity describes impact, while priority describes intended ordering or urgency

B. Severity describes the assignee, while priority describes the branch name

C. Severity and priority always mean exactly the same thing

D. Priority describes impact, while severity describes due date

Correct Answer: A. Severity describes impact, while priority describes intended ordering or urgency

Question 4

What does a milestone normally group?

A. User passwords

B. Commits from unrelated repositories

C. Work toward a target release or date

D. Only closed discussions

Correct Answer: C. Work toward a target release or date

Question 5

Which phrase is intended to link a pull request to an issue and potentially close it when merged?

A. Refs #142

B. Fixes #142

C. Labels #142

D. Owns #142

Correct Answer: B. Fixes #142

Question 6

What is the main function of CODEOWNERS?

A. To compile source code

B. To route specified path changes to responsible reviewers

C. To create database backups

D. To replace branch protection

Correct Answer: B. To route specified path changes to responsible reviewers

Question 7

Which item is most characteristic of CONTRIBUTING.md?

A. Contributor setup, testing, and pull request guidance

B. Encrypted production credentials

C. Binary build artifacts

D. A list of unresolved merge conflicts

Correct Answer: A. Contributor setup, testing, and pull request guidance

Question 8

A project board is most useful when its workflow states are:

A. Numerous and changed daily without explanation

B. Meaningful and supported by an agreed definition of completion

C. Visible only to one developer

D. Based entirely on commit length

Correct Answer: B. Meaningful and supported by an agreed definition of completion

Question 9

Which practice best protects sensitive vulnerability information?

A. Publish all details immediately in a public issue

B. Attach production secrets for reproducibility

C. Use an appropriate private security reporting route

D. Delete all security records

Correct Answer: C. Use an appropriate private security reporting route

Question 10

Why should AI-generated issue summaries be reviewed by people?

A. AI output can omit constraints or introduce errors

B. AI cannot produce any text

C. Review is unnecessary for project documentation

D. AI output automatically changes repository permissions

Correct Answer: A. AI output can omit constraints or introduce errors

Git, GitHub & Version Control
Chapter 8 of 14