なぜ開発は失敗するのか　− 失敗を減らすためにできること -

最近のニュースで、開発が遅延を重ねているプロジェクトで、さらに納入延期したうえで人員を半減するニュースがでていた。
私は、そのプロジェクトに関わっていなし、そのプロジェクトの詳細も知らない門外漢です。
他にも、重点分野として積極投資をしてきた分野で、赤字を脱却できないなどの事例には事欠かない。
それらに対して私が思うことを述べたいと思う。似たような課題を抱えているさまざまなプロジェクトに対して、ヒントになることが一つでもあれば幸いです。

### 開発の組織運営が十分には機能していないことをことを認めよう。
結果として、何度も開発の遅延が続いているという事実を受け止めよう。

遅延が生じそうなときには、その対策をとっているか。
遅延を生じている部分がたとえ一箇所であっても、それによって発生する影響は、そのプロジェクト全体の人件費やその他の固定費を含んだものになる。
だから、プロジェクトのリーダーは、遅延を減らすために開発リソースの分配を考えているはずだよね。
ある特定の人員にだけ負荷を高めてしまって、他の人は通常の作業量なんてことはないよね。

「順調にいっている報告」を過度にうれしがっていないか。そのあまりに遅延を生じそうな要因を報告できにくいってことはないか。
「きちんと裏付けのある話をしよう」とするあまりに、物事が悪化してからはじめて、上に報告がなされるなんてことになってないか。



### 開発を成功をさせるための細部のこだわりが不足していないということだ。
複雑なものほと、失敗しうる要因が増える。そのため、失敗しうる要因に対して予め手を打って考えるくせのある開発のしかたが必要になる。開発を成功させるためには、細部へのこだわりを持ち続けて、解決のために工夫をし続けることができる人に対応させることだ。
ほどほどに仕事してうまくやればいいという考え方の人だけでは、物事への見落としが生じたりする。

#### ビジネスを成功させるための必要条件に抜けはないか
ビジネスとして成功させるためには、製品の品質と価格競争力さえあれば十分なわけではない。物事がうまくいく場合と、うまく行かない場合の可能性を考えて、自分達がババを引かないように考えぬかなくてはならないのだ。ビジネスで相手と提携して話を進めているのは、そのビジネス領域のトップだろう。「だから、その判断が正しい。その判断が失敗することなんてあってはならない。だから、失敗を前提にした話などを考えてはならない。」などとするのが、忖度の中で生じてしまったりしてはいないか。ビジネスとして成功させるためには、あってほしくないことに対してどれだけ備えておくかが大切だ。

- ビジネスを成功させるための必要条件について見落としがあると、多数のやり直しを生じさせてしまう。
    - 前提としている部品の供給停止はいつが想定されているか。
    - 各国の環境規制に合致しているか。
    - その機器が使われる業界での事実上の約束事はこなしているか。
    - 電波法などの認証を取れているか。
　

- 技術的な優位の寿命は短くなっている。
    - 例：　深層学習が登場して、それ以前の画像認識技術の多くが置き換えられている。ある時点での技術的な優位は、継続的な改良をなし続けない限り、たちまち優位さを失う状態に突入している。
- 価格は、あなたが思っているよりも早く崩れていく。
- 競合の数は多い。

　でも、そういう状況の中で、ビジネスを成功させることを選んだんだ。だから、成功させるために、クレイジーなまでに意識を働かせよう。

あなたが提供する製品・サービスのユーザはどういう視点で選ぶかを考えよう。

- 価格でないところに価値をおこう。
- 技術は必要だが、技術以外のところにも強みをおこう。


### 「80点取れれば合格点だ」という発想では勝ち残れない。
いま、進めているビジネスの競争は、世界の中での勝負だ。日本国内で売ることだけを考えているとしても、世界の企業が日本の市場に入ってきているから、世界の中の競争であることは避けられない。世界の中での技術・製品・サービスの開発は、めまぐるしい勢いで競争が進んでいる。


