1fd4e5da5Sopenharmony_ci# Tracking SPIRV-Tools work with GitHub projects
2fd4e5da5Sopenharmony_ci
3fd4e5da5Sopenharmony_ciWe are experimenting with using the [GitHub Project
4fd4e5da5Sopenharmony_cifeature](https://help.github.com/articles/tracking-the-progress-of-your-work-with-projects/)
5fd4e5da5Sopenharmony_cito track progress toward large goals.
6fd4e5da5Sopenharmony_ci
7fd4e5da5Sopenharmony_ciFor more on GitHub Projects in general, see:
8fd4e5da5Sopenharmony_ci* [Introductory blog post](https://github.com/blog/2256-a-whole-new-github-universe-announcing-new-tools-forums-and-features)
9fd4e5da5Sopenharmony_ci* [Introductory video](https://www.youtube.com/watch?v=C6MGKHkNtxU)
10fd4e5da5Sopenharmony_ci
11fd4e5da5Sopenharmony_ciThe current SPIRV-Tools project list can be found at
12fd4e5da5Sopenharmony_ci[https://github.com/KhronosGroup/SPIRV-Tools/projects](https://github.com/KhronosGroup/SPIRV-Tools/projects)
13fd4e5da5Sopenharmony_ci
14fd4e5da5Sopenharmony_ci## How we use a Project
15fd4e5da5Sopenharmony_ci
16fd4e5da5Sopenharmony_ciA GitHub Project is a set of work with an overall purpose, and
17fd4e5da5Sopenharmony_ciconsists of a collection of *Cards*.
18fd4e5da5Sopenharmony_ciEach card is either a *Note* or a regular GitHub *Issue.*
19fd4e5da5Sopenharmony_ciA Note can be converted to an Issue.
20fd4e5da5Sopenharmony_ci
21fd4e5da5Sopenharmony_ciIn our projects, a card represents work, i.e. a change that can
22fd4e5da5Sopenharmony_cibe applied to the repository.
23fd4e5da5Sopenharmony_ciThe work could be a feature, a bug to be fixed, documentation to be
24fd4e5da5Sopenharmony_ciupdated, etc.
25fd4e5da5Sopenharmony_ci
26fd4e5da5Sopenharmony_ciA project and its cards are used as a [Kanban
27fd4e5da5Sopenharmony_ciboard](https://en.wikipedia.org/wiki/Kanban_board), where cards progress
28fd4e5da5Sopenharmony_cithrough a workflow starting with ideas through to implementation and completion.
29fd4e5da5Sopenharmony_ci
30fd4e5da5Sopenharmony_ciIn our usage, a *project manager* is someone who organizes the work.
31fd4e5da5Sopenharmony_ciThey manage the creation and movement of cards
32fd4e5da5Sopenharmony_cithrough the project workflow:
33fd4e5da5Sopenharmony_ci* They create cards to capture ideas, or to decompose large ideas into smaller
34fd4e5da5Sopenharmony_ci  ones.
35fd4e5da5Sopenharmony_ci* They determine if the work for a card has been completed.
36fd4e5da5Sopenharmony_ci* Normally they are the person (or persons) who can approve and merge a pull
37fd4e5da5Sopenharmony_ci  request into the `main` branch.
38fd4e5da5Sopenharmony_ci
39fd4e5da5Sopenharmony_ciOur projects organize cards into the following columns:
40fd4e5da5Sopenharmony_ci* `Ideas`: Work which could be done, captured either as Cards or Notes.
41fd4e5da5Sopenharmony_ci  * A card in this column could be marked as a [PLACEHOLDER](#placeholders).
42fd4e5da5Sopenharmony_ci* `Ready to start`: Issues which represent work we'd like to do, and which
43fd4e5da5Sopenharmony_ci  are not blocked by other work.
44fd4e5da5Sopenharmony_ci  * The issue should be narrow enough that it can usually be addressed by a
45fd4e5da5Sopenharmony_ci    single pull request.
46fd4e5da5Sopenharmony_ci  * We want these to be Issues (not Notes) so that someone can claim the work
47fd4e5da5Sopenharmony_ci    by updating the Issue with their intent to do the work.
48fd4e5da5Sopenharmony_ci    Once an Issue is claimed, the project manager moves the corresponding card
49fd4e5da5Sopenharmony_ci    from `Ready to start` to `In progress`.
50fd4e5da5Sopenharmony_ci* `In progress`: Issues which were in `Ready to start` but which have been
51fd4e5da5Sopenharmony_ci  claimed by someone.
52fd4e5da5Sopenharmony_ci* `Done`: Issues which have been resolved, by completing their work.
53fd4e5da5Sopenharmony_ci  * The changes have been applied to the repository, typically by being pushed
54fd4e5da5Sopenharmony_ci  into the `main` branch.
55fd4e5da5Sopenharmony_ci  * Other kinds of work could update repository settings, for example.
56fd4e5da5Sopenharmony_ci* `Rejected ideas`: Work which has been considered, but which we don't want
57fd4e5da5Sopenharmony_ci  implemented.
58fd4e5da5Sopenharmony_ci  * We keep rejected ideas so they are not proposed again. This serves
59fd4e5da5Sopenharmony_ci    as a form of institutional memory.
60fd4e5da5Sopenharmony_ci  * We should record why an idea is rejected. For this reason, a rejected
61fd4e5da5Sopenharmony_ci    idea is likely to be an Issue which has been closed.
62fd4e5da5Sopenharmony_ci
63fd4e5da5Sopenharmony_ci## Prioritization
64fd4e5da5Sopenharmony_ci
65fd4e5da5Sopenharmony_ciWe are considering prioritizing cards in the `Ideas` and `Ready to start`
66fd4e5da5Sopenharmony_cicolumns so that things that should be considered first float up to the top.
67fd4e5da5Sopenharmony_ci
68fd4e5da5Sopenharmony_ciExperience will tell us if we stick to that rule, and if it proves helpful.
69fd4e5da5Sopenharmony_ci
70fd4e5da5Sopenharmony_ci## Placeholders
71fd4e5da5Sopenharmony_ci
72fd4e5da5Sopenharmony_ciA *placeholder* is a Note or Issue that represents a possibly large amount
73fd4e5da5Sopenharmony_ciof work that can be broadly defined but which may not have been broken down
74fd4e5da5Sopenharmony_ciinto small implementable pieces of work.
75fd4e5da5Sopenharmony_ci
76fd4e5da5Sopenharmony_ciUse a placeholder to capture a big idea, but without doing the upfront work
77fd4e5da5Sopenharmony_cito consider all the details of how it should be implemented.
78fd4e5da5Sopenharmony_ciOver time, break off pieces of the placeholder into implementable Issues.
79fd4e5da5Sopenharmony_ciMove those Issues into the `Ready to start` column when they become unblocked.
80fd4e5da5Sopenharmony_ci
81fd4e5da5Sopenharmony_ciWe delete the placeholder when all its work has been decomposed into
82fd4e5da5Sopenharmony_ciimplementable cards.
83