一人スクラムをAzure Boardで実践してみる

## 背景
基本的に怠惰な自分を律する為に、 **「目標設定・計画・実践・振り返り」** を含む **「スクラム」** の仕組みを、自身のタスク管理に応用し **「一人スクラム」** として実践してきました。これまでは、メモ帳や簡易ToDoツールで対応していましたが、今回はせっかくの機会と思い **Azure Boards** を使って実践してみました。
本投稿は、Azure Boardsをスクラムのフレームワークに適応する為の設定例と実際に実践して得た気づきを纏めた記事となります。
## Azure Boardsとは
[Azure Boards](https://learn.microsoft.com/ja-jp/azure/devops/boards/get-started/what-is-azure-boards?view=azure-devops)とはAzure DevOpsが提供するサービス群の一つで、PJ管理ツールの機能を有します。比較されるツールとしてJira等が挙げられます。Jiraと比べた優位性は、Azure DevOpsとしてPJ管理以外の機能も包括的に利用ができる為、連携しやすい事が挙げられます。
Azure Boardsは、[最初の5人まで無料で利用する事が可能](https://azure.microsoft.com/ja-jp/pricing/details/devops/azure-devops-services/)です。
<img width="400" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/dd6b1511-5808-3b3f-c037-70634f6f4e6a.png>
## そもそもスクラムとは
[スクラムガイド](https://scrumguides.org/docs/scrumguide/v2020/2020-Scrum-Guide-Japanese.pdf)から引用すると、 **「複雑な問題に対応する適応型のソリューションを通じて、人々、チーム、組織が価値を生み出す為のフレームワーク」** と定義されています。イテレーションという一定の期間で、チームメンバ皆が主体性を持ち、プロダクト開発する **アジャイル開発** によく用いられています。
スクラムは3つのロール(PO,SM,DEV)、5つのイベント(スプリント、スプリントプランニング、デイリースクラム、スプリントレビュー、レトロスペクティブ)、3つの作成物（プラダクトバックログ、スプリントバックログ、インクリメント）によって規定されています。
<img width="900" https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/21751325-c07a-19a3-9d82-6b6939abcc4e.png>
引用：https://www.scrum.org/resources/scrum-framework-poster
## 一人スクラムとは
スクラムのフレームワークを一人で回すことを、ここでは非公式ながら **「一人スクラム」** と呼びます。実は、[他の人](https://www.hamakou108.com/posts/solo-scrumming)も実践しているようです。
自分がTodo管理ではなく、一人スクラムの違いは **目標設定と振り返りがある点** です。自分はまさにその目標と振り返りを通した成長と達成感を得る為に実践していました。
ToDo管理と比較すると、目標設定と振り返り等の付随作業が増える為、人によってはメンドーと感じる要素もありますし、そういう部分で人によって合う合わないがあると思います。
## Azure Boards設定
### 前提情報
Azure Boardsを利用する為には[Azure DevOpsの組織作成](https://learn.microsoft.com/ja-jp/azure/devops/organizations/accounts/create-organization?view=azure-devops)が必要となりますが、今回作成方法の紹介は割愛します。
本稿で紹介する設定は、一人スクラムに必要な最低限の設定にフォーカスしています。公式ドキュメントにはAzure Boardsを利用した[スクラムを実践する為の詳細な情報](https://learn.microsoft.com/ja-jp/azure/devops/boards/sprints/scrum-overview?view=azure-devops)も纏められている為、興味ある方はこちらも併せてご参照いただければと思います。
### PJ作成
Azure DevOpsのトップページの右上に「+ New project 」ボタンを押下。
<img width="900" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/c06d2ec1-7909-a589-d157-31923557bdc1.png>

ProjectNameは任意の名前、Visibilityは「Private」、Advancedを選択してVersion Controlを「Git」、Work Item processを「scrum」として、「create」ボタンを押下。
<img width="300" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/8f996747-4848-c0ac-b048-42f4602ba06d.png>

無事に作成できました。
<img width="900" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/840ff9cb-6090-a544-0eba-5c54cdbacd5b.png>

作成したPJを選択するとOverviewのトップページが表示されます。
ここからプロダクトバックログで扱うアイテムを設定していきます。左メニューの下にある「Project Setting」を押下。
<img width="900" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/f9b9dfdd-6d93-b897-c5bd-4024fce328a5.png>

メニューの「Team Configuration」を選択、Backlogs Backlog navigation levelsの「Epic,Features,Backlog items」全てにチェックを入れます。
<img width="900" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/b7208ec7-b557-2726-15bd-bbbfb0e56c25.png>

:::note info
Epic、Feature、Backlog itemの関係は以下の通り。長期のワークロードをEpic、数か月単位のプロジェクトをFeature、スプリントの中で達成できる項目を(Product) backlog item(以降PBI)という関係で行います。
<img width="600" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/0363f1b4-3a3b-e272-6cf0-ca449d0407d6.png>
引用：[バックログ項目の階層と関係](https://learn.microsoft.com/ja-jp/azure/devops/boards/backlogs/define-features-epics?view=azure-devops&tabs=scrum-process#tabpanel_1_scrum-process)
:::

### Backlogsの設定とアイテムの追加
左メニューからBoards>Backlogsを選択すると、Backlogsを確認できる。右上のプルダウンで表示するレベルを「Epic,Feature,PBI」を選択可能
「+New Work Item」を押下し、各アイテム(Epic、Feature、PBI、Task)を作成していく。今回は、各アイテムごとに「Goal」と「Doneの定義」を記載していく。(Taskは除く)
<img width="900" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/9e6d0487-71cb-3476-e669-ffd9fab2a468.png>

#### Epic
<img width="900" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/eed6d2f0-2e0b-4d23-a585-981841d85502.png>

#### Feature
<img width="900" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/19a7a47c-96c2-4760-eb0c-6014522c3869.png>

#### PBI
<img width="900" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/8ebf5835-1962-484d-91ac-2223aefcbc92.png>

#### Task
具体的な作業を定義するチケットの為「Remaining Work」欄に計画作業量を入れます。通常「[プランニングポーカー](https://do-scrum.com/planning-poker/)」等を利用しでチームで設定した値を設定しますが、今回は一人スクラムの為、「1 = 1時間」として値を設定します。
<img width="900" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/aab9fbac-09d0-6212-3692-c288be7d5530.png>

Backlogsに各アイテムを追加した結果が以下の通り。表示している画面は全種ベルのアイテムを表示していますが、左上にある「+ -」ボタンを押下する事で表示・非表示を調整できます。
<img width="900" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/09b1d3d7-833d-c401-ba75-4ac7e87fcd2d.png>

#### Backlogsの列表示変更
Column Optionsを選択すると、Backlogsの列に表示する項目を変更できます。
デフォルトは以下の通り
<img width="300" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/52d366ef-8072-9b41-a5f4-3f9c2fdc7cd4.png>


自分は作業量を把握する為「Remaining Work」、スプリント適応状況を把握する為「Iteration Path」、期日があるものについては意識する為「Target Date」を追加しました。
<img width="300" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/730ec35d-f930-eaff-a84e-6327d8226650.png>

結果、Backlogsの表示は以下のようになります。
期日のあるなし、タスクへの計画作業設定有無も一目で分かります。チームでする場合はここにアサイン者を追加するとアサイン有無と誰が担当なのかが一目でわかります。
<img width="900" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/f72d021b-179d-1e8b-1b79-d5f36a9304ea.png>

PBIをドロップ&ドロップで対象スプリントへ持って行くと実施スプリントが反映されます。
<img width="900" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/9897f762-2c6a-49cd-e432-acfd85d7e485.png>


### Sprit設定
左メニューのSprintsを選択すると、右上に表示されているスプリントで実施する予定のPBI一覧が表示されます
このスプリントは開始日付と終了日付が設定されていない為、「No iteration date」をクリックします。
<img width="900" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/bf0244bf-c5fb-5cb1-77f3-2948de1e2c4c.png>

開始日付と終了日付を設定する画面が表示されるので設定します。
<img width="300" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/d7e06761-e6d7-67af-a138-e3f0f1d98284.png>

Sprintの画面に戻ると期間が設定されている事が確認できます。
また、自身の処理可能容量を「Capacityタブ」から設定する事ができます。これにより、各スプリントに過度な目標設定をし達成できず、一人静かに落ち込む事から回避できます。
<img width="900" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/a02ebc43-6c42-b82b-edae-bf39e66a5fae.png>

Capacityタブをクリックすると以下画面が表示されます。各項目の意味は、Days Off：スプリント期間中の休日、Activity：作業の分類（今回不要なのでそのまま）、Capacity per day：1日当たりに対応可能な作業量を表します。
先程Taskで説明した通り、今回は「作業量 1 = 1 時間」とした為、平日の自分のフリー時間を4時間として4を設定します。
<img width="900" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/2108810f-337b-4935-580c-38b3141c3b86.png>


「Taskboard」タブを押下すると、「カンバンボード」が表示されます
Column Optionsからカンバンの列を変更可能ですが、今回はこのまま運用します。
<img width="900" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/62df2f38-8b33-4ea2-4263-68abb0a209e0.png>

### Dasjboardsの設定
作業状況を一目で把握したい時に便利なのがDashboardです。左メニューからOverviwe > Dashboardsを選択すると表示されます。
ただ初期は何もない為、自身が欲しい情報をAdd a widgetから編集していきます。
<img width="900" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/d6b7ffd9-d911-ad49-99f9-85d228f1ac04.png>

右側サイドバーに追加可能なWidgetの一覧が表示されます。今回はスプリントの進捗を把握する「Sprint Burndown」、自身のスプリントでの処理容量を把握する「Sprint Capacity」、各スプリントの傾向をつかむ「Velocity」をドラッグアンドドロップで表示する箇所に設定していきます。
完了したら「Done Editing」ボタンを押下。
<img width="900" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/fffb1e15-f329-13c4-a19b-5d3d96df96e7.png>

すると、以下のようなDashBoardができ状況が一目でわかるようになりました。
<img width="900" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/bb6c6e70-86f4-d64c-fc59-92dcd6a7b64c.png>

:::note info
他にもExtension(拡張機能)がリリースされており、DashBoardの編集モード時に右下にある「Extension Gallery」から拡張機能を追加する事が可能です。例えばTeamsと連動する等、豊富な拡張機能が揃っています。
ここから
<img width="600" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/a0f52949-5e26-f00e-3b77-c064ac648a93.png>
各種拡張機能が揃っている

:::
### レトロスペクティブ機能追加
残念ながらAzure Boardsにはデフォルトで「レトロスペクティブ」する為の機能がない。しかし、先程紹介した拡張機能でリリースされている為追加していきます。
拡張機能一覧の検索バーで「Retrospective」と入力し検索すると、「Retrospective」という拡張機能が検索結果として表示される為それを選択します。
<img width="900" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/9bec2fce-9cae-26fe-edb8-6388e12da6eb.png>

リンク：[Retrospective](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.team-retrospectives&targetId=eb374388-8c2d-44bd-93ef-af3e000b4073&utm_source=vstsproduct&utm_medium=ExtHubManageList)

「Get it free」ボタン押下
<img width="900" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/4b508db1-3388-444e-3b50-cd64312897c4.png>

対象の組織を指定して「install」ボタンを押下
<img width="900" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/5f3206c5-2ff2-5a6f-9694-92a5a8f158b1.png>

無事に完了すると以下の画面になるので、「Proceed to organization」ボタンを押下
<img width="900" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/274cae70-368a-3806-336a-01b91cb744d4.png>

#### レトロスペクティブボードの追加
改めてPJの画面へ遷移すると、Azure Boardsに「Retrospectives」メニューが追加されている事が確認できます。
実際にレトロスペクティブボードを作成する為、「Create Board」ボタンを押下します。
<img width="900" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/3205be51-ba77-ff74-0ac5-7a8c5c3e4992.png>

レトロスペクティブボードを設定する画面が表示されるので、タイトルをスプリント名に合わせて、あとはデフォルトのまま設定し「Save」ボタン押下。
<img width="900" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/fa7e98ae-4be4-1568-bde7-040d57951133.png>

以下のような画面が表示されます。よくレトロスペクティブではよくKPTという振り返り方式用いられるが、What went wellがK(Keep)、What didn't go wellがP(Problem)としてボードに書き込みできます。
T(Try)を書く為には[Act]タブを押下します。
<img width="900" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/83a2e89a-08f8-e705-b866-e64ae39ef5b6.png>

Tryは、対象のWhat went wellとWhat didn't went wellのチケットの「+ Add work item」を押下して書き込みをします。実際にアクションに繋げる為に、Backlogsで管理するアイテムとして定義できる事がこの「Retrospectives」機能の特徴となります。
<img width="900" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/898a81bf-c79c-8eae-6b57-c9e07500c82b.png>

## 実践にやってみて得た気づき
Azure Boardsでやってみて得た気付きは以下の通りです。
- Epic、Featureに目標を明文化する事で自分がやりたい事が具体的になる効果がある
- 一人スクラムを管理する為に発生する作業を増やしていくと、管理する事が目的になってしまい、モチベーションを保つのがきつくなる為、自分にとってストレスにならない範囲に調整した方が良い
- 一人と言えど、スプリントプランニングとレトロスペクティブに結構時間掛かる為、スプリントの期間は2週間のサイクルがよいかも（人それぞれ）

## おわりに
今回紹介した設定は、一人ではなくチームでも流用可能です。もしAzure Boards使ってみたかったけど、いまいち設定が分からないといった方の一助になればうれしいです。
以下のDashboardsは上記で紹介する中で設定したスプリント1の、スプリント完了2日前の状態のものです。なんとなく状態が把握できて良い感じです。
<img width="900" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2989459/252ff3e0-ab1f-326d-bf88-f32dcc5ba001.png>

## Azure Boardsを利用する際に役立った情報
[Azure Boradsの小ネタ](https://qiita.com/KoKeCross/items/c90ba00297f8ed7de679)

[チームキャパシティの設定](https://learn.microsoft.com/ja-jp/azure/devops/boards/sprints/set-capacity?view=azure-devops#set-capacity-for-the-team-and-team-members)