技術とか戦略とか

SIerで証券レガシーシステムを8年いじってからSESに転職した業務系エンジニアによる技術ブログ。

ディベートから学ぶ案の検討の方法

仕事をする上では、システムの計画や設計等で案を検討することがあります。
検討する際に、ディベートの考え方を用いると、肯定・否定に偏ることなく案を検討しやすくなります。
 
この記事では、案を検討する上で参考になるディベートの考え方を簡単に説明したいと思います。
 
----
 
1.案の具体化
案を検討する上では、案を具体化する必要があります。
(具体化しないまま議論を進めても、案のメリットもデメリットも不明確になります)
 
例えば
「あるJavaの保守開発の現場で、コーディング規約を新たに導入するべきである」
というテーマがあるとします。
 
このテーマを具体的な案にすると、以下のようになります。
・「オブジェクト倶楽部Javaコーディング標準」をコーディング規約として導入する
・コーディング規約をドキュメントとして開発者へ広める
・レビューの際にはコーディング規約通りかどうかを確認する
 
2.案のメリット・デメリットの組み立て
案には、導入することによるメリットとデメリットがあります。
具体的な案が決まったら、メリットとデメリットを組み立てる必要があります。
 
メリットとデメリットは、以下の要素が含まれる主張を掛け合わせることで、
組み立てることができます。
 
■メリット
・内因性 …案を導入していない現状で問題が発生しているという主張
・解決性 …案を導入することで問題が解決するという主張
・重要性 …問題を解決することは重要であるという主張
 
■デメリット
・固有性 …案を導入していない現状では問題がないという主張
・発生過程…案を導入することで新たに問題が出るという主張
・深刻性 …新たに発生する問題が重大であるという主張
 
コーディング規約の例で考えると、以下のような主張が考えられます。
 
■メリット
・内因性 …ソースファイル毎でソースの書き方がバラバラである
・解決性 …コーディング規約により、今後改修されるソースは書き方が統一される
・重要性 …ソースの書き方が統一されれば可読性が高まり不具合が減る
 
■デメリット
・固有性 …現状では1つ1つのソースファイル内では書き方が統一されている
・発生過程…改修時に規約に従うと、ソースファイル内で書き方が不統一になり得る
・深刻性 …ソースファイル内で書き方が不統一になることで逆に可読性が低下する
 
3.主張を支えるための根拠
主張を組み立てることでメリット・デメリットを構成できますが、
その主張自体が正しいかどうかを示す必要はあります。
それを示すものが、根拠です。
 
根拠としては、書籍や記事、調査結果といったものが考えられます。
 
例えば
「現状では1つ1つのソースファイル内では書き方が統一されている」
と主張したい場合は、
色々な機能からソースファイルをピックアップし、調査し、例示すると良いでしょう。
 
4.メリットとデメリットを比較するための価値基準
メリット・デメリットを組み立て、主張が疑わしくない(根拠がしっかりしている)、
ということが確認できたら、次はメリットとデメリットを比較する必要があります。
メリットの方が大きければその案は採用するべき、
デメリットの方が大きければその案は採用するべきではない、
となります。
 
メリットとデメリットの大きさの比較は主観に頼らざるを得ない場合が多く、
判断が難しいです。
そこで重要になるのが、「価値基準」です。
議論の対象となっている組織で何を大切にしているのかを明確にすることで、
メリットとデメリットの比較が容易になります。
 
例えば、前述のコーディング規約の例の場合、
長期的に見た場合のコードの可読性を重視するのか、
近視眼的に見た場合のコードの可読性を重視するのかで、
判断が変わってきます。
自組織が前者の場合はメリット、後者の場合はデメリットの方を重視するべきでしょう。
 
5.返しの案と代替案
デメリットが発生しないようにするための返しの案を併用することで、
デメリットが発生しなくなり、案を採用する方向に持って行ける場合があります。
逆に、メリットのみが発生するような代替案を用意することで、
代替案が一番良いという結論に持って行ける場合があります。
より議論を深めるのであれば、返しの案や代替案も考えた方が望ましいです。
 
例えば、前述のコーディング規約の場合
・ソースファイル内の書き方の統一性が失われる場合は規約を適用しなくて良いとする
という返しの案を併用することで、デメリットの発生を防ぐ効果を期待できます。
 
また、代替案として
・色々なソースの書き方について教育し、色々な書き方に慣れてもらう
という案を採用することで、
デメリットがある元々の案を採用しなくても良いという結論になるかもしれません。
 
----
 
このように考えて案を検討するのは面倒かもしれません。
実際の仕事では、論理的に案を検討するよりも、スピード感を持って判断する方が重要かもしれません。
 
しかし、誤った判断をしないために、論理的に考える場合はこうなる、というのは知っておいて損はないと思います。
特に、メリットとデメリットの両方を検討する、という視点は重要になるでしょう。