### 複雑さが高いものは、管理を楽にするように工夫を積み重ねないと、自壊する。
ソフトウェア開発に詳しい人に聞いてみてくれ。今のソフトウェア開発で、どのようにソースコードの管理をしているのか、どのようにシフトウェアのテストを自動化しているかを。聞くべき相手は、サービスの停止が、ビジネスの失敗につながるような世界で仕事している人たちに聞くのがいい。10年前、20年前と比べて管理ツールが進歩しているということが。
　複数の部分からなるものが、きちんとうまくつながって、目的の動作をするのかということは、別にソフトウェアに限らない。部品Aと部品Bがきとんとつながるかどうかも同じだ。
　複雑性の高いものは、管理をきちんとしないと自壊する。例：　[「～単位系の取り間違いで火星探査機が行方不明～ 」](http://www.sydrose.com/case100/287/)　複雑さを管理するのは、ソースコードに限らない。ドキュメントは、最新版に常に簡単に検索できて、いつドキュメントのその箇所が変更になったのかたどれる必要がある。
### 業務の課題管理も、新しい流れがある。
さらに、マネジメントを楽にするためには、課題管理を課題管理システムの助けをかりつつ行うことだ。ソフトウェア開発の現場ではよく使われているツール類が、他の分野でも使えるものが多いのに気づいてほしい。

他の分野でなされている工夫で自分たちの分野にも使えるものがないか、貪欲に可能性を探ってほしい。

### 問題を解決できるのは人の力だ。その力を単純作業の繰り返しに使ってはいけない。
解決していくのは人の力だ。何が新しい価値を生み出すのか考え、解くべき問題は何であるのが見定め、解くための手法を選択して、問題解決をやり切る。それは人の力だ。解くべき問題を見定め、問題解決をやりきれる人はそんなにどこにでもいるわけではない。
だから、その意味でも、単純作業の繰り返しにその労力を使いすぎてはならない。
ソフトウェアの分野では、テストの自動化をすることによって、単純作業の繰り返しを減らしている。また、人手の単純作業では生じる作業ミスも、自動化デストで防げるという利点もある。
そうすることで、その分野のエキスパートの力を発揮させやすくできる。


### 繰り返し言う。他の分野でなされている工夫で自分たちの分野にも使えるものがないか、貪欲に可能性を探ってほしい。

他の分野での例を自分の課題解決のヒントに利用できない人は、何かを成し遂げるのは難しい。

新しいものも、その多くは従来のもののまねである部分が多い。



### 複雑度が高いものを成功させるための工夫の数々


複雑度が高く失敗しやすいものを、成功しやすくするための工夫は、さまざまな試みがなされている。
それらの試みの中には、あなたの担当しているビジネスでも使える工夫はあるだろう。
そういった工夫を、あなたの主観で選んでいって、あなたのビジネスを成功につなげていってください。


開発の複雑度が高まるにつれて、従来型の開発スタイルのままでは開発をコントロールできないからだ。
開発が遅延する要因に対して対策を積み重ねるという行動がうまくいっていないことを示している。
開発に失敗させうる要因の数は、開発の規模が大きくなるにつれて飛躍的に増えてしまいます。
失敗させうる要因は、物事が大きくならないうちに抑えこむことが大切。
失敗させうる要因に対して、解決するための努力をどこまで執着をもって進めることができるかにかかっている。


### なんでも解決してくれるスーパーマネジャは存在しない

複雑さが高いプロジェクトでは、すべてをマネジメントできるスーパーマネジャは存在しない。

プロジェクトを構成するメンバーによる集団的なマネジメントが必要になるのだと思う。アジャイルな開発はそのようなマネジメントなのだろう。そしてそれらを、プロジェクトメンバーで共有して推進するのを、課題管理・プロジェクト管理ツールは支えている。


### 人を大切にしよう。
開発や営業などのそれぞれの分野では、それぞれの専門性・的確な判断力・的確な感性が要求される。それを一緒になって解決してくれている人への感謝の気持ちを忘れないようにしよう。特定の人が無理をして頑張っていてくれているのに甘えないようにしよう。
その時々の状況で、うまくいかないこともあるだろう。それでも、人を大切にすることを心がけよう。


## 起こりうる失敗を想定しよう。
- [ ] 開発成果を求めている人と、開発している人とのコミュケーションがとれていなければ失敗する。

いつまでに、
何を、どれくらい実現したいのかを伝えられているか？
依頼者側も、依頼者側としての責任を果たさなくちゃならない。

- [ ] 全てを個人任せにすると失敗する。
 たいがいの場合、組織が機能しているときには、他のメンバーの手助けがあるときに仕事は成功していた。
- [ ] 全てをガチガチのチーム作業にしても失敗する。
　ガチガチのチーム作業にしても、
- [ ] 人が失われても失敗する。
　

- [ ] データが集まらなければ失敗する（機械学習）
- [ ] データの品質が低ければ失敗する
- [ ] データの多様性がなければ失敗する。
- [ ] 難易度が高すぎる定式化をしてしまえば失敗する。
- [ ]　  

## 手助けを求めよう
たいがいの問題が、自力だけで解決できることはまずない。
私が、結果をあげられた業務は、多くの人の強力のうえになりたっていた。
課題は、あなたでなくても解決できるはずのことだ。
特殊相対性理論だって、アインシュタインが最初にたどり着いただけで、
アインシュタイン以外の人も、答えにたどりつきつつある状況だった。
手助けを求めることは恥じゃない。
手助けを求めないまま、問題をこじらせてしまって、回復可能な時期を逃してしまうことの方が問題だ。
### 失敗しているのに、「最善の選択だった」とうそぶくのは終わりにしよう
- 失敗を続けている組織の場合には、失敗しているのに、それが「最善の選択だった」とうそぶく場合がある。上手くいくわけがないことを、事前に多くの人が指摘しているのにもかかわらず、それらを無視し、案の定　失敗する。
そのような組織においては、「自分たちは失敗していない」という結論を引き出すために、データを偽造し、結論を捻じ曲げる。
そのことの影響の及ぶ範囲は、その組織の中にとどまらないことがあるのが、今の日本の状況だ。

## 実現が困難なことを、簡単にできるかのようにうそぶくのはやめにしよう

「炭酸ガスと水から燃料を合成できる装置を販売しています。」
というのは、産業的に意味を持ちえない。
熱力学を考えればわかることだ。
炭酸ガスと水から燃料を合成には、燃焼で発生する以上のエネルギーを投入しなければ実現できない。エネルギー収支としてはマイナスにしかなりえない。
もし意味を持ちうるとすれば、エネルギー密度の低いエネルギーを、人が利用なエネルギーに変換できる場合だ。（人は草を食べることはできない。しかし、牧畜を通じて、乳や肉になったものを人は食べることができる。そういうのに似ている。）

規模が小さい時と、規模が大きいときでは、話が変わってくる。
太陽電池を取り付けたプラモデルの自動車を走らせることは簡単だが、
人が載る自動車を太陽電池だけで動こすことは、社会的には不可能だ。
これは、光エネルギーの密度から生じる制約で、どんなに材料技術が進んでも変わらない。


## 実現の可能性の根拠がないことを、目標に設定すると確実に失敗する。
「累積の CO2量を減少に転じさせる」なんて、熱力学・化学反応を理解している人にとっては、99.99999999% 不可能であるとしか言いようがない。
ある時間帯、ある空間でだったら可能なことでも、常にどこでもを満たすのは不可能だ。
こんな内容を、認めてしまった時点で、理科的な素養がなくなっていること、あるいは理科的な素養のある人の声を聞かなくなってしまっているんだと思う。