自動車業界ITエンジニアの生存戦略

IT化の勢いが凄まじい自動車業界でITエンジニアが生き残るために必要そうな情報をまとめます。

日本人のシステム開発における失敗の本質

こんにちは、鬼畜メガネです。

今回は"失敗の本質"という本を読んで、非常に印象に残った部分がありました。私はこの一冊を読んでそれからのプロジェクトの進め方が大きく変わりました。今回はそれについて書いていきます。

失敗の本質―日本軍の組織論的研究 (中公文庫)

失敗の本質―日本軍の組織論的研究 (中公文庫)

 

 

 

 

1. 失敗の本質概要

 第二次世界大戦時で日本軍が負けた理由を分析してあらゆることに共通する失敗の本質とは何かを考察している本です。
日本人にやりがちな失敗はコレという観点で説明してくれています。

この本では以下の表のように日本軍の失敗を米軍の行動と比較して考察しています。

f:id:kubo_r:20191107214726j:plain

表2-3 日本軍と米軍の戦略・組織特性比較(失敗の本質より)

以下に本文からの抜粋を書きます。

1.1. 目的

米国

・明確な単一目的。現地でも兵は重要な目的だけに注力できる。

日本

・二重の目的。現地で重要な選択を求められたとき判断が狂う

1.2. 戦略策定

米国

・演繹的(ある既知の一般的法則によって個別の問題を解くこと)
・理論実証主義
 ある合理的な法則に基づいて作戦をたて(グランドデザインを作成して)実行する

 

日本

・主観的で「帰納的」な戦略策定

帰納的を"経験した事実の中から一般的な法則性を見つけること"としている。
初めにグランドデザインや原理があったというよりは、現実から出発して状況ごとに場当たり的に対応し、それらの結果を積み上げていく思考法が得意であった。概念の創造とその操作化ができた者はほとんどいなかった。現場体験による積み上げの学習以外になかった 

1.3. 技術体系

米国

科学的管理法に基づく徹底した標準化が基本であり大量生産を可能とした
平均的軍人の操作が容易な体系にしていた

日本

多種多様なものを作ったが、数が少なかった。操作に名人芸を必要とした。

 

2. システム開発

2.1. 目的が明確でない開発

注力すべきできないことばかりに時間を取られる

 システム開発をした人はみんな経験があると思いますが、要件定義中にユーザーの「あれもやりたい・これもやりたい」(=別の目的)をどんどん開発対象として追加していくということを目の当たりにしたと思います。その結果、プロジェクトの肝となる本当に重要な機能に十分に力を割くことができず、認識齟齬やテスト不足による不具合や納期遅延が起きるといったことなります。。

単一責任の原則

これはプログラムが知るべき97のことの中の1つである基本的な原則です。

「変更する理由が同じものは集める、変更する理由が違うものは分ける。」良いデザインの基本原則を1つあげるとすればこれでしょう。

アンチパターンとして極端な例を出すと、たとえば、ある機能(クラス)が、製造部門・設計部門・営業部門向けの機能を持っていたとして、設計部門向けにコードを改修したいとします。コードを改修するときには影響範囲の調査は必須ですし、改修したらテストも必須です。今回の事例だと、そのクラスは製造部門や営業部門けの機能も持っているため、それらの機能にも影響が無いかどうか?という調査やテストが必須ということです。

 

詳細は以下リンクから確認してください。

単一責任原則 | プログラマが知るべき97のこと

 

2.2. グランドデザイン無きシステム

 これは私の経験ですが"概念の創造とその操作化ができた者はほとんどいなかった。""現場体験による積み上げの学習以外になかった。"は正にその通りではないかと感じます。米軍の"ある合理的な法則に基づいて作戦をたて実行する"ということがほとんど無いです。

システム概念図が書けない・存在しない

新たなプロジェクトを行うとき、現場の意見を積み上げていって最終的にシステムを作り上げるといったような感じです。その結果いろんな意見が入り混じってそのシステムがどんな概念で立ち位置のシステムをうまく説明ができません。ゴールの概念をデザインして、合理的な法則や考えに基づいて開発方針を立てるといったことが無いです。

共通モジュールが設計できない

 プログラムを幾つか開発していってから(現場体験による積み上げができてから)似たような処理があったら可能な部分を共通モジュール化メンテしていくといった現場をよく見ました。

業務の考え方・法則的に共通モジュール化すべきようなものがあれば先に定義してから開発を行うべきてすが、現場体験による積み上げができてからでないと共通性が理解できないといった人が多いと感じます。

 

2.3. 多種多様で名人芸が必要な設計

私の印象は以下の感じです。

日本人の良くある失敗
 個別最適に各機能で100点を取ろうとして、全体として機能に規則性が無く開発工数やテストの工数も増加してプロジェクとして60点となる。

目指す姿
 標準化して各機能は70点だが、類似機能は量産して安定した品質を保証できるのでプロジェクトとして100点を取る。

 

 3. 関連

以下動画ではまこなり社長が目的の部分についてピックアップして解説しています。


【もしかしたらあなたも!?】日本人なら誰もがやりがちな「失敗」のパターン(「超」入門 失敗の本質)

 

 

4. 最後に

日本軍と米軍の比較から、システム開発に関する日本人の失敗について書きました。
個人的な考えですが、日本人のITが遅れているというのは、こういった失敗の本質もあるのではないでしょうか。

 

以上、ありがとうございました。

「超」入門 失敗の本質 日本軍と現代日本に共通する23の組織的ジレンマ

「超」入門 失敗の本質 日本軍と現代日本に共通する23の組織的ジレンマ