カテゴリー別アーカイブ: プロジェクトマネージメント

プロジェクトマネージメントに関するカテゴリーです

解:バグを隠しているのではないか

虚偽報告をされてしまったら「運が悪かった!」のでしょうか?

違います。これも発見できます。
昔の話で今ほど業界は経験を積んでいなかった時代であり、報告内容などが性善説に立ったものだったのです。まず、進捗が可もなく不可もなく理想通りに進んでいる段階で怪しいです。人が動いて作っているものですからそんな馬鹿なはずがないのです。必ず苦労したり失敗したり、残業がかさんだり進んだり遅れたりするのです。

  • 課題管理
  • 品質管理
  • モジュール単位進捗管理
  • WBSに基づく進捗管理
  • 工程完了審査
  • 抜き取りの現物確認
  • 中間検査

今であればこれらのことをすることでこのような事態は避けられます。
このような詳細な報告を受けている場合で虚偽報告をしようとした場合、かなり大変です、必ずぼろが出ます。

ぼろを発見する
課題がないということはありません。課題があるということはそれについて人が動いているはずでそのモジュールなり機能のところで、進捗が動くはずです。当然品質にも影響があるはずでそれらの関連性が合理的でないのであれば虚偽報告である可能性があります。早急に現物確認をします。
現物確認は疑っているからするのではなく、PMの責任として、成果物を自分のものとして内容等を把握するために絶対に必要ですから、怪しくなくても時々行うべきです。
進捗報告の粒度もある程度負担にならない程度に詳細にもらうべきです。自動的に集計が取れるものでも良いかもしれません。
テスト要員と開発要員を分けることも肝要です。

五感を駆使して、異常を発見して早めに手を打てるようにしましょう。

例:バグを隠しているのではないか

大昔の話。
毎週進捗会議をして、各サブシステムから進捗をヒアリングします。シンプルな書式で、工程ごとに進捗率の目標と実績を報告してもらうものです。

各サブシステムごとに進んでいたり、遅れていたりするのですが、おおむねスケジュール通りに進んでいました。遅れているサブシステムは監視対象になって細かく進捗を見られます。それこそねほりはほり。

そんなこんなでサービスインを控え、ユーザ総合試験をすることになりプログラムを動かしてみようということになったのですが、あるサブシステムだけが何やら見てもらいたくなさそうです。説得して見せてもらったのですが、プログラムが動きません。それどころか、プログラムが完成していません。進捗上は内部の総合試験をほぼ終わっていて、動きそうです。どうしたことでしょう・・・実は報告者が、実態を見ておらず、期日に合わせて数字だけ更新した資料を毎週提出していたのでした。

虚偽報告です。PMとしてはこれをされてしまうと手の打ちようがありません、さすがに嘘をつかれた場合には・・・
「運が悪かった!」のでしょうか?

解:発見できるか?
例によって、気ままに書きますので順番の前後等あります、気長にお待ちください。

SAWAT:③議事録の展開とトラッキング

効果
ウオークスルーを実施することで、意外にたくさんの質問や、気が付かなかったこと、当たり前と思っているのは自分だけだったというようなことが発見できます。これらを議事メモに落とします。
ウオークスルー議事まとめ
議事メモは各テーマごとに作成し、課題事項、ユーザに対する制限事項、その他議事項目などに分類しながら作成します。

展開と実施
この議事メモは必ず展開をして対応を必ず書くようにします。
担当者をマネージャがいれ、その人に対応及びその具体的内容を入れてもらいます。ここでの具体的内容は、課題の内容に対する対処ではなく、課題自体を課題管理するとか何もしないとかというレベルの内容を管理します。そうしないとプロジェクトの課題管理表と二重管理になるからです。

課題管理に載ったら通常の課題管理に基づいて管理します。

最後に復習です。
このシステムウオークスルーで期待するアウトプットはPJによって様々と思いますが、以下の3点があげられます。
①課題管理表
②サービスレベル一覧(制限事項一覧)
③みんなの理解

あくまでもPJ推進の基本設計レビューと同じ位置づけで、システムのアーキテクチャー上の問題点・課題をあぶりだすのが目的で、洗い出せたら通常の課題管理やPJ推進設計工程に引き継いで実施していきます。

当事者意識をもってシステム全体がどう動くかをみんなでシミュレートすることが重要です。

これらはITアーキテクトが本来行っている手順の一部ですが、誰にでもできるように一般化してその人がいなくても一定のことができるようにすることが必要です。

