{"action":"created","comment":{"url":"https://api.github.com/repos/DavidS/davids.github.io/pulls/comments/233928925","pull_request_review_id":175457350,"id":233928925,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIzMzkyODkyNQ==","diff_hunk":"@@ -0,0 +1,124 @@\n+---\n+title: \"My Kanban Journey\"\n+category: puppet\n+tags: puppet agile kanban\n+---\n+\n+***Disclaimer: This post was written as an employee of Puppet, Inc., but does not constitute opinions of the company.***\n+\n+Last year I was part of the effort to get the [Puppet Development Kit](https://puppet.com/blog/develop-modules-faster-new-puppet-development-kit) built and shipped. Since I'm very interested in team effectiveness and agility, at one point I took a day to re-organize our kanban boards to streamline the info exposed and reduce the friction when using them. Only after leaving the team, I realised [the value of having a low-friction JIRA configuration](https://twitter.com/nigelkersten/status/1024675669429518336):\n+\n+![a screenshot of the tweet linked above](/log/assets/2018-11-11-kanban/tweet.png)\n+\n+Thanks due to some prodding by [@sigje](https://twitter.com/sigje/status/1025121668191023104) and some internal folks, I've finally come around to writing this up.\n+\n+![a screenshot of the tweet linked above](/log/assets/2018-11-11-kanban/prod.png)\n+\n+I'll start out with an overview of how the boards look like today, and will have the life of a ticket in the second half.\n+\n+# Dual-track Agile\n+\n+One of my big concerns last year was a big backlog of things we wanted to achieve with the PDK, but were unable to address at \"this\" point in time. With the default setup of JIRA (back then), this was loading up the board with tickets that were not relevant to the day-to-day activities. At the same time, this glut of tickets obscured the view of what should be coming next, as individual stories were too detailed, and not high-lighted.\n+\n+At the time I stumbled over some folks talking about dual-track agile: splitting design and long-term planning out from the day-to-day development board. This allowed me to represent the high-level planning and progress on one board, and to declutter the day-to-day detail view necessary for development on the primary board.\n+\n+# The \"State of Play\" Board\n+\n+The main board for day-to-day development usage should look familiar to everyone who had to work with JIRA.\n+\n+![the main board](/log/assets/2018-11-11-kanban/state_of_play_board.png)\n+\n+We were already used to using Epics to group tickets, so I followed JIRA's default of Epics as swimlanes. At that time we were using our internal JIRA defaults for board columns that was built for the much larger team and project of Puppet Enterprise, which had something like 8 different ticket states to handle Dev/QA/CI handoffs. In the PDK team we were mostly using [Travis CI](https://travis-ci.com) to directly test pull requests and code would go straight to master after a review from a second engineer. This resulted in the six columns that we have now: Backlog, Groomed, Blocked, In Progress, Review, and Done.\n+\n+Astute readers might notice that the backlog column doesn't show up on the screenshot. This is a recent change in JIRA that I really love. The first column of the board is not shown on the main board anymore, but moved to a separate - aptly named \"backlog\" - view.\n+\n+\"Blocked\" is a special case, mostly reserved for tickets we started, but now Need Information (or work) from some external party. This might be community feedback, or some service from another team. We've kept those tickets on the main board to not lose sight of them, and revisit them every so often to see if we need to follow-up.","path":"_posts/2018-11-11-kanban.md","position":35,"original_position":35,"commit_id":"0c9aed5b548db53768dd005983937ad546f2d4d3","original_commit_id":"0c9aed5b548db53768dd005983937ad546f2d4d3","user":{"login":"masterzen","id":20242,"node_id":"MDQ6VXNlcjIwMjQy","avatar_url":"https://avatars3.githubusercontent.com/u/20242?v=4","gravatar_id":"","url":"https://api.github.com/users/masterzen","html_url":"https://github.com/masterzen","followers_url":"https://api.github.com/users/masterzen/followers","following_url":"https://api.github.com/users/masterzen/following{/other_user}","gists_url":"https://api.github.com/users/masterzen/gists{/gist_id}","starred_url":"https://api.github.com/users/masterzen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/masterzen/subscriptions","organizations_url":"https://api.github.com/users/masterzen/orgs","repos_url":"https://api.github.com/users/masterzen/repos","events_url":"https://api.github.com/users/masterzen/events{/privacy}","received_events_url":"https://api.github.com/users/masterzen/received_events","type":"User","site_admin":false},"body":"Maybe do a part 2 :)","created_at":"2018-11-15T17:02:47Z","updated_at":"2018-11-15T17:02:47Z","html_url":"https://github.com/DavidS/davids.github.io/pull/1#discussion_r233928925","pull_request_url":"https://api.github.com/repos/DavidS/davids.github.io/pulls/1","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/DavidS/davids.github.io/pulls/comments/233928925"},"html":{"href":"https://github.com/DavidS/davids.github.io/pull/1#discussion_r233928925"},"pull_request":{"href":"https://api.github.com/repos/DavidS/davids.github.io/pulls/1"}},"in_reply_to_id":233647017},"pull_request":{"url":"https://api.github.com/repos/DavidS/davids.github.io/pulls/1","id":229967032,"node_id":"MDExOlB1bGxSZXF1ZXN0MjI5OTY3MDMy","html_url":"https://github.com/DavidS/davids.github.io/pull/1","diff_url":"https://github.com/DavidS/davids.github.io/pull/1.diff","patch_url":"https://github.com/DavidS/davids.github.io/pull/1.patch","issue_url":"https://api.github.com/repos/DavidS/davids.github.io/issues/1","number":1,"state":"open","locked":false,"title":"(FM-7279) kanban blog post","user":{"login":"DavidS","id":27712,"node_id":"MDQ6VXNlcjI3NzEy","avatar_url":"https://avatars2.githubusercontent.com/u/27712?v=4","gravatar_id":"","url":"https://api.github.com/users/DavidS","html_url":"https://github.com/DavidS","followers_url":"https://api.github.com/users/DavidS/followers","following_url":"https://api.github.com/users/DavidS/following{/other_user}","gists_url":"https://api.github.com/users/DavidS/gists{/gist_id}","starred_url":"https://api.github.com/users/DavidS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DavidS/subscriptions","organizations_url":"https://api.github.com/users/DavidS/orgs","repos_url":"https://api.github.com/users/DavidS/repos","events_url":"https://api.github.com/users/DavidS/events{/privacy}","received_events_url":"https://api.github.com/users/DavidS/received_events","type":"User","site_admin":false},"body":"","created_at":"2018-11-11T17:51:22Z","updated_at":"2018-11-15T17:02:47Z","closed_at":null,"merged_at":null,"merge_commit_sha":"88092c376f1fad38489809ec79c4d66b0f6528c9","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/DavidS/davids.github.io/pulls/1/commits","review_comments_url":"https://api.github.com/repos/DavidS/davids.github.io/pulls/1/comments","review_comment_url":"https://api.github.com/repos/DavidS/davids.github.io/pulls/comments{/number}","comments_url":"https://api.github.com/repos/DavidS/davids.github.io/issues/1/comments","statuses_url":"https://api.github.com/repos/DavidS/davids.github.io/statuses/0c9aed5b548db53768dd005983937ad546f2d4d3","head":{"label":"DavidS:fm-7279-kanban","ref":"fm-7279-kanban","sha":"0c9aed5b548db53768dd005983937ad546f2d4d3","user":{"login":"DavidS","id":27712,"node_id":"MDQ6VXNlcjI3NzEy","avatar_url":"https://avatars2.githubusercontent.com/u/27712?v=4","gravatar_id":"","url":"https://api.github.com/users/DavidS","html_url":"https://github.com/DavidS","followers_url":"https://api.github.com/users/DavidS/followers","following_url":"https://api.github.com/users/DavidS/following{/other_user}","gists_url":"https://api.github.com/users/DavidS/gists{/gist_id}","starred_url":"https://api.github.com/users/DavidS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DavidS/subscriptions","organizations_url":"https://api.github.com/users/DavidS/orgs","repos_url":"https://api.github.com/users/DavidS/repos","events_url":"https://api.github.com/users/DavidS/events{/privacy}","received_events_url":"https://api.github.com/users/DavidS/received_events","type":"User","site_admin":false},"repo":{"id":150956351,"node_id":"MDEwOlJlcG9zaXRvcnkxNTA5NTYzNTE=","name":"davids.github.io","full_name":"DavidS/davids.github.io","private":false,"owner":{"login":"DavidS","id":27712,"node_id":"MDQ6VXNlcjI3NzEy","avatar_url":"https://avatars2.githubusercontent.com/u/27712?v=4","gravatar_id":"","url":"https://api.github.com/users/DavidS","html_url":"https://github.com/DavidS","followers_url":"https://api.github.com/users/DavidS/followers","following_url":"https://api.github.com/users/DavidS/following{/other_user}","gists_url":"https://api.github.com/users/DavidS/gists{/gist_id}","starred_url":"https://api.github.com/users/DavidS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DavidS/subscriptions","organizations_url":"https://api.github.com/users/DavidS/orgs","repos_url":"https://api.github.com/users/DavidS/repos","events_url":"https://api.github.com/users/DavidS/events{/privacy}","received_events_url":"https://api.github.com/users/DavidS/received_events","type":"User","site_admin":false},"html_url":"https://github.com/DavidS/davids.github.io","description":"My development log. Read at your own risk!","fork":false,"url":"https://api.github.com/repos/DavidS/davids.github.io","forks_url":"https://api.github.com/repos/DavidS/davids.github.io/forks","keys_url":"https://api.github.com/repos/DavidS/davids.github.io/keys{/key_id}","collaborators_url":"https://api.github.com/repos/DavidS/davids.github.io/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/DavidS/davids.github.io/teams","hooks_url":"https://api.github.com/repos/DavidS/davids.github.io/hooks","issue_events_url":"https://api.github.com/repos/DavidS/davids.github.io/issues/events{/number}","events_url":"https://api.github.com/repos/DavidS/davids.github.io/events","assignees_url":"https://api.github.com/repos/DavidS/davids.github.io/assignees{/user}","branches_url":"https://api.github.com/repos/DavidS/davids.github.io/branches{/branch}","tags_url":"https://api.github.com/repos/DavidS/davids.github.io/tags","blobs_url":"https://api.github.com/repos/DavidS/davids.github.io/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/DavidS/davids.github.io/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/DavidS/davids.github.io/git/refs{/sha}","trees_url":"https://api.github.com/repos/DavidS/davids.github.io/git/trees{/sha}","statuses_url":"https://api.github.com/repos/DavidS/davids.github.io/statuses/{sha}","languages_url":"https://api.github.com/repos/DavidS/davids.github.io/languages","stargazers_url":"https://api.github.com/repos/DavidS/davids.github.io/stargazers","contributors_url":"https://api.github.com/repos/DavidS/davids.github.io/contributors","subscribers_url":"https://api.github.com/repos/DavidS/davids.github.io/subscribers","subscription_url":"https://api.github.com/repos/DavidS/davids.github.io/subscription","commits_url":"https://api.github.com/repos/DavidS/davids.github.io/commits{/sha}","git_commits_url":"https://api.github.com/repos/DavidS/davids.github.io/git/commits{/sha}","comments_url":"https://api.github.com/repos/DavidS/davids.github.io/comments{/number}","issue_comment_url":"https://api.github.com/repos/DavidS/davids.github.io/issues/comments{/number}","contents_url":"https://api.github.com/repos/DavidS/davids.github.io/contents/{+path}","compare_url":"https://api.github.com/repos/DavidS/davids.github.io/compare/{base}...{head}","merges_url":"https://api.github.com/repos/DavidS/davids.github.io/merges","archive_url":"https://api.github.com/repos/DavidS/davids.github.io/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/DavidS/davids.github.io/downloads","issues_url":"https://api.github.com/repos/DavidS/davids.github.io/issues{/number}","pulls_url":"https://api.github.com/repos/DavidS/davids.github.io/pulls{/number}","milestones_url":"https://api.github.com/repos/DavidS/davids.github.io/milestones{/number}","notifications_url":"https://api.github.com/repos/DavidS/davids.github.io/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/DavidS/davids.github.io/labels{/name}","releases_url":"https://api.github.com/repos/DavidS/davids.github.io/releases{/id}","deployments_url":"https://api.github.com/repos/DavidS/davids.github.io/deployments","created_at":"2018-09-30T10:16:04Z","updated_at":"2018-11-14T13:53:39Z","pushed_at":"2018-11-14T13:51:18Z","git_url":"git://github.com/DavidS/davids.github.io.git","ssh_url":"git@github.com:DavidS/davids.github.io.git","clone_url":"https://github.com/DavidS/davids.github.io.git","svn_url":"https://github.com/DavidS/davids.github.io","homepage":"https://club.black.co.at/log","size":5159,"stargazers_count":0,"watchers_count":0,"language":"Ruby","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":1,"license":null,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"DavidS:master","ref":"master","sha":"b9d0668a7c69142266e44258466dd41a3ccec322","user":{"login":"DavidS","id":27712,"node_id":"MDQ6VXNlcjI3NzEy","avatar_url":"https://avatars2.githubusercontent.com/u/27712?v=4","gravatar_id":"","url":"https://api.github.com/users/DavidS","html_url":"https://github.com/DavidS","followers_url":"https://api.github.com/users/DavidS/followers","following_url":"https://api.github.com/users/DavidS/following{/other_user}","gists_url":"https://api.github.com/users/DavidS/gists{/gist_id}","starred_url":"https://api.github.com/users/DavidS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DavidS/subscriptions","organizations_url":"https://api.github.com/users/DavidS/orgs","repos_url":"https://api.github.com/users/DavidS/repos","events_url":"https://api.github.com/users/DavidS/events{/privacy}","received_events_url":"https://api.github.com/users/DavidS/received_events","type":"User","site_admin":false},"repo":{"id":150956351,"node_id":"MDEwOlJlcG9zaXRvcnkxNTA5NTYzNTE=","name":"davids.github.io","full_name":"DavidS/davids.github.io","private":false,"owner":{"login":"DavidS","id":27712,"node_id":"MDQ6VXNlcjI3NzEy","avatar_url":"https://avatars2.githubusercontent.com/u/27712?v=4","gravatar_id":"","url":"https://api.github.com/users/DavidS","html_url":"https://github.com/DavidS","followers_url":"https://api.github.com/users/DavidS/followers","following_url":"https://api.github.com/users/DavidS/following{/other_user}","gists_url":"https://api.github.com/users/DavidS/gists{/gist_id}","starred_url":"https://api.github.com/users/DavidS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DavidS/subscriptions","organizations_url":"https://api.github.com/users/DavidS/orgs","repos_url":"https://api.github.com/users/DavidS/repos","events_url":"https://api.github.com/users/DavidS/events{/privacy}","received_events_url":"https://api.github.com/users/DavidS/received_events","type":"User","site_admin":false},"html_url":"https://github.com/DavidS/davids.github.io","description":"My development log. Read at your own risk!","fork":false,"url":"https://api.github.com/repos/DavidS/davids.github.io","forks_url":"https://api.github.com/repos/DavidS/davids.github.io/forks","keys_url":"https://api.github.com/repos/DavidS/davids.github.io/keys{/key_id}","collaborators_url":"https://api.github.com/repos/DavidS/davids.github.io/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/DavidS/davids.github.io/teams","hooks_url":"https://api.github.com/repos/DavidS/davids.github.io/hooks","issue_events_url":"https://api.github.com/repos/DavidS/davids.github.io/issues/events{/number}","events_url":"https://api.github.com/repos/DavidS/davids.github.io/events","assignees_url":"https://api.github.com/repos/DavidS/davids.github.io/assignees{/user}","branches_url":"https://api.github.com/repos/DavidS/davids.github.io/branches{/branch}","tags_url":"https://api.github.com/repos/DavidS/davids.github.io/tags","blobs_url":"https://api.github.com/repos/DavidS/davids.github.io/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/DavidS/davids.github.io/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/DavidS/davids.github.io/git/refs{/sha}","trees_url":"https://api.github.com/repos/DavidS/davids.github.io/git/trees{/sha}","statuses_url":"https://api.github.com/repos/DavidS/davids.github.io/statuses/{sha}","languages_url":"https://api.github.com/repos/DavidS/davids.github.io/languages","stargazers_url":"https://api.github.com/repos/DavidS/davids.github.io/stargazers","contributors_url":"https://api.github.com/repos/DavidS/davids.github.io/contributors","subscribers_url":"https://api.github.com/repos/DavidS/davids.github.io/subscribers","subscription_url":"https://api.github.com/repos/DavidS/davids.github.io/subscription","commits_url":"https://api.github.com/repos/DavidS/davids.github.io/commits{/sha}","git_commits_url":"https://api.github.com/repos/DavidS/davids.github.io/git/commits{/sha}","comments_url":"https://api.github.com/repos/DavidS/davids.github.io/comments{/number}","issue_comment_url":"https://api.github.com/repos/DavidS/davids.github.io/issues/comments{/number}","contents_url":"https://api.github.com/repos/DavidS/davids.github.io/contents/{+path}","compare_url":"https://api.github.com/repos/DavidS/davids.github.io/compare/{base}...{head}","merges_url":"https://api.github.com/repos/DavidS/davids.github.io/merges","archive_url":"https://api.github.com/repos/DavidS/davids.github.io/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/DavidS/davids.github.io/downloads","issues_url":"https://api.github.com/repos/DavidS/davids.github.io/issues{/number}","pulls_url":"https://api.github.com/repos/DavidS/davids.github.io/pulls{/number}","milestones_url":"https://api.github.com/repos/DavidS/davids.github.io/milestones{/number}","notifications_url":"https://api.github.com/repos/DavidS/davids.github.io/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/DavidS/davids.github.io/labels{/name}","releases_url":"https://api.github.com/repos/DavidS/davids.github.io/releases{/id}","deployments_url":"https://api.github.com/repos/DavidS/davids.github.io/deployments","created_at":"2018-09-30T10:16:04Z","updated_at":"2018-11-14T13:53:39Z","pushed_at":"2018-11-14T13:51:18Z","git_url":"git://github.com/DavidS/davids.github.io.git","ssh_url":"git@github.com:DavidS/davids.github.io.git","clone_url":"https://github.com/DavidS/davids.github.io.git","svn_url":"https://github.com/DavidS/davids.github.io","homepage":"https://club.black.co.at/log","size":5159,"stargazers_count":0,"watchers_count":0,"language":"Ruby","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":1,"license":null,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/DavidS/davids.github.io/pulls/1"},"html":{"href":"https://github.com/DavidS/davids.github.io/pull/1"},"issue":{"href":"https://api.github.com/repos/DavidS/davids.github.io/issues/1"},"comments":{"href":"https://api.github.com/repos/DavidS/davids.github.io/issues/1/comments"},"review_comments":{"href":"https://api.github.com/repos/DavidS/davids.github.io/pulls/1/comments"},"review_comment":{"href":"https://api.github.com/repos/DavidS/davids.github.io/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/DavidS/davids.github.io/pulls/1/commits"},"statuses":{"href":"https://api.github.com/repos/DavidS/davids.github.io/statuses/0c9aed5b548db53768dd005983937ad546f2d4d3"}},"author_association":"OWNER"}}
{"actor":{"display_login":"masterzen"}}