こんにちは、 @kz_morita です。
開発をしていると技術選定する機会がよくあります。特にデータエンジニアリングをしているといろいろな周辺ツールを触り、技術選定することが多いです。
今回は、意思決定をする際に活用している ADR と意思決定マトリクスについて書きます。
意思決定マトリクス
最終的に、技術選定を行い決定する際によく活用しているものとして意思決定マトリクス (Decision making matrix) があります。
意思決定マトリクスとは、意思決定する候補と、その評価指標を表形式にまとめて最終的にどれを採用するか決める手法です。
例えば、今日の晩ごはん、カレーにするか、ハンバーグにするか、からあげにするか、サバの味噌煮にするかという意思決定をするとします。
意思決定の評価軸として、以下のようなものを用意してみました。
- おいしいか
- つくるのが楽か
- 材料費
- 低カロリー
以下のような表にまとめます。
夕食案 | おいしいか | つくるのが楽か | 材料費 | 低カロリー | スコア |
---|---|---|---|---|---|
カレー | 5 | 4 | 2 | 2 | 13 |
ハンバーグ | 4 | 3 | 3 | 3 | 13 |
からあげ | 4 | 2 | 4 | 2 | 12 |
さばの味噌煮 | 3 | 3 | 4 | 5 | 15 |
(※ 説明用なので各指標のスコアは適当です。筆者はさばの味噌煮が好きです)
今回は 1 ~ 5 の5段階評価でつけてみました。 このスコアから上記の例では、さばの味噌煮を夕食に食べるという風に意思決定をすることができます。
上記では、評価指標をすべて同じウェイトでスコア付けしましたが、例えば美味しさ重視ということで美味しさだけ 2 倍の重みをつけるということも行っても良いと思います。
こういったマトリクスをつくると、意思決定を定量的に行うことができ便利なのでよく使用しています。
ADR
技術選定や設計など、意思決定に関わるものは ADR (Architecture Decision Record) というものにまとめています。
上記のリンクからいくつかテンプレートを参照することもできます。
ADR はシステムに関する意思決定を文書化するための手法で、意思決定とその背景、理由、代替手段、採用しなかった案、想定しうるリスクなどを記載します。
詳細は以下のリンクなどを参考にしてみてください。
- https://engineering.nifty.co.jp/blog/23151
- https://docs.wantedly.dev/fields/dev-process/adr
- https://techblog.raksul.com/entry/2024/03/20/100000
このドキュメントを残すと以下のようなメリットがあると考えます。
- 設計の意思決定からレビューができる
- 意思決定のログを残せる
- 採用しなかったけど検討した案を残せる
設計してから時間が経ったシステムについて見るときに、こっちの設計のほうが良いんじゃないか?みたいな疑問が出てくることは多々ありますが、そういった際に ADR があることで、
- 過去にその案が検討されているかどうか
- その案がどういった評価のもと棄却されたのか
といった背景を知ることができます。
こういった背景の情報は、ソースコードやアーキテクチャ図からは読み取ることがほとんどの場合できず過去どんなことがあったかという点について思いを馳せることしかできないことがよくありますが、ADR はそういった場面でも非常に役に立ちます。
前節で紹介した、意思決定マトリクスも ADR に含めておくと意思決定の指標と他の案について知ることができて便利です。
まとめ
今回は、技術選定などの意思決定と、意思決定マトリクス、ADR について書きました。
意思決定マトリクスは、定量的な意思決定の質を上げるためのツールとして。
ADR は、意思決定のログを残し、早期レビューを可能にするというメリットがあることについて紹介しました。
こういった意思決定の質を上げるための仕組みや、意思決定のログを残していくことで健全なシステム開発を行っていきたいと考えています。