SAWAT:②ウオークスルーの実施

まずは、ウオークスルー観点を入力として進め方一覧を作ります。

進め方一覧

ウオークスルーの内容と用意するツール、進め方では導入説明者を明示して何を議論に先立って説明してもらうかを明示します。

当日、ウオークスルーはすべてのサブシステムのリーダクラスに集まってもらいます。そのサブシステムの中身を説明してもらう必要があるため、中身が分かっている人が必須です。

司会はシステムの統括責任者が行うのが最適です。実際にウオークスルーを行っている中で指示をしたり、判断をすることが必要だったり、横断的な観点で話す必要があるからです。

1)テーマに沿ってまずは導入説明を行います。
導入説明はウオークスルーの最初10分くらいで軽く行います。本当に概略を説明するだけにしておきます。

ツールはシステム構成図を用いることが多く、なぜならデータの流れを見るのに最適な図であり使うと話がしやすいからです。

2)導入説明が終わったら、今後は観点をベースに、
○業務運用が考慮されているか(月次イベント・年次イベント)
○実際使う人が利用可能か(運用可能か)
○運用時間帯を考慮したつくりになっているか(制限事項は抜き出す)
○データの流れはどうなるか(無理なデータの流れになっていないか)
○必要なときに必要なデータが利用可能な状態で存在しているか
○技術的な無理はしていないか実際に業務を動かしてみたらどうなるか
など、そのシステムで懸念されている観点や運用観点でシステムとして動くかを実際に机上シミュレーションします。

システムの動きを机上シミュレーション
このとき、関連するサブシステムの人に質問をしながら心配事は無いか、分からないところは無いか、質問は無いかを聞きながら進めます。
その場で議論したり、課題の解決指示をすることもあります。
みんなが当事者意識を持ってシステムのイメージを持ってシミュレーションしていくのがコツです。

SAWAT:①テーマの洗い出し

洗い出しの方法
ユーザの運用業務視点での業務AP・基盤AP・HW/PP・システム監視を通じて、システムのグループ間の整合が取れているかを検討すべきテーマの洗い出しを目的として行います。
あるプロジェクトの例です。
少数のリーダで、今回の場合はサブシステムリーダー以上で集まって行いましたが、ブレーンストーミング形式でプロジェクト全体責任者が誘導司会をしながら、網羅的に意見が出るようにしながら「心配事」「ユーザ視点で今回何が起こるか」「前から変わる点」「異常としてどんなことが想定できるか」などの観点でランダムに出していきます。
今回は1時間くらいで130件出ました。これをプロジェクトマネージメントチームが持ちかえって分類し、ファイルの「ウオークスルーテーマ」タブのように整理します。
このときにどういうウオークスルーテーマにするかがセンスを問われるところです。

「公開用ウオークスルー観点」
(内容は参考です:特定のPJを意識したものではありません)
先立っての準備としてこれを公開し、各担当に確認追記をしてもらいます。
「後での整理事項」は多くのグループをまたがないのでウオークスルーをするまでも無いが、課題管理するか質問としてグループが回答するか、みんなに周知すべき事項のものです。質問一覧として各担当に割り振り回答を記載してもらうものです。
テーマとして書いたもののほか、ウオークスルーに入れた方が良いかを各リーダに検討してもらい、入れる必要があるものはウオークスルーテーマに記載してもらいます。
「ブレーンストーミングアウトプット」はブレーンストーミングをやったときに出た内容です。
この○の結果を元にファイル中の「質問回答一覧」「説明会項目・課題管理項目」タグを整理します。

☆「質問回答一覧」
質問回答一覧はブレーンストーミングで出てきた各者の疑問点です。
解答欄に回答の記載をしてもらいます。回答方法は直接回答を記載しても良いし、資料の場所を提示することでも良いと思います。

☆ 説明会項目
説明会項目はブレーンストーミングで出た内容のうち、ぜひ説明会で説明してほしいといわれている項目です。
説明会を実施してもらいます。ウオークスルーに絡めてその中で説明をしてしまっても良いと思います。

☆ 課題管理項目
課題管理項目はブレーンストーミングで出た内容のうち課題管理したほうがいいのではないかという意見があるものです。
担当者が課題管理の要不要判断して課題管理すべきものは内部課題として課題管理してもらいます。

システムアーキテクチャウォークスルー(SAWAT)

