{"action":"created","comment":{"url":"https://api.github.com/repos/ipfs/pm/pulls/comments/74540143","id":74540143,"diff_hunk":"@@ -0,0 +1,287 @@\n+# IPFS Project Management Process\n+\n+**Status: work in progress, not even a full draft yet**\n+\n+## Introduction\n+TODO: describe the purpose of this document\n+\n+- this is an opt-in process, nobody in the community is *required* to use this process\n+\n+## Table on Contents\n+- [TL;DR](#tldr)\n+- [Projects](#projects)\n+- [Roles](#roles)\n+  - [Product Owners](#product-owners)\n+  - [Project Leads](#project-leads)\n+  - [Project Managers](#project-managers)\n+- [Structure](#structure)\n+  - [Overview](#overview)\n+  - [Goals](#goals)\n+  - [Backlog](#backlog)\n+  - [Milestones](#milestones)\n+  - [Project Roadmap](#project-roadmap)\n+  - [Organization Roadmap](#organization-roadmap)\n+- [Workflow](#flow)\n+  - [Pipelines](#pipelines)\n+    - [Stages](#stages)\n+    - [Flow](#flow)\n+    - [Example](#example)\n+  - [Weekly Updates](#weekly-updates)\n+  - [Roadmap Updates](#roadmap-updates)\n+- [Implementation Guideline](#implementation-guideline)\n+\n+## TL;DR\n+\n+The IPFS project management process has the following **cadence**:\n+\n+Weekly Updates\n+- once a week (2 weeks?)\n+- discuss last week's progress\n+- discuss the plans for next week\n+\n+Roadmap Updates\n+- every 3 months\n+- identify, discuss and plan the next steps for the organization as a whole\n+\n+The IPFS project management process defines the following **units of work**:\n+\n+Projects \n+- may contain other projects\n+- have a project leader who \"roadmaps\" (decides what are goals and milestones, and when they should happen)\n+- have a roadmap (list of milestones and goals)\n+- have a backlog (list of goals)\n+\n+Milestones \n+- measurable unit of progress\n+- contains a list of goals, ordered by priority\n+- usually but not always sequentially ordered\n+- may have a deadline\n+\n+Goals\n+- an individual actionable unit of work\n+- may have other Goals as dependencies\n+- may have parts or sub-goals\n+- may have parts or sub-goals big enough to merit own Goals\n+\n+The IPFS project management process, planning and tracking work is done with the following **tools**:\n+\n+Roadmaps\n+- are attached to a project\n+- have a list of milestones, ordered by completion time\n+\n+Backlogs\n+- are attached to a project\n+- have a list of all goals for a project, ordered by priority\n+\n+Pipelines\n+- have a set of stages through which goals move (the steps between \"not done\" and \"done\")\n+- show what has been completed, what's being worked on at the moment and what will be worked on next\n+\n+\n+## Projects\n+TODO\n+\n+## Roles\n+TODO\n+\n+#### Project Leads\n+TODO\n+\n+#### Product Owners\n+TODO\n+\n+#### Project Managers\n+TODO\n+\n+#### The Sprint Master\n+\n+Ideally, there should be a sprint master who knows every participant's tasks and projects intimately, helps moderate work loads, checks in when a task has been taking long than expected, sets the sprint goals, and adds any urgent or incoming business to the sprint. Realistically, this is done by the discussion leads and the team as a whole. The sprint administrator was created to minimize the sprint master's admin, and to help the discussion leads.\n+\n+#### The Discussion Leads\n+\n+Each discussion has a lead, and each lead is responsible for preparing for that talk before hand. There is a [sprint-issue-template](sprint-issue-template.md) available for discussion leads to add into an Etherpad for their sprint; the admin should have already filled out the Etherpad with the template, and linked to your Etherpad in the sprint issue. After the discussions, the lead should add the notes directly into the current sprint issue.\n+\n+#### Sprint Administrator\n+\n+The sprint administrator (normally [@RichardLitt](//github.com/RichardLitt)) is responsible for the sprint process every week.\n+\n+***TODO: Link to a document with the specific tasks***\n+\n+## Structure\n+\n+### Overview\n+The project information across the organization is tracked with the structure described in this section. At the highest level, we have an Organization Roadmap, which lists all projects and their milestones. Each project contains a set of milestone and milestones contain one or more goals. Goals are the basic unit of work and they describe everything from bugs and new features to general tasks. Goals are collected and tracked in a Backlog.\n+\n+```\n+Organization        |   Project 1           Project 2\n+                    |  \n+Roadmap             |   Roadmap             Roadmap  \n+                    |  \n+  Milestones        |     Milestone 1         Milestone A\n+    Milestone 1     |       Goal 1              Goal A\n+    Milestone 2     |       Goal 2            Milestone B\n+    Milestone 3     |       Goal 3              Goal B\n+    Milestone A     |     Milestone 2           Goal C\n+    Milestone B     |       Goal 4              Goal D\n+    Milestone C     |     Milestone 3      \n+                    |       Goal 5      \n+  Projects          |  \n+    Project 1       |   Backlog             Backlog\n+    Project 2       |     Goal 1              Goal A\n+    Project 3       |     Goal 2              Goal B\n+                    |     Goal 3              Goal C\n+                    |     Goal 4              Goal D\n+                    |     Goal 5\n+```\n+\n+### Goals\n+At the heart of each project are the goals. They are the basic unit of work. Goals can be anything that ***adds value to a release***. This includes issues reported by users, feature requests, bugs, Pull-Requests, general tasks such as refactoring, documentation or research. Goals are collected, maintained and tracked in the backlog by the project lead.\n+\n+A goal description includes the following:\n+- Name / Summary\n+  - Describes what the goal is on high level\n+  - Example 1: \"Reduce the size of the go-ipfs executable\"\n+  - Example 2: \"js-ipfs should have API Documentation\"\n+- Description\n+  - What the problem is and how to achieve this goal\n+  - Should tell you how you will know that the problem has been solved or the goal has been achieved\n+  - Describe the type of this goal: is it a bug? a new feature? something else?\n+- Status\n+  - The status should signal the goal's status towards completion\n+  - What is the current state of this goal? Is it to-be-reviewed? In progress? Blocked? Done?\n+  - A goal can be in only one state at a time\n+- Dependencies (where applicable)\n+  - Links to other goals that must happen before or concurrently with this one\n+- Any additional information that helps to reach this goal (optional)\n+\n+TODO: a clear example\n+\n+### Backlog\n+Backlog is the collection of all goals in a project. It should be as comprehensive as possible, including everything that needs to happen or should happen in a particular project. The backlog indicates priority by order: the items that have the highest priority are at the top of the list. The backlog is owned and maintained by the project lead. As part of daily work, the backlog gets updated and a general grooming should happen on weekly basis.\n+\n+A backlog has the following information:\n+- All goals of a project\n+- Priority of goals in sorted order\n+\n+While the backlog is usually one big list of goals, it may sometimes become convoluted. In this case, the backlog list can be split in two: ***Backlog*** and ***Future Work***. The future work section lists goals that will probably not be worked on anytime soon, or are not ready to be worked on yet, whereas the ready section contains the goals that are ready to be worked on or \"approved\". If split, together they are called \"the backlog\" while *Future Work* is referenced only in its specific meaning. The split and maintenance of both lists are done by the project lead.\n+\n+### Milestones\n+A milestone is batch of goals that together achieve a significant improvement to the product or project. Each project has a set of milestones. A milestone is completed when all goals associated with it have been completed. Milestones are tracked in the project roadmap by the project lead.","path":"Project Management Process.md","position":169,"original_position":169,"commit_id":"0fbf77efecf51695f4c9370c540e4d6727cda80d","original_commit_id":"0fbf77efecf51695f4c9370c540e4d6727cda80d","user":{"login":"jbenet","id":138401,"avatar_url":"https://avatars.githubusercontent.com/u/138401?v=3","gravatar_id":"","url":"https://api.github.com/users/jbenet","html_url":"https://github.com/jbenet","followers_url":"https://api.github.com/users/jbenet/followers","following_url":"https://api.github.com/users/jbenet/following{/other_user}","gists_url":"https://api.github.com/users/jbenet/gists{/gist_id}","starred_url":"https://api.github.com/users/jbenet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jbenet/subscriptions","organizations_url":"https://api.github.com/users/jbenet/orgs","repos_url":"https://api.github.com/users/jbenet/repos","events_url":"https://api.github.com/users/jbenet/events{/privacy}","received_events_url":"https://api.github.com/users/jbenet/received_events","type":"User","site_admin":false},"body":"maybe \"significant, measurable improvement\" or something","created_at":"2016-08-12T04:24:53Z","updated_at":"2016-08-12T04:24:53Z","html_url":"https://github.com/ipfs/pm/pull/131#discussion_r74540143","pull_request_url":"https://api.github.com/repos/ipfs/pm/pulls/131","_links":{"self":{"href":"https://api.github.com/repos/ipfs/pm/pulls/comments/74540143"},"html":{"href":"https://github.com/ipfs/pm/pull/131#discussion_r74540143"},"pull_request":{"href":"https://api.github.com/repos/ipfs/pm/pulls/131"}}},"pull_request":{"url":"https://api.github.com/repos/ipfs/pm/pulls/131","id":79915498,"html_url":"https://github.com/ipfs/pm/pull/131","diff_url":"https://github.com/ipfs/pm/pull/131.diff","patch_url":"https://github.com/ipfs/pm/pull/131.patch","issue_url":"https://api.github.com/repos/ipfs/pm/issues/131","number":131,"state":"open","locked":false,"title":"(WIP) Project Management Process document","user":{"login":"haadcode","id":7499694,"avatar_url":"https://avatars.githubusercontent.com/u/7499694?v=3","gravatar_id":"","url":"https://api.github.com/users/haadcode","html_url":"https://github.com/haadcode","followers_url":"https://api.github.com/users/haadcode/followers","following_url":"https://api.github.com/users/haadcode/following{/other_user}","gists_url":"https://api.github.com/users/haadcode/gists{/gist_id}","starred_url":"https://api.github.com/users/haadcode/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/haadcode/subscriptions","organizations_url":"https://api.github.com/users/haadcode/orgs","repos_url":"https://api.github.com/users/haadcode/repos","events_url":"https://api.github.com/users/haadcode/events{/privacy}","received_events_url":"https://api.github.com/users/haadcode/received_events","type":"User","site_admin":false},"body":"Here's a working document for defining the project management process for IPFS. Discussion has happened here: https://github.com/ipfs/pm/issues/125.\r\n\r\nCurrently only the structure has been written down (excluding Backlog section).\r\n\r\nFeedback on the sections that don't say **TODO** would be highly appreciated. Also, let me know if there's something important missing from the structure part or otherwise.","created_at":"2016-08-03T14:25:16Z","updated_at":"2016-08-12T04:24:53Z","closed_at":null,"merged_at":null,"merge_commit_sha":"1406350e07d87f1ee24ad28dadfdec170760ae2b","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/ipfs/pm/pulls/131/commits","review_comments_url":"https://api.github.com/repos/ipfs/pm/pulls/131/comments","review_comment_url":"https://api.github.com/repos/ipfs/pm/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ipfs/pm/issues/131/comments","statuses_url":"https://api.github.com/repos/ipfs/pm/statuses/0fbf77efecf51695f4c9370c540e4d6727cda80d","head":{"label":"ipfs:processdoc","ref":"processdoc","sha":"0fbf77efecf51695f4c9370c540e4d6727cda80d","user":{"login":"ipfs","id":10536621,"avatar_url":"https://avatars.githubusercontent.com/u/10536621?v=3","gravatar_id":"","url":"https://api.github.com/users/ipfs","html_url":"https://github.com/ipfs","followers_url":"https://api.github.com/users/ipfs/followers","following_url":"https://api.github.com/users/ipfs/following{/other_user}","gists_url":"https://api.github.com/users/ipfs/gists{/gist_id}","starred_url":"https://api.github.com/users/ipfs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ipfs/subscriptions","organizations_url":"https://api.github.com/users/ipfs/orgs","repos_url":"https://api.github.com/users/ipfs/repos","events_url":"https://api.github.com/users/ipfs/events{/privacy}","received_events_url":"https://api.github.com/users/ipfs/received_events","type":"Organization","site_admin":false},"repo":{"id":33060528,"name":"pm","full_name":"ipfs/pm","owner":{"login":"ipfs","id":10536621,"avatar_url":"https://avatars.githubusercontent.com/u/10536621?v=3","gravatar_id":"","url":"https://api.github.com/users/ipfs","html_url":"https://github.com/ipfs","followers_url":"https://api.github.com/users/ipfs/followers","following_url":"https://api.github.com/users/ipfs/following{/other_user}","gists_url":"https://api.github.com/users/ipfs/gists{/gist_id}","starred_url":"https://api.github.com/users/ipfs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ipfs/subscriptions","organizations_url":"https://api.github.com/users/ipfs/orgs","repos_url":"https://api.github.com/users/ipfs/repos","events_url":"https://api.github.com/users/ipfs/events{/privacy}","received_events_url":"https://api.github.com/users/ipfs/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ipfs/pm","description":"Project Management","fork":false,"url":"https://api.github.com/repos/ipfs/pm","forks_url":"https://api.github.com/repos/ipfs/pm/forks","keys_url":"https://api.github.com/repos/ipfs/pm/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ipfs/pm/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ipfs/pm/teams","hooks_url":"https://api.github.com/repos/ipfs/pm/hooks","issue_events_url":"https://api.github.com/repos/ipfs/pm/issues/events{/number}","events_url":"https://api.github.com/repos/ipfs/pm/events","assignees_url":"https://api.github.com/repos/ipfs/pm/assignees{/user}","branches_url":"https://api.github.com/repos/ipfs/pm/branches{/branch}","tags_url":"https://api.github.com/repos/ipfs/pm/tags","blobs_url":"https://api.github.com/repos/ipfs/pm/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ipfs/pm/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ipfs/pm/git/refs{/sha}","trees_url":"https://api.github.com/repos/ipfs/pm/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ipfs/pm/statuses/{sha}","languages_url":"https://api.github.com/repos/ipfs/pm/languages","stargazers_url":"https://api.github.com/repos/ipfs/pm/stargazers","contributors_url":"https://api.github.com/repos/ipfs/pm/contributors","subscribers_url":"https://api.github.com/repos/ipfs/pm/subscribers","subscription_url":"https://api.github.com/repos/ipfs/pm/subscription","commits_url":"https://api.github.com/repos/ipfs/pm/commits{/sha}","git_commits_url":"https://api.github.com/repos/ipfs/pm/git/commits{/sha}","comments_url":"https://api.github.com/repos/ipfs/pm/comments{/number}","issue_comment_url":"https://api.github.com/repos/ipfs/pm/issues/comments{/number}","contents_url":"https://api.github.com/repos/ipfs/pm/contents/{+path}","compare_url":"https://api.github.com/repos/ipfs/pm/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ipfs/pm/merges","archive_url":"https://api.github.com/repos/ipfs/pm/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ipfs/pm/downloads","issues_url":"https://api.github.com/repos/ipfs/pm/issues{/number}","pulls_url":"https://api.github.com/repos/ipfs/pm/pulls{/number}","milestones_url":"https://api.github.com/repos/ipfs/pm/milestones{/number}","notifications_url":"https://api.github.com/repos/ipfs/pm/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ipfs/pm/labels{/name}","releases_url":"https://api.github.com/repos/ipfs/pm/releases{/id}","deployments_url":"https://api.github.com/repos/ipfs/pm/deployments","created_at":"2015-03-29T03:49:53Z","updated_at":"2016-08-11T13:10:54Z","pushed_at":"2016-08-11T19:37:15Z","git_url":"git://github.com/ipfs/pm.git","ssh_url":"git@github.com:ipfs/pm.git","clone_url":"https://github.com/ipfs/pm.git","svn_url":"https://github.com/ipfs/pm","homepage":"https://github.com/ipfs/pm/issues","size":121,"stargazers_count":33,"watchers_count":33,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":12,"mirror_url":null,"open_issues_count":16,"forks":12,"open_issues":16,"watchers":33,"default_branch":"master"}},"base":{"label":"ipfs:master","ref":"master","sha":"348b176f4a5fa31352d3117f4a658ff73a3dde30","user":{"login":"ipfs","id":10536621,"avatar_url":"https://avatars.githubusercontent.com/u/10536621?v=3","gravatar_id":"","url":"https://api.github.com/users/ipfs","html_url":"https://github.com/ipfs","followers_url":"https://api.github.com/users/ipfs/followers","following_url":"https://api.github.com/users/ipfs/following{/other_user}","gists_url":"https://api.github.com/users/ipfs/gists{/gist_id}","starred_url":"https://api.github.com/users/ipfs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ipfs/subscriptions","organizations_url":"https://api.github.com/users/ipfs/orgs","repos_url":"https://api.github.com/users/ipfs/repos","events_url":"https://api.github.com/users/ipfs/events{/privacy}","received_events_url":"https://api.github.com/users/ipfs/received_events","type":"Organization","site_admin":false},"repo":{"id":33060528,"name":"pm","full_name":"ipfs/pm","owner":{"login":"ipfs","id":10536621,"avatar_url":"https://avatars.githubusercontent.com/u/10536621?v=3","gravatar_id":"","url":"https://api.github.com/users/ipfs","html_url":"https://github.com/ipfs","followers_url":"https://api.github.com/users/ipfs/followers","following_url":"https://api.github.com/users/ipfs/following{/other_user}","gists_url":"https://api.github.com/users/ipfs/gists{/gist_id}","starred_url":"https://api.github.com/users/ipfs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ipfs/subscriptions","organizations_url":"https://api.github.com/users/ipfs/orgs","repos_url":"https://api.github.com/users/ipfs/repos","events_url":"https://api.github.com/users/ipfs/events{/privacy}","received_events_url":"https://api.github.com/users/ipfs/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ipfs/pm","description":"Project Management","fork":false,"url":"https://api.github.com/repos/ipfs/pm","forks_url":"https://api.github.com/repos/ipfs/pm/forks","keys_url":"https://api.github.com/repos/ipfs/pm/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ipfs/pm/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ipfs/pm/teams","hooks_url":"https://api.github.com/repos/ipfs/pm/hooks","issue_events_url":"https://api.github.com/repos/ipfs/pm/issues/events{/number}","events_url":"https://api.github.com/repos/ipfs/pm/events","assignees_url":"https://api.github.com/repos/ipfs/pm/assignees{/user}","branches_url":"https://api.github.com/repos/ipfs/pm/branches{/branch}","tags_url":"https://api.github.com/repos/ipfs/pm/tags","blobs_url":"https://api.github.com/repos/ipfs/pm/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ipfs/pm/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ipfs/pm/git/refs{/sha}","trees_url":"https://api.github.com/repos/ipfs/pm/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ipfs/pm/statuses/{sha}","languages_url":"https://api.github.com/repos/ipfs/pm/languages","stargazers_url":"https://api.github.com/repos/ipfs/pm/stargazers","contributors_url":"https://api.github.com/repos/ipfs/pm/contributors","subscribers_url":"https://api.github.com/repos/ipfs/pm/subscribers","subscription_url":"https://api.github.com/repos/ipfs/pm/subscription","commits_url":"https://api.github.com/repos/ipfs/pm/commits{/sha}","git_commits_url":"https://api.github.com/repos/ipfs/pm/git/commits{/sha}","comments_url":"https://api.github.com/repos/ipfs/pm/comments{/number}","issue_comment_url":"https://api.github.com/repos/ipfs/pm/issues/comments{/number}","contents_url":"https://api.github.com/repos/ipfs/pm/contents/{+path}","compare_url":"https://api.github.com/repos/ipfs/pm/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ipfs/pm/merges","archive_url":"https://api.github.com/repos/ipfs/pm/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ipfs/pm/downloads","issues_url":"https://api.github.com/repos/ipfs/pm/issues{/number}","pulls_url":"https://api.github.com/repos/ipfs/pm/pulls{/number}","milestones_url":"https://api.github.com/repos/ipfs/pm/milestones{/number}","notifications_url":"https://api.github.com/repos/ipfs/pm/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ipfs/pm/labels{/name}","releases_url":"https://api.github.com/repos/ipfs/pm/releases{/id}","deployments_url":"https://api.github.com/repos/ipfs/pm/deployments","created_at":"2015-03-29T03:49:53Z","updated_at":"2016-08-11T13:10:54Z","pushed_at":"2016-08-11T19:37:15Z","git_url":"git://github.com/ipfs/pm.git","ssh_url":"git@github.com:ipfs/pm.git","clone_url":"https://github.com/ipfs/pm.git","svn_url":"https://github.com/ipfs/pm","homepage":"https://github.com/ipfs/pm/issues","size":121,"stargazers_count":33,"watchers_count":33,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":12,"mirror_url":null,"open_issues_count":16,"forks":12,"open_issues":16,"watchers":33,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ipfs/pm/pulls/131"},"html":{"href":"https://github.com/ipfs/pm/pull/131"},"issue":{"href":"https://api.github.com/repos/ipfs/pm/issues/131"},"comments":{"href":"https://api.github.com/repos/ipfs/pm/issues/131/comments"},"review_comments":{"href":"https://api.github.com/repos/ipfs/pm/pulls/131/comments"},"review_comment":{"href":"https://api.github.com/repos/ipfs/pm/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ipfs/pm/pulls/131/commits"},"statuses":{"href":"https://api.github.com/repos/ipfs/pm/statuses/0fbf77efecf51695f4c9370c540e4d6727cda80d"}}}}
{"actor":{"display_login":"jbenet"}}