Pull Requests and Kanban

Here's an example kanban board in Notion:

Kanban board

We add new work to the board as a card in the "Next Up" column. It might represent a feature, bug, or chore. Cards are sorted by priority.

To start a new task, I put my face on the top unassigned card in "Next Up", move it to "In Progress", and make a branch:

git checkout -b my-branch

I make my changes and then commit them to version control:

git add --all
git commit --verbose

I push the feature to a remote branch:

git push

I open a pull request from the command line via GitHub CLI:

gh pr create --fill
gh pr view --web

This opens a new pull request in a web browser.

A GitHub webhook starts a CI build. Another GitHub webhook posts the pull request to a team Slack channel. I move the card to the "Pull Requests" column.

A teammate clicks the link in the Slack channel. The teammate comments in-line on the code, offers feedback, and approves it.

Code review before code lands in main offers these benefits:

I make the suggested changes and commit them:

git add --all
git commit --verbose
git push

We have branch protection rules enabled: "Require pull request reviews before merging", "Require status checks to pass before merging", and "Require branches to be up to date before merging".

Once the pull request has been approved, feedback addressed, and CI has passed, I press the "Squash and merge" button. We have the repo settings for commit message set to "Default to pull request title and description".

After the pull request merges cleanly, back on the command line in my-branch, I run this script:

git post-land

It runs some cleanup and moves me back to main:

git checkout main
git fetch origin
git merge --ff-only origin/main
git branch -D "$branch"
git remote prune origin

I move the card to the "Integrating" column. This state is for the time period when web apps are continuously delivered to a staging environment, mobile apps are continuously delivered as ad-hoc builds, and team members are acceptance testing.

When everything looks good, the code is deployed to production and the card moves to "Delivered".