|  | # Tracking SPIRV-Tools work with GitHub projects | 
|  |  | 
|  | We are experimenting with using the [GitHub Project | 
|  | feature](https://help.github.com/articles/tracking-the-progress-of-your-work-with-projects/) | 
|  | to track progress toward large goals. | 
|  |  | 
|  | For more on GitHub Projects in general, see: | 
|  | * [Introductory blog post](https://github.com/blog/2256-a-whole-new-github-universe-announcing-new-tools-forums-and-features) | 
|  | * [Introductory video](https://www.youtube.com/watch?v=C6MGKHkNtxU) | 
|  |  | 
|  | The current SPIRV-Tools project list can be found at | 
|  | [https://github.com/KhronosGroup/SPIRV-Tools/projects](https://github.com/KhronosGroup/SPIRV-Tools/projects) | 
|  |  | 
|  | ## How we use a Project | 
|  |  | 
|  | A GitHub Project is a set of work with an overall purpose, and | 
|  | consists of a collection of *Cards*. | 
|  | Each card is either a *Note* or a regular GitHub *Issue.* | 
|  | A Note can be converted to an Issue. | 
|  |  | 
|  | In our projects, a card represents work, i.e. a change that can | 
|  | be applied to the repository. | 
|  | The work could be a feature, a bug to be fixed, documentation to be | 
|  | updated, etc. | 
|  |  | 
|  | A project and its cards are used as a [Kanban | 
|  | board](https://en.wikipedia.org/wiki/Kanban_board), where cards progress | 
|  | through a workflow starting with ideas through to implementation and completion. | 
|  |  | 
|  | In our usage, a *project manager* is someone who organizes the work. | 
|  | They manage the creation and movement of cards | 
|  | through the project workflow: | 
|  | * They create cards to capture ideas, or to decompose large ideas into smaller | 
|  | ones. | 
|  | * They determine if the work for a card has been completed. | 
|  | * Normally they are the person (or persons) who can approve and merge a pull | 
|  | request into the `main` branch. | 
|  |  | 
|  | Our projects organize cards into the following columns: | 
|  | * `Ideas`: Work which could be done, captured either as Cards or Notes. | 
|  | * A card in this column could be marked as a [PLACEHOLDER](#placeholders). | 
|  | * `Ready to start`: Issues which represent work we'd like to do, and which | 
|  | are not blocked by other work. | 
|  | * The issue should be narrow enough that it can usually be addressed by a | 
|  | single pull request. | 
|  | * We want these to be Issues (not Notes) so that someone can claim the work | 
|  | by updating the Issue with their intent to do the work. | 
|  | Once an Issue is claimed, the project manager moves the corresponding card | 
|  | from `Ready to start` to `In progress`. | 
|  | * `In progress`: Issues which were in `Ready to start` but which have been | 
|  | claimed by someone. | 
|  | * `Done`: Issues which have been resolved, by completing their work. | 
|  | * The changes have been applied to the repository, typically by being pushed | 
|  | into the `main` branch. | 
|  | * Other kinds of work could update repository settings, for example. | 
|  | * `Rejected ideas`: Work which has been considered, but which we don't want | 
|  | implemented. | 
|  | * We keep rejected ideas so they are not proposed again. This serves | 
|  | as a form of institutional memory. | 
|  | * We should record why an idea is rejected. For this reason, a rejected | 
|  | idea is likely to be an Issue which has been closed. | 
|  |  | 
|  | ## Prioritization | 
|  |  | 
|  | We are considering prioritizing cards in the `Ideas` and `Ready to start` | 
|  | columns so that things that should be considered first float up to the top. | 
|  |  | 
|  | Experience will tell us if we stick to that rule, and if it proves helpful. | 
|  |  | 
|  | ## Placeholders | 
|  |  | 
|  | A *placeholder* is a Note or Issue that represents a possibly large amount | 
|  | of work that can be broadly defined but which may not have been broken down | 
|  | into small implementable pieces of work. | 
|  |  | 
|  | Use a placeholder to capture a big idea, but without doing the upfront work | 
|  | to consider all the details of how it should be implemented. | 
|  | Over time, break off pieces of the placeholder into implementable Issues. | 
|  | Move those Issues into the `Ready to start` column when they become unblocked. | 
|  |  | 
|  | We delete the placeholder when all its work has been decomposed into | 
|  | implementable cards. |