システム開発にバグ(障害)はつきものですが、新型コロナウィルスの接触確認アプリCOCOAについて、平井卓也デジタル改革担当相が下記のように発言されました。

「不具合というのは永久になくなりませんので、この手のアプリは。今後何もない、ということはないと最初から言っておきます」

この発言を受けて、様々な批判が飛び交っているようです。

  • 不具合がなくならないなんて無責任だ
  • 不具合があるままリリースしたのか
  • 不具合があるシステムなんて怖くて使えない

どれも言いたいことはわかります。わかりますが、システム開発においては「不具合は永久になくなることはない」という平井大臣の発言は正しいと言わざるを得ません。COCOAに限らず、バグがゼロにならないと絶対に許さないという考え方をもった一部の人達によって、日本のシステム開発の現場は著しく生産性が低下していると思われます。

本日は、システム開発からバグがなくなることはない理由について、またそのような考え方を理解することがなぜ重要なのかついて書いてみたいと思います。

人間が作る以上ミスは必ず発生する

ソフトウエアは人間の手によって開発されます。人間はミスをする生き物です。ソフトウエアを人間が作る以上は、バグが混入する可能性はゼロになることはありません。

COCOAに対して「たった一つの障害も許さない」という勢いで意見を述べている人もSNSにはいます。開発の現場にも時々そういう人いますよね。そんな人々に向けてこんなツイートをしました。

これに対しても、OSと単一機能に近いCOCOAとは違う!みたいな数々のクソリプをいただきましたが、そんなことはわかっていますよ。わかっていますがたとえ話というものはわかりやすく行う必要があるから世の中全般で馴染みのあるものに例えただけなのでそこに噛みつかれても困ります。

それに例え単一機能であっても、理論的には不具合の可能性がゼロにならないことは何も変わりません。

もちろんCOCOAには色々問題があったと私も思いますし、管理体制や保守のやり方など改めなければならないこともあるでしょう。それでも平井大臣がおっしゃった「不具合は永久になくならない」という発言は真実だし、そのことを前提に進めていくのがシステム開発なのだから、不具合が永久になくならないなんて無責任だ!けしからん!とキレてみたところで全く的外れで無意味なわけです。

もし本気で不具合ゼロでないと許さない!という姿勢だと、世の中のシステムは何も使えるものがなくなってしまいますよ。不具合は永久になくならないことは残念ながら本当のことです。

システム開発は品質、コスト、納期のバランス

システム開発は品質・コスト・納期のバランスです。基本的には高品質・低コスト・短納期でお願いします!は成立しません。品質を重視すればコストが上がったり開発期間が長くなったりしますし、通常よりも短い納期を要求すれば品質が下がったりコストが上がったりします。

ではここでもう一度、不具合ゼロ以外は絶対に認めない!という人達の主張について考えてみましょう。

理論的に不具合がゼロになることがないことは既に述べました。この前提に立って考えてみると、不具合ゼロを追求し続けるということは、コストと納期が無限に膨らんでいくことを意味します。なぜなら不具合は永久にゼロにはならないからです。

これがいかにバカげたことであるかは理解できますよね?お金と時間が無限に用意できるのであれば不具合ゼロという理想をいつまでも追求することも悪くないかもしれません。しかし現実にはお金(コスト)も時間(納期)も有限です。どんなプロジェクトでも品質・コスト・納期のバランスを取りながら、どの時点を落とし所とするのかを考えてプロジェクトマネジメントしていくものです。

実際、プロジェクトの中に「たった1件のバグも絶対に許さない!」という人がいると、プロジェクトが失敗に終わる確率が高まります。特に偉い人の中にこういう非現実的な間違った幻想を振りかざす人がいると手がつけられません。

システム開発で不具合ゼロは論理的にありえないこと、プロジェクトは品質・コスト・納期のバランスであること、これらを正しく理解しておくことは、プロジェクトを適切に進行していくためには極めて重要なことです。

「完璧を目指すよりまず終わらせろ」の考え方

Facebookのマーク・ザッカーバーグさんの言葉として有名なものに「Done is better than perfect」というものがあります。

これも品質・コスト・納期のバランスを考えたものでしょう。完璧な品質を目指そうとするとコストは膨れ上がり、いつまでたってもリリースできなくなってしまいます。それよりは品質を多少は犠牲にしてでも早くリリースしてしまって運用を回した方が、品質・コスト・納期のバランスが良くなる場合があります。

