カテゴリー別アーカイブ: 1技術者からマネージメントへ

最初の話

私はどういう経緯でなったか(2/2)

・サブシステムを任される
システムにはサイクルがあって、定期的にリプレースが必要になります。(HWやソフトウエアの保守期間が切れたり、業務が時代に合わせて高度化するから)
そんなリプレースのときに一つのサブシステムを任されてサブシステムリーダになりました。
この時はメンバーを3人にして私入れて4人でチームを作りました。運の良いことに優秀なプログラマが一人入っていたのであとの2人は2年目程度の人でもなんとかなるだろうとふんでいました。そのサブシステムはメンテナンスをしてきたところであったので、中の構造はすべて把握しています。最初に作られていたのがぐちゃぐちゃだったので、リファクタリングしたのです。
ほとんどの設計は私がすべて実行し、共通部分、難しい部分のコーディングを優秀なプログラマ(設計とかのドキュメンテーションは不得意)にひたすら作らせます。
その作られたフレームワーク上で2年目たちに機能を作りこませたのです。概要設計までは私で行い詳細設計以降を任せる感じです。
後から聞いたところでは、初回とは比べ物にならない生産性だったそうです。
今から思うと普通の開発ではできない手法でした。(一般化できないという意味)

・管理をサポートする
そのかいもあって管理サポートをするようになり、管理チームに参加する様になります。見積もりの精査や品質管理、課題管理などの技術面を中心にサポートをしたのです。見積もり精査は、見積もりに対して、勘違いしているところはないか見落としているところはないか、妥当性を欠くところはないかを見ました。品質管理はバグが入り込む原因を分析して対策したり、直らないバグに対して助言を与えたりしました。課題管理は、課題に対して複数の解決方法がある中で最適なものを提案したり選択したり技術面の裏付けをとったりしました。

・専門家として参画する
別の案件では技術の専門家としてPMをサポートする立場(ITアーキテクト)で、システムの全体設計を行いました。基本設計までは私が行い、みんなに伝えて、サブシステムごとに概要設計から実施していただくという方法をとりました。
マネージメントをするマネージャーがいたので、その部分は任せて、システムアーキテクチャの策定、技術問題の解決に専念できたのでした。

・PMとして参加する
その後のプロジェクトではマネージャとなってシステム全体の開発構築を行いました。

何となくきれいな段階を追ってPMになっていったように見えますね。当然細かいところは省いていますから、真実ここまできれいではありませんが大きな流れとして、参考にしていただけたらと思います。

私はどういう経緯でなったか(1/2)

実際にはいろいろ紆余曲折はあるものの美しく並べるならば以下の通りです

・サポート要員としてまずはPJに
サービスインしたプロジェクトの残件対応としてこの業界に入りました。サービスインしたといっても問題は多く、バグも大量に残っていましたのでそれらを何とかするのが役割でした。

・いくつかの問題を解決
当時は派遣社員でしたから1月以内に成果を上げないと切られてしまいます。
最初の2週間は仕様書設計をひたすら読みました、早く何らかの成果を出さなければならないのに1000P以上あるあるサブシステムの設計書を渡されたのです。読み終わったことを報告して、障害一覧の中からプライオリティーの高いものから支持を受けて修正しました。
何とか1月以内に1つの修正物件をリリースすることができました。そこからは片端から修正です。

・他のサブシステムの問題を解決
サービスインしていますから使っているときのバグは重大障害として問題になります。大きなものになると担当者全員を集めて緊急対応することになるのです。
そんなことで客先に集められたのですが、たまたま私のいた作業場が近くであったため、先について、その時の責任者から簡単なサブシステムの説明を受けた後、障害調査をしたのですが、運よくすぐに原因が分かったのです。その時はまだ担当者が来ていなかったため、修正内容の案とその影響調査しながら待っていたのです。運が良かっただけなのですが結果的には担当者より早く対応したという結果だけが残りお客様の印象に残る実績となったのです。

・改修案件をやる
システムが安定してくると、今度はシステム変更案件なども入ってくるようになります。変更ですから、見積もり(どれだけ時間がかかるかを言うだけ)をして、受注できたら、それを実行する。というものです。

・大きな改修案件をやる
それらの改修案件をこなしていると、大きな改修が入ってくることもあります。そうなってくると一人ではできませんから、人を入れてやることになります。自分だったら何時間かかるというものはありましたが、ほかの人がそれだけの実力があるのかわかりません。同じくらいだろうと見積もって、ちょっと安全をみてまったくみんなが使えず自分が一人でやっても何とかなる期間と人数を報告してやりました。
当時は資格試験の受験生でしたのでパートタイマーのチームリーダーだったのです。2人いれて3人でやったのですが、私よりは経験が長い人たちでしたが生産性は半分程度であったと記憶しています。困ったら相談してくれと言ってあったのに一つのバグで丸一日悩んでいて、声を掛けたら相談してくれたのですが、単純な話であったためにすぐに直ったのです。悩まずに相談してくれたら1日(8時間)は無駄にせずに済んだはずです。といようなことがあるということを学びました。

ここまではシステム保守段階の話です。
ここからリプレース開発の受注後の開発を担当する話になります。

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

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

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

  • 課題管理
  • 品質管理
  • モジュール単位進捗管理
  • 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の規模や性質によってこれらの出方や期間数は違いますが通常が下にある図だとすると
    バグが多すぎます。時間がたっていてもいまだにバグが出続けています。修正が追いつきそうで追いついていません
    バグの出方が減ってきているが、期間がたっているので、みんな疲れている(バグが出し切れていない)だけかも・・・

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

バグの収束曲線

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