問題提起
業務とインフラがうまく整合があっていないとか、あっているかわからないというような事に出会ったことは無いでしょうか?わたしはよくあります。
システムアーキテクチャはシステムを実現するに当って一貫性を持って設計する必要があります。そのためには○○システムアーキテクトが実現する業務を踏まえてグランドデザインを行い、それをトップダウンで細分化して実装に落としていく必要があります。
とはいえ、現行システムのリプレース案件などで各サブシステムからのボトムアップでシステムをくみ上げる例もどうしても出てきます。
その場合にありがちなのが、システムの全体はすでになんとなくできてしまっいて、それぞれがその「制限」の中で実装を工夫している状態です。この「制限」が問題で実は一貫性のあるシステムでは変えるべきところである可能性があります。これを放置すると、ねじれたシステムが出来上がります。

どうしてそうなるのか。
いくつか原因は考えられますが、ちゃんと調整している(と思っている)にもかかわらず起きてしまう場合もあります。システムの内部課題として各々から質問として「これはどうなっているのか?」というものに対して、質問を受けた側は実装を考えた上で「こうなっている」と回答をすると、それが質問をした人にとっては前提条件となり大変だと思いつつもそのまま解決する方法を工夫して進めてしまっている場合です。本来は、実装に関して相談をしながら進めるのが良いのですが、お互いにその時点では案が無かったり時間が無かったりすると質問で終わらせてしまう場合にそうなりがちです。

全体整合をあとからとる
この場合はどうしたら良いでしょうか。今からでも遅くありません。全体の整合性を検証(システムウォークスルー)してみましょう。業務からHW・運用まで全般にわたっての人を集める必要があります。大人数になるかもしれません。
一人が全部わかるならばその人をシステムアーキテクトにして設計すれば良いだけなのですが、この場合は複数の人の知識や知恵を出し合って検証する必要があることを前提としています。
効率的なシステムのデザインという観点をぶらさなければ、全体工数を抑えることができるかもしれません。無理を解決する工数が削減できるからです。
システムリスクも減りますから後工程での工数も削減できます。
ここで言うシステムウォークスルーは、
「業務運用:業務AP:インフラAP:ミドルウエア:ハードウエア:監視運用
にわたって一貫性のある問題の無い設計になっているかの検証」とします。
アーキテクトはシステムグランドデザインを行う「役割」です。

システムウオークスルーの具体的な進め方についてお話いたします。
①テーマの洗い出し
②ウオークスルーの実施
③議事録の展開とトラッキング
という流れになります。

例によって、気ままに書きますので順番の前後等あります、気長にお待ちください。

例:データの受け渡しの無駄

あるサブシステムの設計レビューをしている中で、「サブシステム間通信のルールが増えて工数が増大している」という話を耳にします。「仕様が増えたんだな、仕方がない」と思ってはいけません。この一言はサブシステム間調整がうまく行っておらず、無駄な通信が発生しているのではないか?と疑います。

整合がとりにくい場合
サブシステム間でのデータの受け渡しはシンプルであるべきなのですが、単純な基本設計から他サブシステムの要件を理解して、それぞれのサブシステムが自分の要件に合わせて、設計した後にサブシステム間の通信手順を実装しようとする場合、往々にして遠慮や調整の面倒などの関係から言われた相手の仕様に合わせて、困難な開発を進めてしまうことがあります。

ほとんどの場合技術力に自信のあるサブシステムが、「俺たちのほうで何とかしてやるよ!」という男気でやってしますことが多いです。調整よりも技術で解決する方を選んでしまうわけです。

通信サブみたいに担当がいたとしても彼らはデータの受け渡すためのインターフェースを提供するだけで、アプリケーションレベルのシーケンスには関知しないのが一般的です。

技術力のあるPMとしてはデータがどのように流れているのかをヒアリングするなどして理解してサブシステム間で最適な状態に調整して進めることが重要です。

ボトムアップ開発の問題点
本来はシステム全体のアーキテクチャはアーキテクトが責任を持って設計して、その手のデータの流れなどをすっきりさせたうえで、インターフェースを最適化して、共通チームなり各サブシステムのアプリケーション開発チームなりに割り振るのが最適です。

アーキテクトがいないようなボトムアップ型開発の場合、(要は、お客様から全体の機能仕様書が出てきた段階で、各サブシステムに割り振って検討を始めたような場合、バラバラに機能を積み上げ、最後にサブシステム間の調整をそれぞれで行ってつなげるという進め方をした場合。)全体整合がとられていなかったり、あるサブシステムが勘違いで置いた前提条件を正として、みんなが無理にそれに合わせるような設計をしたりすることが多くなります。

