アジャイルな開発の論理構造（スクラム版）


この記事は [:christmas_tree:オープンストリーム Advent Calendar 2018:christmas_tree:](https://qiita.com/advent-calendar/2018/opst) の20日目の記事です。
-----
アジャイルな開発（スクラムをベース）で「**<font color="Red">NOT NO PLAN</font>**」と「**<font color="Red">NOT BAD QUALITY</font>**」目指し開発を行っております。その柱となっている内容を紹介させて頂きます。
## 目次
1. [全体の概念モデル](https://qiita.com/maemori/items/0d171bda34332d200114#%EF%BC%91%E5%85%A8%E4%BD%93%E3%81%AE%E6%A6%82%E5%BF%B5%E3%83%A2%E3%83%87%E3%83%AB) ・・・**プロセスの構造**
2. [計画の構造](https://qiita.com/maemori/items/0d171bda34332d200114#%EF%BC%92%E8%A8%88%E7%94%BB%E3%81%AE%E6%A7%8B%E9%80%A0)・・・ **３つの段階的な計画**
3. [レトロスペクティブの構造](https://qiita.com/maemori/items/0d171bda34332d200114#%EF%BC%93%E3%83%AC%E3%83%88%E3%83%AD%E3%82%B9%E3%83%9A%E3%82%AF%E3%83%86%E3%82%A3%E3%83%96%E6%8C%AF%E8%BF%94%E3%82%8A%E3%81%AE%E6%A7%8B%E9%80%A0)・・・ **３つの階層で振返り**
4. [プロダクトバックログアイテムの構造](https://qiita.com/maemori/items/0d171bda34332d200114#%EF%BC%94%E3%83%97%E3%83%AD%E3%83%80%E3%82%AF%E3%83%88%E3%83%90%E3%83%83%E3%82%AF%E3%83%AD%E3%82%B0%E3%82%A2%E3%82%A4%E3%83%86%E3%83%A0%E3%83%95%E3%82%A3%E3%83%BC%E3%83%81%E3%83%A3%E3%81%AE%E6%A7%8B%E9%80%A0)・・・主要素である**フィーチャの階層構造**
5. [おまけ](https://qiita.com/maemori/items/0d171bda34332d200114#%EF%BC%95%E3%81%8A%E3%81%BE%E3%81%91)・・・インセプションデッキとスプリントバックログ管理台帳のテンプレート＆サンプルのダウンロード

## １．全体の概念モデル
この構造を踏まえて、プロジェクト全体の計画、開発チームの構成（チーム数やメンバー数）、開発のイテレーション計画、開発が完了したプロダクトバックログの妥当性確認を実施します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/73580/63d3bf42-0472-f5bf-ef22-36a5ed724d75.png)

* プロダクトバックログ：プロダクトバックログアイテムの集合、優先度順に並べられている。
* プロダクトバックログアイテム：フィーチャ（ユーザにとってソフトウェアの価値を表現したもの、機能/特徴/性能/見た目/非機能要件など動くソフトウェアとして実現するもの）、見積り、優先順位で構成される

### ●計画（詳細は「２．計画の構造」を参照）
* リリース計画：プロダクトバックログ全体の計画、リリースバーンダウンチャートで可視化を行う（どのプロダクトバックログアイテムがいつのイテレーションでリリース可能になるか管理を行う）
* イテレーション計画：優先順位が高く開発可能なプロダクトバックロッグアイテムを完成させるための作業（タスク）計画。見積りは理想時間で行う。イテレーションバーンダウンチャートで可視化を行う

### ●プロダクトバックログアイテムは下の３つを達成しないと完成とならない
* **【具現化】⇒ フィーチャ**：ユーザにとって価値のあるソフトウェア機能、ユーザーストーリー形式で定義する。開発のイテレーションではそのフィーチャを動くソフトウェアとして構築する
* **【クリア】⇒ 受入れ条件**：フィーチャが動くソフトウェアとして構築された場合、その妥当性を確認するためめ条件（例：受け入れテスト仕様書、結合テスト仕様書など）
* **【網羅】⇒ 完成の定義**：成果物の特性に合わせ、その成果物が完成するために実施しなければ行けない事柄。動くソフトウェアであれば、「設計/設計レビュー/実装/単体テスト/ソースコードレビュー/**テスト環境で受入れ条件を試験し問題が無いこと**」など

## ２．計画の構造
各計画は上の層から下の層へブレークダウンし、１計画単位が完了した場合は下の層から上の層へ結果がフィードバックされる。フィードバックされた層の計画はその内容を受けて計画自身を改善する。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/73580/cff00e81-f132-cc6a-51bf-2d12ef67066e.png)

### ●リリース計画
プロダクトバックログアイテムがいつのイテレーションでリリース可能となるかを計画したもの。
予定と実績の可視化はリリースバーンダウンチャートを使用する。
全体の期間は「規模（総ストーリーポイント）÷ ベロシティ ＝ 期間（イテレーション数）」で算出する。

### ●イテレーション計画（スプリントプランニング）
目標ベロシティの範囲内で優先度の高いプロダクトバックログアイテム選択し、それらを完成させるための計画（タスク）を作成する。（ベロシティ駆動イテレーションプランニング）
予定と実績の可視化はイテレーションバーンダウンチャートを使用する。

### ●日計画（ディリースクラム）
チームは毎日決まった時間に集まり、昨日の実績、今日の作業、課題を共有する（所要時間の目安は15分）

## ３．レトロスペクティブ（振返り）の構造
レトロスペクティブによる改善は、組織・サービス・開発の層でそれぞれの要因を分析し、改善を行うための手段を見出します。見出された手段は次の計画に反映。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/73580/f8652681-865a-7b28-78de-530cbf0fdaf4.png)

### ●プロジェクトレトロスペクティブ
* 目的：プロジェクトの完了時にプロジェクト全体を対象として振り返りを行い、組織の改善につなげる
* 参加者：プロジェクトに関わったステークホルダー

### ●リリースレトロスペクティブ
* 目的：リリース可能となったプロダクトバックログアイテムに対して分析を行い、より良い価値のあるソフトウェアを早く継続的に提供するための改善を見出す（結果のフィードバック⇒リリース計画/プロダクトバックログアイテム）
* 参加者：プロダクトをリリースするために関わるステークホルダー

### ●イテレーションレトロスペクティブ
* 目的：実施したイテレーションに対して分析を行い、次のイテレーションのプロセス改善を見出す（結果のフィードバック⇒イテレーション計画）
* 参加者：開発チームが主体

## ４．プロダクトバックログアイテム（フィーチャ）の構造
プロダクトバックログアイテム構造は、そのフィーチャの構造である。フィーチャーの定義は**ユーザーストーリー**の形式を用いて定義。結果、プロダクトバックログアイテムは下の階層構造となる。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/73580/1407135d-5aa9-7d16-8793-3fa564667132.png)

### ●エピック（テーマ）：ユーザーストーリーを束ねる概念
プロダクトバックログアイテム最小構成のユーザーストーリーを束ねる概念。ユーザーストーリーとして詳細化出来ない場合はエピックとしてユーザーストーリーなしの状態で扱う。
作るべきものが明確にりユーザーストーリーが定義出来た場合テーマとして扱う。

#### 例）
> ＜ユーザー＞として
> ＜商品を出品＞したい
> なぜなら＜不用品を売って儲けたい＞からだ

### ●ユーザーストーリー
ユーザーがソフトウェアで実現したいフィーチャを簡潔に書いたもの
スケジュール可能なユニットで、エンド・ツー・エンド（UIからバックエンド）な機能として提供されるもの

#### 例）
> ＜ユーザー＞として
> ＜届け先を選択したい＞したい
> なぜなら＜届けたい場所が変わる＞からだ

## ５．おまけ


* [インセプションデッキ（サンプル/テンプレート）のダウンロード](https://github.com/maemori/scrum_template/raw/master/doc/%E3%82%A4%E3%83%B3%E3%82%BB%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%87%E3%83%83%E3%82%AD_%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88.pptx) (PowerPoint)
* [スプリントバックログ管理台帳（サンプル/テンプレート）のダウンロード](https://github.com/maemori/scrum_template/raw/master/doc/X-Sprint-SBI_%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88.xlsx) (Excel) 
  ・・・チームのキャパシティ算出、残キャパシティの範囲内でプロダクトバックログからスプリントプランニングを定義、追加タスク対応、バーンダウンチャートの自動生成と更新（色々なサービスを使って管理してきましたが、今は壁に貼った紙が正でこの台帳を使って管理しています）

-----
明日は @nami_t さんです！