はじめに
非機能要件は品質が見えにくいという困難を抱えています。
特に、実際に対応にあたっている当事者と、外部からそれを見ている人間の間では相当な認識の違いが発生します。
その結果、全員がプロジェクトの成功、プロダクトの成功を目指しているにも関わらず、不幸にも味方同士で対立が起きやすいのです。
この記事では、対立を避け、全員が一丸となってソフトウェア開発に取り組めるような技術を紹介します。
いいね、ストックをよろしくお願いします!
チーム全体が非機能要件の改善に取り組む
当事者でないと言語化しにくい要件でコミュニケーションを取りたいならば、当事者になるのが最上の方法です。いくつかの有名な手法やフレームワークでも、当事者を増やすことの重要性が述べられています。
- シフトレフト:簡単に言えば「さっさとテストをしよう」ということです。QA組織に任せるのではなく、エンジニアが信頼性の当事者になるべきです
- DevOps:「コラボレーション」が重要な原則です。作った製品を運用チームに一方的に投げるのではなく、対話を通じて相手を知り、お互いの仕事の意味を確信するべきという内容です
- スクラム:「透明性」「検査」「適応」という3本柱が掲げられています。非機能要件のコミュニケーションの文脈では、「透明性」がまさにこれでしょう。チーム全体がどの方向に向かっているのかを明確に共有することが重要です
- プロセスやツールよりも個人と対話:分かりやすく言えば「分業も機械化も無理!何でも知ってる賢い人間が集まらないとどうしようもない!」ということです
全部やろう、当事者になろう
非機能要件は複雑で、全てが相互作用する。非機能要件を理解したいなら、システムに関連するすべてを全力で学び、多くのイベントに参加するべきである。
諦めずに対話する
全員が当事者になるべきとはいえ、開発者がシステム知識のない人間と話す場合など、互いの理解が不足した状態で対話しないといけないことはあります。このような場合の対処は困難です。
以下は月並みなアドバイスですが、このような基礎的なコミュニケーションを積み重ねていくことでしか解決できません。
丁寧な対話
- 「相手は自分の知らない理屈を知っているかも…?」と常に意識する
- 基本的に相手は専門外なだけでバカではない。丁寧に説明すればある程度は理解してもらえる
- 日頃から信頼を貯金しておく
「プロダクトマネージャーのしごと」には、互いの考え方を深く理解することで対立を排除するテクニックについて分かりやすく書かれています。プロダクトマネージャーは、複数の要件の担当者とコミュニケーションを取り、プロダクトに真に必要なものを判断する仕事なので、非機能要件という分かりにくい分野でもコミュニケーションする技術が求められます。
目標を利用してコミュニケーションを取る
非機能要件を見えやすくすることでコミュニケーションを容易にする手法です。
例えば、信頼性の分野では、目標をクリアしている限りは好きに機能追加を行い、目標を満たさない場合には保守運用チームの指示に従ってリリースを制限するという考え方があります。エラーバジェットは、この考え方をさらに発展させて、継続的なエラーの測定状態と目標から、機能追加と安定性向上の意思決定を行うための手法です。
「SLO サービスレベル目標」には、この考え方について分かりやすく書かれています。本書の前半は技術的な測定(ユーザー目線の測定)や集計方法について書かれていますが、後半以降は、SLOを利用した信頼性分野での意思決定手法について詳しく述べられています。
目標を使ったコミュニケーション
非機能要件の良さをできるだけ精度よく可視化することで、お互いが取り組んでいることの価値を周囲と共有して、ハレーションを避けることができる
ただし、これは「非機能要件が明確に数値化できる」という無理な仮定に基づいています。当事者からすると信頼できない数値でも、外部からすればその目標以外に非機能要件の品質を知る術がないため、誤った理解と、それに基づく誤った決定を引き起こす可能性があります。
例えば、保守性を表す目標として関数の複雑度を導入したときに、大量の商品コードごとに1行ずつ違う処理を実行する簡単なロジックを追加すれば、実体以上に複雑になったように見えます。
また、UXやユーザー価値といった非機能要件は数値化が特に困難です。
目標は不完全
非機能要件は、どれだけコストをかけたとしても明確に品質を表しにくい。
- コストをかけてなるべく最善の目標を得ること
- 当事者以外は目標の値はあくまで参考程度であることを理解し、当事者の意見に耳を傾けること
- 取り組んでいる人間の感覚がもっとも正確なので、上意下達は失敗する
おわりに
コミュニケーション上の課題は、最終的には「人間力」に依存します。いくつかのテクニックは開発されていますが、完全な自動化は困難です。
最も重要なのは、あきらめない、悪者を作らない、信頼を大切にする、などの基礎的な事項です。
