考慮漏れを防ぐ考え方について
はじめに
プロジェクトを進めるうえで、ビジネス側がある程度仕様を固めてきてエンジニアとすり合わせていく場面やアーキテクチャーの設計等様々なケースで意思決定をする必要があります。
しかし、そのような場面において、「考慮漏れが今まで一回もないです」という人はいないという方は少ないのではないかと思います。
かくいう私もその一人で、考慮漏れを防ぐために何をする必要があるか言語化したいと思い、考慮漏れを限りなくなくすために必要だと思う考え方・方法についてまとめました!
MECEの思考法
前提となる思考法です。
MECE とは、「Mutually Exclusive and Collectively Exhaustive」の頭文字を取った造語です。
簡単に言うと、「漏れなく、ダブりなく」ということです。
エンジニアとしては、正常系と異常系のそれぞれのステータスコードでどのような挙動になるのかや、より抽象的なところでいうと、エンティティごとに考えうる条件や制約でどのような状態になるのかというのを網羅的に考えることで MECE な状態にしていくことがよくあるケースかなと思います。
水平思考と垂直思考
よく問題の解決の思考法である、水平思考と垂直思考がありますが、これをより実践的に行うためにどのようなポイントを重視すべきなのでしょうか?
アーキテクチャー設計において、ADR と呼ばれる意思決定を行うまでの過程を文書として残すという方法がある。
その際のフォーマットとして意思決定にとって重要な項目で、
- デシジョン(代替案とその中から1案選択する過程)
- コンテキスト
があり、それぞれ思考法が異なる。
- コンテキストは水平思考
- 様々な観点で考慮を重ね、問題の本質を理解する
- デシジョンは垂直思考
- 代替案を出し、メリデメと評価軸を明確に定めることによってロジカルに意思決定を行う
こちらの記事(アーキテクチャ設計における垂直思考と水平思考)で、それぞれ考慮すべきことが具体例を交えながら言及されています。
特に、コンテキストを深く理解するための具体的なポイントを整理することによって意思決定や代替案が変わる可能性があり、大きな影響を与える重要な項目に思います。
-
前提条件が確からしいか?
- 時間や経済的な制約による条件がある場合、前提条件をゆるくできることによる他の代替案があるかもしれない
-
前提条件が特定の条件によったものになっていないか?
- 抽象化のレイヤーを上げることによって、よりシンプルな方法で問題を解決できるかもしれない
-
視点を変えてみると、条件に足りないものがないか?
- そもそも考慮できてない項目があることによって、不確定要素が潜在的に含んでしまっていないか
- 類似の課題を参考にすることよって、考慮漏れ項目がないか、おこり得る未来の状態を考慮することによって、拡張性の高い設計となりうる
- すべての観点でもれなく考えるための方法とは
- プロジェクト全体的な観点でいうと、時間・お金・人がメインの観点?
- より詳細な部分だと、関連するエンティティを網羅する必要がありそう?
- 記事にもあるように、図で整理して可視化することで、どのような経路で意思決定を行ったのかわかりやすくなりレビューの精度が上がったりする
-
参考資料
まとめ
どの記事などにも書いてある通り、考慮漏れを無くす方法は様々ありますがゼロにすることはできません。
ゆるさる時間の限り、上記の観点で設計を行うことで可能な限り考慮漏れをなくして良い設計にしていきましょう!!
Discussion