結果、それぞれのサブシステムでインターフェース作成工数が膨れて予定を上回り、収益率が悪化することがあります。

このような場合はあとからでも全体整合をとる必要があります。

システムアーキテクチャーウオークスルー(SHAWAT)です。

 

解:必死のバグつぶし、バグは直っていくが・・・

解(solution)
危険の予兆

  1. 何を作るか開発を始める段階でわかっていない
    そもそもわかっていなければ開発に着手してはいけないはずです、見積もりもできないし、PJの終了が見えません。これは大きな損をするに決まっています。契約段階で前提条件を付けて、その前提が崩れたら契約を見直すか、責任を切り離す必要があります。
    仕様がわかっていない段階で、条件のない受注は絶対にしない!!
    _
  2. 仕様が決まっておらずあとから機能が追加
    納期を間に合わせるために行き当たりばったりで追加しない。PMとしては仕様変更は契約変更して納期を伸ばすしてもらうべき。それができない場合な受注しない。
    「そんなこと言ったら仕事がなくなるわ」とおっしゃる場合は、そのリスクを許容する選択をしたという意味になります。たとえ億を超える赤字も甘んじて受忍すべきとなります。リスクを受容する場合は、リスク分析をして、最悪いくらの赤字になるかを計算し、受注すべきか経営判断を仰ぐ必要があります。
    機能追加をする場合は、正しく、工程を後戻りさせ、設計を見直して、やり直し、製造に入ることをします。そうしなければスパゲッティーは必至です。
    _
  3. 設計がされていない。
    設計はしてください。「アジャイルなど設計しないじゃないか」といわれるかもしれませんが、「NaOHのアジャイル考」(たいしたものではない)からすると、アジャイル開発におけるサイクルは、設計プロセスであって、設計成果物を利用して、製造を効率化できるに過ぎないと考えています。つまり、サイクルにおける成果物と、レビュー議事録(意見要望等)を合わせて設計書なのであって、サイクルで機能要件設計が完了した後、サイジング設計、性能設計、その実装、運用含めた総合試験を経てSIN可能となるわけです。
    なので記録に残す設計は必ずすること。絶対です。
    _
  4. バグの出方がテストの進みに対して多い、すぐに直る
    経験よりバグが多い、あるいは少ない、中身の質が違うと感じた場合は詳細な検証をしてください。いつもと違う現象には必ず理由があって、原因があります。この原因が問題のないものであればよいですが、致命的なことの予兆である場合がほとんどです。
    バグの報告書を見る、設計を見直す、開発者にヒアリングをする、ソースを見る、バグの分析を見るなどを自らします。人にかませてはいけません。自分の経験を生かして心の目で見るのです。
    バグの不収束曲線_
    一瞬通常の収束曲線に近いように見えます
    PJの規模や性質によってこれらの出方や期間数は違いますが通常が下にある図だとすると
    バグが多すぎます。時間がたっていてもいまだにバグが出続けています。修正が追いつきそうで追いついていません
    バグの出方が減ってきているが、期間がたっているので、みんな疲れている(バグが出し切れていない)だけかも・・・

統計手法による発見の方法もあります。
バグの種類が決まっていて、それを除くと、バグ数が統計に近似する場合、特定箇所の問題が影響していることが推測され、そこに詳細な調査をすべきことがわかります。これは長くなるので後程

バグの収束曲線

マネージャの仕事としては事前に仕様をきちんと決めてもらう、お客様から必要な費用をもらう、場合によってすべてがだめにならないように期限を延ばしてもらう交渉をお客様とする。
お客様を含めた全員のために、お客様に対して困難な交渉をするのが仕事です。逃げずに立ち向かいましょう。

例:必死のバグつぶし、バグは直っていくが・・・2/2

あるPJでバグは日々たくさん出るが直る数も多く、頑張ればバグはなくなるように見えました。
ここでほんの少しSINを遅らせるだけで収束するように見えます。
「あと二週間徹夜すれば!!」本当にそうか?

このときの収束曲線

バグの不収束曲線

