Chapter 06Lesson 01~120 minutes

GitHub Projects, Roadmaps, Custom Fields, Views, Automation, and Planning: Concepts, Architecture, and Mental Model

Build a durable mental model of GitHub Projects as a hosted planning data model that references Issues, pull requests, and draft items, then separates planning fields/views from the engineering state they summarize.

ProjectsPlanning modelCustom fieldsViews

Learning objectives

  • Explain a Project as a hosted collection of planning items and fields, not a Git object and not a second issue database.
  • Relate issue/PR items, draft items, Status, custom fields, Iteration, and repository metadata without confusing their ownership boundaries.
  • Explain why table, board, and roadmap are saved views over the same underlying Project data rather than separate boards.
  • Distinguish Project item state from Issue/PR state and from source/deployment truth.
  • Describe user-owned versus organization-owned Projects, repository linkage, Project visibility, and collaborator roles.
  • Inspect Project state read-only with the web UI, gh project, GraphQL/REST, and repository queries before mutation.
Availability: The mandatory path uses GitHub.com, a personal account, one disposable public repository, and a user-owned Project. It does not require GitHub Team/Enterprise or organization-owner rights. Organization access controls and Enterprise-specific visibility are taught as optional extensions.

1. The problem: a clean issue queue is not yet a release plan

Chapter 05 gave incoming work consistent issue semantics. A release lead now needs different questions: Which items are being considered for the next iteration? Which high-priority work has no owner? Which pull requests are in review? Which work is expected this month? A repository issue list can answer parts of those questions, but it is intentionally repository-centric. A GitHub Project adds a planning layer that can gather issues, pull requests, and draft ideas into one model and attach planning-specific fields and views.

Core boundary: Project data summarizes and organizes engineering work. It does not replace the issue, pull request, commit, check, release, or deployment as the authoritative source for those engineering states.

2. Mental model: one planning model, many source records

Project items point at source records or stand alone as drafts
flowchart LR
  I[Repository Issue] --> PI[Project item]
  PR[Pull request] --> PI2[Project item]
  D[Draft item] --> PI3[Project item]
  PI --> F[Project fields: Status / Priority / Iteration]
  PI2 --> F
  PI3 --> F
  F --> V1[Table view]
  F --> V2[Board view]
  F --> V3[Roadmap view]
  I -. authoritative issue state .-> S1[open / closed / assignees / labels]
  PR -. authoritative PR state .-> S2[open / merged / checks / review]

The solid arrows show Project membership and Project-field data. The dashed arrows show a different authority boundary: issue and PR lifecycle data belongs to those hosted resources. The same Project item can be rendered in a table, board, or roadmap; changing the layout does not duplicate the item.

3. Items, drafts, and linked engineering work

A Project item is a row/card/timeline entry. For a linked issue or pull request, the item references that GitHub resource and surfaces selected metadata. A draft item is a Project-native idea that has not yet become an issue. Drafts are useful for tentative planning, but they have no repository issue number, no Git branch, and no pull-request checks. When work becomes actionable, teams often convert or replace the draft with a real issue so ownership and repository history become explicit.

Resource Owns what? What a Project adds
Issue Title/body, open/closed state, assignees, labels, milestone, relationships Planning fields and cross-repository placement
Pull request Head/base, diff, review/check/merge state Planning fields and release/review views
Draft item Project-native title/body only A placeholder that can participate in fields/views before repository work exists
Project Membership, custom fields, views, workflows, access/visibility Planning model across those items

4. Fields: separate reusable planning semantics from repository metadata

Projects expose built-in metadata from issues and pull requests and allow custom fields such as text, number, date, single-select, and iteration. A single-select Priority field can express P0/P1/P2 across multiple repositories. An Iteration field represents repeating time boxes and automatically creates several iteration windows when configured. Status is commonly a single-select planning field such as Todo, In Progress, and Done.

Do not duplicate without an owner rule. If priority:p1 is a repository label and Priority=P1 is also a Project field, which one wins when they differ? Pick one authoritative representation or define explicit synchronization.

5. Table, board, and roadmap are questions, not competing sources of truth

A view stores a layout plus presentation choices such as visible fields, filters, grouping, and sorting. Table is best for dense inspection and bulk planning; board is best when a categorical field such as Status is the main question; roadmap is best when dates or iterations provide a time axis. Saving multiple views lets the same items answer different operational questions without copying them.

