「IT業界の病理学」という書籍から、IT業界のあるある話を厳選して、その対処法などを解説していきます。
「IT業界の病理学」から問題を厳選して、その問題から解決策と私のこれまでの経験を交えました。
現在、IT業界で仕事に悩んでいる方やこれからIT業界で働きたいと思っている方はぜひ参考にしてみてください。
- IT業界の仕事で悩んでいる方
- これからIT業界で働きたい
- IT業界のあるあるが知りたい
開発編
まずは開発における問題です。
開発現場では時に混乱を招くようなことが起こります。
これは様々な要因が関係してくるのです。
開発編では下記3つを取り上げます。
- 仕様が決めれないユーザ
- なんちゃってアジャイル開発
- 絶対にされないソースコード
仕様が決めれないユーザ
参考:IT業界の病理学 P10 司馬著
ユーザに仕様を決めるように言っても、なかなか仕様を決めてくれない。
仕様を決めることの重要性をユーザは認識していないのが原因
ユーザ目線でベンダーが仕様書を作成する。
または、ベンダーがユーザのシステム部に常駐すること。
責任を取りたくないユーザには、仕様書を何人かで作成してもらう。
仕様を確定する重要性をユーザに認識してもらうこと。
「仕様確定日」を明記したり、現場のキーマンに打合せに参加してもらう。
仕様がなかなか決まらないと、納期が遅れたり開発に着手できなかったりと、様々な問題が起こります。
開発現場にとっては大問題ですね。
上記にもあるように、まずはユーザの状態(誰が責任者で決定権があるのか)を把握する必要がありそうです。
責任者にも要件定義の打合せに参加してもらって、仕様を決めていく必要があります。
予防法でも記載した通り、「仕様確定日」を明確にユーザに展開してしっかりと問題に向き合ってもらうことがよいでしょう。
なんちゃってアジャイル開発
参考:IT業界の病理学 P32 司馬著
- A型→反復ウォーターフォール
→単なる反復開発を「アジャイル開発」と定義する - B型→無文章開発
→対話を大事にしてドキュメントを作成しない - B型改→無設計開発
→設計をなくしてヒアリングした要件をそのまま実装
経営層は時代の流れに対応するために、ひとまずアジャイルを導入しろと指示する。
アジャイルについての理解が乏しいため、上記のような症状を引き起こす。
- モディファイ法
→ある程度プロセスやプラクティスが明確に定義されている場合かつ、A型の症状に有効。少しずつプロセスを是正していく。 - リセット療法
→すべてをリセットする。
開発メンバーやプロマネも入れ替えて最初から行う。
現場にショックを与え、コストと時間がかかる。 - アドオン療法
→とりあえず開発を完了させて、そのあとで必要なドキュメントを補完する。
アジャイル開発を適用しても良いのかを考えることが必要。
ユーザは協力的なのか。アジャイル開発の知識や経験があるかなど。
アジャイル開発については、私は経験したことがないので明確には語れません。
ですが、アジャイル開発を行う上で大切なことがあるのは知っています。
それは顧客との対話です。
アジャイル開発では米国を中心に流行り、最近の日本でもアジャイル開発を取り入れる企業が増えました。
ですがアジャイル開発がよくて、ウォーターフォールモデルが悪いというわけではありません。
一長一短で、それぞれあったモデルを選択する必要があります。
例えば、システム開発に協力的なユーザならアジャイル開発があっているでしょう。
反対にユーザがあまりシステムについてわからないことが多い場合、または打合せに積極的ではない場合はウォーターフォールモデルの方が良いと思います。
アジャイル開発を導入するなら、まずはアジャイル開発について学ぶことが重要です。
さらにユーザにもアジャイル開発を導入していることを伝えて、短いサイクルで開発を繰り返すことを説明する方がよいでしょう。
絶対にされないソースコード
参考:IT業界の病理学 P41 森著
- 1000行を超える関数が存在
- コメントが少ない
- システム全体を把握する技術者がいない
- コピペが多い
時間がないためにソースコードを良くするリファクタリングなどを行う余裕がない場合にこのようなことになる。
現行のシステムを把握してテストを行う。
そしてリファクタリングの心理的障壁を下げること。
モジュール結合度を下げるのも対策の一つと言える。
開発中にソースコードの実態を把握すること。
コメントが入っているか。
コピペして同じ処理を記載していないかを確認します。
すでに現場で動いているシステムのソースコードを触るのは勇気がいります。
私が携わったプロジェクトで、ユーザからの要望が多くその都度対応していたら、スパゲッティコードになってしまいました。
要望が多く重なると、他が動かなくなることを恐れて、共通化することをためらったり、動いているものを止めたくないという心理から、プログラムを書いた人しか読めない状態になってしまうのです。
このような場合、リファクタリングをしようにもできない状態のため、そのまま放置しがちとなります。
これらを解決するには、開発時から汎用性の高いプログラムを組むことです。
コメントを書くことはもちろんのこと、関数同士を疎結合とすることで、それぞれの処理が依存しないように作ります。
ユーザからの要望の対応方法として、関数を追加するだけで対応できるようになれば、要望が多くても関数が増えるだけで、他のところに影響は及ばない。
レビュー・テスト編
参考:IT業界の病理学 P60 都築著
腐敗したテスト仕様書
機能追加を繰り返して派生開発が広がったために、テスト仕様書の改善もできないままテスト仕様書が腐敗していく。
ベテランのテスターにテスト仕様書をチェックさせ、気になるところをメモしてもらう。
レビューやテストの工数をあらかじめ確保するように経営層に理解してもらう。
単体テストや結合テストを終えて、いざ導入となった時、不具合が出てもテスト仕様書まで遡って修正することはあまりないかと思います。
ましてエビデンスまで取り直すということもなく、不具合を修正するだけで手一杯です。
プロジェクトにおいて、開発には工数をかけるもテストにはそこまでの工数を割けないというリーダーもいます。
ですがテスト工程は非常に重要で、導入後の不具合をゼロにすることはできませんが、多少なりとも減らすことはできるでしょう。
必要のないテストを行うのは無駄ですが、ありとあらゆるケースのテストを行うことはとても重要なことです。
私がおすすめするのは、ユーザ目線になってテスト行うこと。
できれば、出荷前のテストをリーダーなり開発者以外が行うことをおすすめします。
きっちりとしたテストではなく、ユーザが行うであろう動作を確認するための最終チェックです。
開発者が行うと、どうしても開発者側の都合のいい風に動かしてしまいます。
それを避けるためにも、開発者以外がテストや動作確認を行うのがよいでしょう。
絶対に見ないエビデンス
参考:IT業界の病理学 P63 森著
テスト時にExcelなどに画面キャプチャを貼り付けて保存する。
それらは障害時に利用されることがなく、エビデンスをとっても放置される運命にある。
障害発生時の原因特定にも利用されない。
エビデンスを見やすい形に改変する。
どのような環境でどのようなテストを行うのかを明確に記せば、障害の原因究明にも役立ちます。
自動テストなどを取り入れて実行結果のログなどを取得しておく。
テスト後にエビデンスを確認しますか?
私はあまり確認しません。
不具合が起きても、その不具合を特定するためにプログラムを動かします。
エビデンスまで遡ることは滅多にしないです。
この原因はエビデンスに取り方にあると思います。
エビデンスをきれいに、テストの流れを詳細に記載していれば後から確認しやすいです。
そのためには、エビデンスのテンプレートやエビデンスをとる手順を見直しましょう。
テンプレート一つ見直すだけで、かなりエビデンスを改善することができます。
そうすることで、不具合が発生してもエビデンスを確認してすぐに原因を突き止めることができるでしょう。
テストケース肥大病
参考:IT業界の病理学 P72 鈴木昭著
テストケースが多いほど、テスト対象の品質を確保できる
上記のような考えから、とにかく多くのテストケースを作成しがち。
一体何のためのテストなのかもわからないようなものまで存在する。
組織ルールで決められた指標に達していないため、とにかくテストケースを増やせと上から言われてしまう。
そのテストを実行しないと、だれが、どういったことで困りますか?
上記のようにマネージャに問い合わせましょう。
不要なものは上に意見をすることも重要です。
どのようなバグを検出したいテストケースであるかを明確にすると、自ずとテストケースが必要なものだけになります。
テストケースを最大いくつ作成しないといけないなどの決まりがあると、このような問題が発生します。
テストケースのノルマを達成するために、必要のない同じようなテストケースを作成してしまう。
結果的に工数が無駄になり、テスターも何を目的にテストをしたらよいのかが見えない。
これらを解決するには、テストケースの最低限のノルマを決めない、またはバグ検出率に焦点を当ててテストを行うことです。
どれだけバグを検出できるでテストの品質が決まってくるので、テストケースを増やすのではなくバグを検出できるテストを想定しましょう。
保守・運用編
「運用でカバー」依存症
参考:IT業界の病理学 P89 司馬著
新規システムの導入で、テスト終了時に設計漏れがあった場合。
さらに、納期までその修正が間に合わない。
このような場合に、運用側とベンダー側で、「運用でカバーしましょう」となることがある。
次の開発で運用でカバーしているところをシステムに盛り込む方法があります。
運用の作業を明確化して、作業内容を文章に落とし込みことで、漏れをなくすことができます。
「運用でカバー」はまさに魔法の言葉で、開発側もユーザ側もよく使ってしまいがちな切り札です。
要件定義で漏れてしまうものが、この運用でカバーとなってしまいます。
まず第一として、要件定義でユーザの運用を把握すること。
システム化するところと、従来通り手作業で行うところを明確にする必要があります。
導入後に、一部が「運用でカバー」となってしまった場合は次のシステム改修か保守で対応を行うのがよいでしょう。
マネジメント編
プログラマのモチベーションが一番大事病
参考:IT業界の病理学 P124 司馬著
プロジェクトは赤字になったがプログラマのモチベーションが上がったから良しとする。
上記のように、会社は赤字だがプロジェクトとしては大成功となってしまう不思議な状況が産まれる。
QCD(品質、コスト、納期)の達成こそがプロジェクトの成功だとプログラマに理解してもらうことが重要。
達成することに喜びを感じてもらえればプロジェクトも成功する。
「プロジェクトの成功」の定義を正しく理解することが予防法となる。
プロジェクトとは品質、コスト、納期でチェックするものだということを理解してもらう。
プログラマのモチベーションは確かに大事です。
プログラマに限らず、モチベーションが低いとシステムの品質が落ちてしまいます。
なのでいかにプロジェクトメンバーのモチベーションを下げないようにするかが、リーダーやプロマネの仕事です。
人間関係なので、人それぞれモチベーションの上がる要因が違うと思いますが、密にコミュニケーションをとることでモチベーションを上げることが少なからず可能でしょう。
永遠の進捗90%
参考:IT業界の病理学 P135 司馬著
プロマネが担当者に進捗を聞くと、「進捗は90%です。問題ありません」という回答が来る。
その翌週にも同じことを聞くと、またしても「進捗は90%。問題なし」という回答。
進捗が90%から動かないということは、
- 作業を行っていない
- 何かしらの問題が起きている
のどちらかということ。
これには人員を補充したりの対策が必要となる。
進捗が停滞している場合には、その作業を阻害させる原因をプロマネが突き止める必要がある。
主に下記のようなアクションを取る必要があるでしょう。
- 残業で遅れを取り戻す
- 作業自体を減らす
※ユーザとの調整が必要 - 作業を組み替える
※スケジュールを修正 - 他の作業と並行する
※スケジュールを修正 - 要員の追加や変更
※リソース管理に影響
進捗率の定義をし直す。
WBSなどを利用して「見える化」によって進捗遅れを把握することが重要。
メンバーに進捗率を聞いても、いつも同じ進捗率が返ってくることがありますか?
ずっと進捗率が90%から動かない場合、何かしらの問題が発生しています。
プロマネはその問題を突きとめなければなりません。
しかし、メンバーに聞いても反射的に隠されてしまう場合がありますので、できるだけ正直に話しやすいようにしましょう。
何かプロジェクトに大きな影響を及ぼす可能性のある問題が隠れているかもしれません。
業界の病気編
勉強会は業務ですか?
参考:IT業界の病理学 P148 秋山著
セミナーや勉強会を社内で開催したり、社外のものに持ち回りで参加することになると、最初は物珍しさから集まりもいいが、そのうち「それって業務ですか?」という声が上がる。
業務遂行に必要な知識を棚卸しして不足しているスキルを明確にする。
そうすると、学習意欲も湧いて勉強会へもモチベーション高く参加できる。
マネージャーは定期的に外部のセミナーに参加して、他社の人との交流を持つ。
現在の教育状況を知り、社員たちの未来のために学習の場を与えること。
会社が外部のセミナーなどを積極的に取り入れて行うと、社員からは「これは給料でますか?」という質問が出ることがある。
仕事は忙しい時はなおさらです。
では、このような問題にはどうしたらよいか。
セミナーを強制するのではなく、自由参加にすることです。
仕事が繫忙期の時は、誰だって他のことはしたくないはず。
そこで会社からセミナーなどをするように言われると、社員としてはやる気を失ってしまいます。
学生のキャリアアンマッチ病
参考:IT業界の病理学 P166 司馬著
情報系の学部を卒業して、入社後に与えられた仕事とのギャップに退職してしまう人が多い。
企業側は会社説明で情報系の学生に「即戦力だ」、「素晴らしい」と褒め称えるが、実際には仕事と大学で学ぶカリキュラムとは大きな隔たりがある。
学生側もIT系の仕事について無知な部分が多く、ギャップを感じてしまう。
退職や転職が1つの治療法となる。
お互いが不幸な出会いだったと割り切ることも必要。
「自分の手で新しいシステムを作りたい」という学生には1からシステムを構築する企業を目指すのがよいでしょう。
大抵のメーカーやベンダーは自社製品を使用しています。
また、企業側は新人教育の際にIT業務について詳しく話すのがよいでしょう。
配属される前に、新人にしっかり教育することが重要です。
企業説明会ではありのままを伝える方がよいでしょう。
良質な学生を採用したいがばかりに、誇張して業務内容を話してしまうと、結局は双方によってよくない結果となります。
採用するにしてもお金がかかりますし、入社した新入社員のモチベーションが低いと、余計にコストがかかってしまう。
さらに新入社員にとっては時間の無駄だと感じてしまうかもしれません。
お互いがプラスになるように、企業側はありのままの姿を見せることが必要です。
まとめ
本記事ではIT業界の病理学を元に、私の意見を述べました。
IT業界では、本記事で挙げた以外の問題も山積みで、困っている人も多いでしょう。
本記事によって、少しでも解決の糸口になればと思います。
関連記事

参考文献
- IT業界の病理学
-
司馬弘太郎/秋山浩一/森龍二/
鈴木壮吾/都築将夫/堀明広/
佐々木誠/鈴木準一著技術評論社
コメント