先日のInfoQポッドキャストで、Rookout CTOのLiran Haimovitch氏は、"分かりやすさ(understandability)"の概念について論じ、これが現代的なソフトウェアシステム開発とどのように関係するかを説明した。先日のInfoQ記事 "Understandability: The Most Important Metric You're Not Tracking"で自身が紹介した概念に基づいて、氏は、複雑性がシステムの分かりやすさに与える影響や、ライブデバッグツールのメリットなどについても話題とした。
最初にHaimovitch氏は、ソフトウェアエンジニアリングにおける分かりやすさの背景にある考え方について、その概要を示し、基本部分が財務から借用されたものであることを説明した。分かりやすさの中核にあるのは、システムはエンジニアが容易に理解可能なものであるべきだ、という概念である。システムの理解が簡単であれば、エンジニアが予測可能かつ安全な方法でそれを変更することが簡単になる。
完全で、簡潔で、明確で、組織化されていれば、システムは分かりやすいものになる。
これらすべての基準、特に完全性について語る時には、システムのすべてのコンポーネントに関する可視性と情報をエンジニアに提供する必要があります。つまり、ソースコードがあったとしても、システムの設定内容や、データベース内に存在するレコードが分からなければ、何の役にも立たないのです。
完全なシステムへのアクセスを提供することに加えて、情報は簡潔な方法で示されていなくてはならない。数百行から数千行のコードを持つシステムのメンタルモデルを構築しようとすれば、エンジニアは容易に認知的負担を経験することになる。このような情報を明確かつ組織化することによって、エンジニアのシステム理解ははるかに容易なものになる。さらに、適切なメタデータや、情報を効率的に検索および分類できる手段を提供すれば、アイデアをまとめて、システムのコンポーネントを個別に理解することが可能になる。
分かりやすさの構成要素には、静的なものと動的なものがある。設計時の分かりやすさで重視されるのは、アーキテクチャ図とコードだ。
システムの静的な性質は、基本的にはシステムがどのような動作目的で設計されたかに基づいています — つまり、ソースコードであり、アーキテクチャ図であり、データベース内のテーブルです。
動作時の分かりやすさは、データ、データフロー、サイドエフェクトが中心となる。システム内のデータ規模が分かりやすさに影響する可能性があるが、これは動的にのみ収集可能なものだ、とHaimovitch氏は指摘する。
データベーステーブルがある場合、レコード数は数百か、あるいは数百万か?システムの観点から見れば、まったく違います。そのような情報の一部は、実行時にのみ収集可能なものです。
すべてのアーキテクチャスタイルには、それぞれ、分かりやすさの上での課題がある。マイクロサービスベースのアーキテクチャを採用したとしても、求めていたメリットが必ず手に入るとは限らない。
マイクロサービスに関して言えば、この10年ほどの間に大きなムーブメントがあって、サービスはどんどん小さくなっていきました。そして現在は、大きなコンポーネントに戻りつつあるのが現実です。
アーキテクチャスタイルに関係なく、システムの複雑度、ソフトウェアの世代、チームの規模、社員の離職、コード全体の品質やアーキテクチャ的な品質といったものが、分かりやすさに強く関連する、と氏は主張する。
分かりやすさは可観測性(observability)ともつながりがある。可観測性はOPSが中心となることが多く、システムの状態を外部から理解することや、その状態が発生した理由を問い合わせ可能なことに重点が置かれている。
可観測性は財務ではなく、物理を出所とする概念ですから、[分かりやすさと比較した場合には]まったく別のものです。しかし可観測性は、システムの状態を外部から理解するものです。その意味において、システムの状態を理解しようとすれば、システムの動作を知っていることが前提になります。
OPSやSREと話をする時は通常、セールスやマーケティングの担当者と話す場合でも時には、システムの目的について、彼らはある程度知っているものです。
ポッドキャストの最後にHaimovitch氏は、分かりやすさを支援できるツーリングについて話した。その中で氏は、優れたドキュメントツールや可観測性プラットフォームの使用に加えて、Rookoutのようなライブデバッグツールが有効であることにも言及した。実行中のコードに対する動的なログの追加や、ブレークポイントの設定機能を備えたこれらのツールを使えば、運用レベルの設定で動作するシステムで起きていることについて、動的に理解を構築することが可能になる。