View Good operational question Common trap
Table What fields are missing or contradictory? Showing every column until the table becomes unreadable
Board What is the flow by Status or another single-select field? Treating column position as proof of engineering completion
Roadmap When is work planned relative to iterations/dates? Presenting a planned date as a delivery guarantee

6. User Projects, organization Projects, and repository linkage

Projects can be owned by a user or an organization. A user-owned Project is appropriate for personal planning and can track issues and pull requests from repositories owned by that personal account. Organization Projects support team/base access models and shared governance. Linking a Project to a repository improves discoverability; it does not move ownership of the Project into the repository. GitHub only lists a linked Project in a repository when the Project and repository share the same user or organization owner.

Project visibility and repository visibility are independent. A public Project can contain an item from a private repository, but a viewer still needs repository permission to see that private item. GitHub may return or display redacted/hidden item information where the viewer lacks the underlying repository access.

7. Built-in workflows change planning state; some workflows can change source state

Projects includes built-in workflows. Current GitHub documentation says new Projects enable workflows that set Status to Done when an issue/PR closes or when a PR merges. Other workflows can auto-add matching items or archive items. Some workflows can also cause a source-state mutation, such as closing an issue when a Project status changes. That means automation direction matters: “source event updates planning field” is usually safer than “planning field mutates source resource” unless the team explicitly owns that policy.

Production rule: begin with one-way synchronization from authoritative engineering events into planning data. Add reverse mutations only after documenting ownership, exceptions, and recovery.

8. Read-only inspection before you build anything

gh auth status --active --hostname github.com

gh project list --owner YOUR_LOGIN --format json

gh project view PROJECT_NUMBER --owner YOUR_LOGIN --format json

gh project field-list PROJECT_NUMBER --owner YOUR_LOGIN --format json

gh project item-list PROJECT_NUMBER --owner YOUR_LOGIN --limit 100   --format json

The gh project family requires Project authorization. The CLI manual currently documents project as the minimum scope for the command group; GitHub’s API guide distinguishes read:project for queries from project for mutations. Do not widen an employer-managed credential merely to complete a lab—use a personal disposable identity or the web UI instead.

# Current Projects v2 REST read, explicit 2026 API version
gh api   -H "Accept: application/vnd.github+json"   -H "X-GitHub-Api-Version: 2026-03-10"   "/users/YOUR_LOGIN/projectsV2?per_page=100" --paginate

GitHub now documents Projects v2 REST endpoints for projects, fields, items, and views under API version 2026-03-10. The Projects automation guide still documents GraphQL extensively, so both interfaces are legitimate current platform surfaces.

9. DevOps connection: planning is an observability layer for delivery work

A useful Project makes backlog, implementation, review, and release intent visible without manufacturing a second truth. In a delivery system, the Project says “we plan this work for Iteration 3 and consider it In Progress”; the pull request says whether code is actually reviewed/merged; Actions checks say whether validation passed; a deployment system says whether production changed. Reliability comes from joining these signals, not collapsing them into one status column.

10. Lesson summary

Projects are hosted planning resources made of items, fields, views, workflows, and access controls. Items can reference issues/PRs or exist as drafts. Views are projections of one model. Project Status and Priority are planning data, while issue/PR/commit/deployment state remains authoritative in its own resource.

Knowledge check

Does moving a Project card to Done merge its pull request?

What is the difference between a draft item and an issue item?

Why can a public Project still show a hidden/redacted item?

Are table, board, and roadmap three copies of the work?

What should be authoritative for “the PR is merged”?

Next lesson

Build one small release-planning model

Lesson 02 creates a user-owned Project, adds issues/PR/draft items, defines fields, creates three views, and verifies one safe built-in workflow.

Authoritative references

 About Projects
 Creating a project
 Understanding fields
 About iteration fields
 Customizing views
 Built-in Project automations
 Managing access to Projects
 Managing Project visibility
 Adding a Project to a repository
 gh project
 REST API for Projects
 Using the API to manage Projects
 REST API versions

Keep the academy open

Support free, practical DevOps education.

Every lesson is designed to remain readable in a browser, downloadable from GitHub, and usable without a paid learning platform. Contributions help expand and maintain the curriculum.

Ethereum / ERC-20
0x716c4Ab160C4B66F31a28AE2448BfF68fc3a2ef0 Send only Ethereum/ERC-20 compatible assets to this address.