開発を経験しているのであれば、バグが日々出ていることに着目して、「この時期にこんなにバグって出るもんだっけ?」と疑います。さらにバグの中身を見ます。単純な表示上の問題や計算の問題に見えるものが多いです。数十の画面で表示されるべきものが表示されなかったり、別のものが表示されたり。ここで「あれ?」と感じる人も多いでしょう。「バグの数が多すぎます。別のものが表示とは?表示されなかったり?数からいう1画面あたり1回以上?」どういう作りをするとそんなことに?
実態は、あまりにもバラバラに正規化されたテーブルを集めてデータにするところを一か所に集めてルーチン化したのですが、パターンが増えるごとにそこに手を加えていって、ものすごい巨大な関数がいつの間にか出来上がっていたのでした。なので問題があると、そこだけ直せば直るのですが、影響調査がしきれず、ほかのところに影響が出て、新たなバグになり・・・・バグの収束の速さとバグが出る量が多いことはそこが原因でした。「典型的スパゲッティー・・・」
それをほぐすには!とすぐに期間の見積もりを指示しますが、1月2月ではとてもやりきれないほどめちゃめちゃに・・・仕様の整理も十分にされていないようです。たとえバグをつぶしていって機能要件を満たしたとしても、性能要件での問題が起きそうです。
これは死亡プロジェクトの例です。行きつく先は契約解除と損害賠償です。(実例かどうかはノーコメント)
仕様がはっきりしない段階から開発をはじめ、仕様が明確になるにしたがって、機能を追加していった結果のコードでした。(最初に単機能のものを作り、あとから追加された機能をその機能に追加しました。あとから予想もしない機能がどんどん言われて、それも追加していくうちに、後戻りできず、現場はさらに追加し続けてしまった)現場のプログラマに開発を任せ、ウオーターフォールを無視して、設計レビューをせずにものの完成のみを追っていったために起きたのでした。アプリケーションアーキテクチャを機能全体を見て設計していたら避けられた事態です。
サービスイン直前まで数字のみを追って、現場の報告をうのみにしてきたためにそうなってしまったのです。開発経験をしたことがある人は何となくわかると思いますが、中身を見るPMであればもっと前から問題点に気が付いたであろう、予兆が見えたと思います。
上記例では技術上がりの管理者としては火を噴いた後から「たーすーけーてー」という声を受けて支援に入ったところで事態がわかるということになるかと思います。もっと早くから事態がわかっていれば打てた対策もあるかもしれません。

本来の収束曲線

バグの収束曲線

どうするか!「解(solution)」に書きます

例:必死のバグつぶし、バグは直っていくが・・・1/2

サービスイン真近のプロジェクトがあり総合試験も後半なのですが、バグが多くスケジュールに影響が出そうです。WEBをUIとしたDBのトランザクションシステムです。表示のための計算や表示のさせ方の複雑さはあります。高度に正規化されて、複数のテーブルを統合しないとデータを表示できません。投入履歴をスライスする感じでデータの反映時間をベースとしたリビジョンが作られ、どの段階でも検索により取り出せるように求められています。このようなシステムと仮定します。

ここでPMは判断を迫られます。スケジュール遅延をお客様に話して、SINを遅らせることを交渉するか、内部で無理してでも間に合わせる努力を最後までするか。

通常はスケジュール遅延をお客様に報告しつつ、最大限の努力をしている旨ご理解いただき、最悪、SIN日程が守れないことを報告します。本当にSINに間に合わないことがほぼ確実になった段階では、正直にそのようにいうしかないのですが、精神論で頑張ってしまった場合、お客様がSIN遅延の覚悟ができていないことがあります。

遅く報告した場合、次期によってお客様内部や外部への(接続関係や既存システムの停止撤去の工事日程、既存システムがリース契約であった場合リース延長手続きが間に合うか、延長のための費用が確保できるか?サービス開始を期待しているお客様へのプレスリリースの手配、損害賠償への準備など)様々な調整が間に合わなくなり多大な迷惑をおかけすることがあります。

この判断をするに当たって、この例では始末が悪いことに、「ものができていて、品質が悪いだけ、バグをつぶせれば大丈夫、」かのように見えることです。

すでに大量の人員を投入し、テストチームと開発チームに分かれていて、開発チームはサブシステムごとに方端からバグをつぶしていきます。チームリーダはPMのしんなりする人で構成されており、幾多の修羅場(大量のバグつぶし)をくぐってきた人たちです。

マネージメント層はバグの収束曲線を見ます。

バグの不収束曲線

バグは日々たくさん出るが直る数も多く、頑張ればバグはなくなるように見えます。ここでほんの少しSINを遅らせるだけで収束するように見えます。

「あと二週間徹夜すれば!!」本当にそうか?
続く・・・

実話かはノーコメントです