COCOAの場合はスマートフォンのアプリです。もし障害が含まれていたとしても後から修正してアップデートすることが可能な環境にあります。この「後から修正できる」というのは大きなアドバンテージです。多くのアプリやWEBシステムは「後から修正できる」という特徴がありますので、最初のリリース時点でコストや納期を犠牲にして極限まで品質を高めるよりも、早くリリースすることに重点を置いた方が有利になることが多くなります。

もちろん世の中にはスマホアプリやWEBシステムのように、後から簡単に修正を行うことが難しいシステムも存在します。インターネットで修正パッチを配布するようなことが難しいシステムだと、不具合の内容によってはリコールして回収が必要になるかもしれません。このような場合だと、大きなコストと十分な開発期間を設けて高い品質を担保する必要があるでしょう。

COCOAはミッションクリティカルなシステムなのか

IT業界の専門用語として「ミッションクリティカル」という言葉があります。組織や事業にとって極めて重要であり、それが欠けると業務の遂行に致命的な影響が出るようなものを指して、ミッションクリティカルと呼ぶことがあります。

ミッションクリティカルなシステムは当然のことながら品質が最重要項目になります。十分なお金と時間をかけて極限まで品質を高めていく必要があります。少し前に東証のシステムが停止して大きな話題となりましたが、あのようなシステムはミッションクリティカルと言えます。ミッションクリティカルなシステムの場合は「Done is better than perfect」の考え方は適用できません。

ではCOCOAの場合はどうだったのか?COCOAをミッションクリティカルなシステムと考える人もいるかもしれませんが、私はこれをミッションクリティカルだとは思いません。

COCOAが停止したとして、それが日本社会に致命的な影響を与えますか?そんなことはありえないでしょう。

仮にCOCOAにバグが全くない状態で動作していたとしても、COCOAから通知が来ない=コロナ陰性とはならないわけで、感染対策は引き続き必要なはずです。「COCOAから通知来てないから自由に遊び歩いてOK」とはならないでしょう。

そもそもCOCOAのダウンロード数を見ると現時点でこのアプリをインストールしていない日本人の方がまだ多いわけで、COCOAが停止したからといって直ちに致命的な状況になることは考えられません。「COCOAはミッションクリティカルだ!バグがあるなんてけしからん!」とか言っている人の中でCOCOAインストールしていない人だっているかもしれませんよね。

以上の状況から私はCOCOAをミッションクリティカルなシステムだとは考えていません。

もちろん数ヶ月に渡って重大なバグがそのままになっていたなど、ずさんな保守体制は改めていく必要はありますが、COCOAに対して1件のバグも許さないという姿勢はナンセンスだと言わざるを得ません。COCOAは「Done is better than perfect」の考え方が適用されて良いシステムだと私は考えます。

完璧を想定したマネジメントは失敗する

システム開発においてよく言われる品質・コスト・納期の考え方や、理論上バグは0件にならないという考え方は、実はあらゆる面でのマネジメントに通じる考え方です。

最初から完璧を想定したマネジメントは必ずといって良いほど失敗します。なぜなら人間はミスをする生き物であり、ミスが一度も発生しないことの方が珍しいからです。ミスは発生するものと最初から考え、想定通りにならなかった場合に適切にコントロールしていくことがマネジメントです。

このマネジメントの原則から考えていくと「不具合は1件たりとも許さない」という完璧主義者の人達がいかにマネジメント上の害悪になるのか理解できるでしょう。

不具合が1件も発生しないようにすることは理論上ほぼありえないわけですから、不具合を1件も発生させないことに重点を置くことには意味がありません。そうではなく、品質・コスト・納期のバランスを取る中で不具合を最小に抑えつつも、不具合が発生した時に速やかかつ適切に対処できる体制を作っていくことが、まともなマネジメントを考える人がやることでしょう。

プロジェクトマネジメントで重要なことは、想定外のことを1件も発生させないことではなく、想定外なことが発生した場合でも適切に対処できる体制にしておくことです。だからシステム開発では保守が重要なのです。

不具合を絶対に0件にしろなどという完璧主義者の戯言に惑わされることなく、システム開発からバグがなくなることはないという当たり前の前提にたってマネジメントしていくことが最も重要なことです。

まともなマネジメントを考えれば当たり前のことを言われた大臣の発言に噛み付いて足を引っ張るようなことはやめていただければと思います。