概要
受託開発型の中規模から大規模プロジェクトで適用されている役割分担型のプロジェクト運営を考察する。基本的には初期設計段階においてプロジェクトは成功するという確信(あるいは期待)を以って、プロジェクトは進行していく。途中段階あるいは最終段階において、なぜ最初の予想が外れてしまうのかの原因を探り、既に予想が外れた時点(いわゆる火を吹いた状態)においてのフォローアップを考える。
目的
初期計画のずれ、見込み違い、それによる製作&試験期間圧縮による品質の低下によりプロジェクトは悪化の一途をたどるが、これをよいイテレーションに変換するための方策を練る。
- デスマーチ状態のプロジェクトを脱出させるための前提条件
- デスマーチ状態から、脱出するための指針と、いくつかの具体的な方法
対症療法でしかないが、既にデスマーチ化したプロジェクトに対して、「初期設計の甘さ」を問い詰めても仕方がない。この場合には、劣悪な環境になってしまったプロジェクトに対する治療を行うことが最優先になる。できる限り、荒療治をしない形(人間関係を保つ形)でよい方向付け/修復を行う。
前提条件
対処の適用範囲を明確にするために前提条件を列記してみる。
- 現プロジェクトを立て直すべきと、会社が考えていること
- 現プロジェクトメンバが、現在の状況が劣悪であると感じていること
- 現プロジェクト責任者が、現在の状況が劣悪であると感じていること
- 現プロジェクトメンバの絶対数が足りていること
以上の4点を本対策の適用範囲とする。これらのいくつかの条件に反している場合には、本対策は適用できないし、適用したとしてもほとんど効果をなさないと考えられる。そういう場合には、別の対策(ときに荒療治)が必要になるだろう。
少し前提条件に詳しい説明をつけてみよう。
立て直すべきと会社が考えている
現プロジェクトに対して、会社側がなんら対策を行わないと結論付けているのであれば、現プロジェクトは会社にとって捨て駒に過ぎない。この場合には、デスマーチ状態を回避することなく、プロジェクトメンバの健康面を気遣った対策を立てるのが第一であろう。会社側の思惑と顧客の思惑とが大きく乖離している場合は、現プロジェクトを「立て直す」という行動は無駄であることが多い。
メンバが現在の状況が劣悪と感じている
プロジェクトメンバが、長時間の勤務や深夜や休日の出勤を苦にしていないならば、別の対策を立てるべきである。たとえば、プロジェクトのマネージャや責任者の意向にそぐわないチームメンバが、あえてデスマーチ状態を好み、そのままプロジェクトを続行しているのであれば、メンバ内からの自発的な改善を望むことはできない。この場合には、プロジェクトメンバの意識を本来の目的となる顧客や会社側の思惑に沿わせることが必要になる。
責任者が現在の状況を劣悪と感じている
プロジェクトメンバだけでなく、プロジェクト責任者も現状が劣悪であると思っていなければいけない。たとえば、プロジェクトメンバに長時間勤務を強い、深夜や休日出勤を続けることによって、プロジェクトが進行できると信じているプロジェクト責任者には、このプロジェクトを改善する意志はない。この場合は、プロジェクト責任者の意識改善が必要であり、そうすることによって、プロジェクトメンバを含めたプロジェクト全体がよいイテレーションに変化していくだろう。
プロジェクトメンバの絶対数が足りている
デスマーチプロジェクトの多くは、人海戦術的にプロジェクトメンバを多くしたときに発生する意思伝達の速度低下(あるいは恣意的な伝達遅延)が、問題となる。このために、プロジェクトメンバの絶対数は足りている、と考えられる。たとえば、正規に設計された仕様を実現するために、10人と見積もりを出したプロジェクトに対して、5人しか投入しない場合には、別の対策を採る必要がある。予算は足りているが技術スタッフが不足しているために人員を確保できないのか、予算が足りないために少人数でプロジェクトを運営しなければならないのか、という問題に移る。
よって、誰も(顧客や発注元は除く)がプロジェクトの状態が劣悪と考えているものの、諸条件によりデスマーチ状態を抜け出ることができない場合を考える。最終顧客の無理解や、発注元による無理なスケジューリングあるいは無計画性に対して、プロジェクトが対抗できる方策、できれば最終顧客や発注元を巻き込んだ形で改善できる方法を考えていく。
スターはいらない
成功するプロジェクトを形作るために、管理者は時としてスター(高度なスキルを持ち、強力なリーダーシップと交渉能力を持った技術者)を求めるが、実際には、そのようなスター技術者はほとんどいない。たいていは、平均的なスタッフの組み合わせによって、競争力の高いアプリケーションをくみ上げなければならない。
平均的なスキルを持つスタッフによって、プロジェクトが完結できない見込みがある高度な技術要素を持つプロジェクトならば、話は別であるが、大規模あるいは中規模プロジェクトに高度なスタッフが300人導入されることは実現不可能な話である。
となれば、より平均的なスタッフ(幸運であれば、平均よりもわずかにスキルの高いスタッフ)を集めることによって、プロジェクトを成功させることが現実的である、ということになる。
救世主はいらない
同じことはデスマーチプロジェクトにもいえる。数々のデスマーチを救う物語には、何らかのスキルを持ったスターが出てくる。危機に瀕している現実にある日、突然、スターが現れて危機を救ってくれる。実際に、そのような神話が形作られることもあり得るのだが、現実的ではない。救世主を期待していても、宝くじの当たるよりも低い確率でしか、現れないのでは、3つのうち1つしかスケジュール通りにいかないソフトウェア業界では、あてにできない。
中央集権的な存在はいらない
アーキテクチャというソフトウェアのコア構造が明らかになったとき、アーキテクトというソフトウェアの中央集権的な存在が浮かび上がった。ひとりのアーキテクトが作成されるアプリケーション全体を把握して、全体がバランスよく動くように努める、という方式である。しかし、ここに誤算がある。総勢300人のプログラマの中央に位置するアーキテクトがひとりでよいのか。ひとりの頭脳でまかなうことができるのか。そして逆説的に言えば、300人のプログラマが集まっても、出来上がるソフトウェアは、ひとりの頭脳の中でしか整理しえない問題しか解決できないものなのか。
おそらく、LunixのコアプログラマやRubyの作者がひとつのソフトウェアを統一させるという枠組みと、現実に何百万行もあるソースコードから成り立つ基幹ソフトウェア開発の枠組みは異なると思われる。
ひとつの会社が、ひとりの社長の号令の下に動くのではない、と同様に、数百人で構成されるソフトウェア開発はひとりのアーキテクトや、ひとりの責任者によって成り立つものではないだろう。ひとりの責任者が見られる範囲はせいぜい12人程度(XPの最大人数、ソフトウェア職人に就く最大の弟子の数)と考えられる。
協調
サッカーをたとえにすれば、ひとりのスター選手とそれを支える10人の選手のチームと、スター選手はいないが11人の平均を上回る選手のチームと、どちらが長期戦に強いか、という話に近い。チームリーダは必要かもしれないが、他の選手の手足を動かすわけにはいかない。ゴールキーパーは攻めにいきたいかもしれないが、ゴールを守る役目に徹しないとチームは負けてしまう。
それぞれの役目を明確にした上で、それぞれの役目をこなす、そして、全体の協調を整えたところで、調和のとれたチーム、最終的には結果=ソフトウェアができると想像できる。
役割分担
ここで、役割分担型のプロジェクトにおける、それぞれの「役割」について再確認を行う。
- マネージャ(プロジェクト責任者)
マネージャやプロジェクト責任者は、プロジェクト全体の流れを統括する。顧客との打ち合わせ・交渉に出席し、事前のリスク、スケジューリング、配員などプロジェクトの外部要因の対処を行う。
- 設計チーム
アーキテクトから製作チームに引き渡す仕様書の作成までを行う。問題分析を担当する。
顧客との打ち合わせにおいて、仕様を追加・変更・削除を行い、ソフトウェアの完成形を整える役割を担う。仕様変更に対して、後工程の見積もりを行うことができる。
専門分野に強い、抽象表現の具現化、イメージの組み立てができるメンバを集めるとよい。
- 製作チーム
設計に従いコーディングを行う。無理な設計が判明した場合は、設計チームと協議する。
試験チームに引き渡すための品質の高いプログラムを生産し、単体試験までを担当する。
比較的、技術スキルの高いメンバを集めるとよい。
- 試験チーム
仕様と設計に従いソフトウェアを試験していく。設計の裏に隠れる顧客要件までを見据えて試験する必要がある。これは、リリース(出荷)したあとの仕様変更、要件が満たされていない、という手戻りを極力少なくするため。
ひとつひとつの試験を着実にこなし、ソフトウェア開発の重鎮となる人が望ましい。
- 構成管理
単一プロジェクトの場合には、VSSやCVSなどのツールでよい。
しかし、協力会社や外注が多かったり、リリースが頻繁に発生する場合には、構成管理役が必要となる。構成管理は、決められた手順を守り、ミスがないことを要求される。途中で手順を省いたり、期限が迫っていることにより見落としがあってはいけない。ある意味で頑固者が適任。
図のように、設計・製作・試験・構成管理の4つのチームは、強い協調関係にある。このグループを全体的に統括していくのがマネージャの役割となる。通常、うまくいっているプロジェクトではグループ内で自己組織化が正常に行われる。このために、マネージャが強力に介入することは少なくてよい。
しかし、顧客からの仕様変更が多かったり、全体スケジュールが厳しくなったり、なんらかの理由によってグループ内の不和が発生した場合には、マネージャは強い介入によって、プロジェクトの正常化を求めなければいけない。
通常、顧客とマネージャとプロジェクトメンバとの間は、協調関係にあり、顧客からの適度な仕様変更・追加、マネージャによるスケジュール管理の適度なプレッシャ、プロジェクト内の設計チームによるソフトウェアに対する適度な改善提案、製作チームによる改善案やツールの作成、試験チームと製作チーム間の適度な問題処理票のやり取り、が行われる。
いくらかのプレッシャはプロジェクトの生産性や品質に貢献するが、多すぎるプレッシャは更に効率を悪くするだけである(「アジャイルソフトウェア開発」より)。幻想的なスターを求めないのであれば、責任と権限はほどよく分担するほうが優れたチームを形作ることができる。
次に、バランスの悪いために起きるデスマーチプロジェクトを具体的に考えてみる。
マネージャの権限が強大
よく陥りやすいパターンとして、マネージャの権力が絶大であるプロジェクトがある。マネージャは顧客の協調関係(打ち合わせや仕様決定会議)を強く保ち、顧客と設計チームとのつながりが相対的に弱くなる。仕様を把握しづらい立場となる設計チームは、製作チームとの協調関係が薄くなり、存在意義が薄れてくる。結局、マネージャによる、設計の統制が行われ、よって、製作チームにもマネージャによる仕様の伝達が行われる。最終的に出来上がるソフトウェアの全体を把握している者は、マネージャを置いて他がなく、後継者を作ることはできない。
- マネージャが掌握したままの隠れた仕様が大きいために、ひとつのプロジェクトに時間を取られて、マネージャはひとつのプロジェクトしか管理できない。マネージャは本来、将来を見越した営業開拓も必要であったり、複数のプロジェクトを見渡すべきなのだ。
- マネージャの技術に拠るものが多くなり、後継者が育たない。特に、設計チーム(設計技術)の弱小化により、全体を見渡す能力のないプロジェクトを存続させてしまう。
- マネージャの主観でプロジェクト運営を行ってしまう(スターシステム)を採用するために、マネージャの弱点がそのままプロジェクトの弱点となってしまう。役割分担型では、相互に弱点を補いながら、相互の強みを生かしていく方式であるのに、後ろ向きの最低限のプロジェクト運営しか行えない。
陥りやすいマネージャの性格としては、
- 技術指向が高い
- 顧客との打ち合わせを好みすぎ、権力志向が高い
- 管理指向、統率指向型である
があげられる。
性格は容易に変えられるものではないし、時には統率されることを望むスタッフもいるので、いちがいにこのマネージャが悪いとはいえない。また、技術指向の高いマネージャの支配下に、技術指向の高いスタッフを置くと、推進力はきわめて高い。
もっとも、長期的にプロジェクトを見たときには、教育効果が低いために後継者作りには向かない。
このマネージャによるデスマーチの悪循環は次のシナリオとなる。
- 顧客とマネージャの緊密度が高いために、マネージャがプロジェクト側よりも顧客に感情移入しやすくなる。
- スケジュールや仕様変更に対して、現実のプロジェクトよりも顧客に有利な形で計画を立てやすくなる。
- マネージャがプロジェクトメンバに対して、過度な期待(裏を返せば、身勝手なマネージャの思惑)をしすぎて、プロジェクトの進捗が悪くみえてくる。
- 平均的なプロジェクト運営から、楽観的な顧客の要望(24時間体制、人海戦術による増員による挽回、過度なスケジュール)を受け入れる確率が高くなり、メンバが疲弊する。
- マネージャは思ったとおりにプロジェクトが動かないために、リーダーやスタッフを叱り飛ばしたり、発奮(とマネージャは思っている)させることによって、進捗を回復しようとして、1へ戻る
この場合、マネージャの権力を抑え、本来のプロジェクトの治癒能力を引き出せばよいので、対策としては、マネージャが複数のプロジェクトを担当して、特定プロジェクトに介入する絶対的な時間を減らす、とよい。そうすることによって、マネージャが介入する時間が減り、顧客との調節はプロジェクトの設計チームに戻り、元の協調関係へと戻っていく。
ただし、既にデスマーチ状態となっているプロジェクトでは、巨大なマネージャ権力=マネージャしか仕様を知らない、という状態になっているので、マネージャがいなくなるということは設計チームの主力がいなくなることに等しい。
対策は、次のようにマネージャが持っている仕様(暗黙知)を、権限としてではなく単なる「字引」として、押さえ込むとよい。
- 顧客との打ち合わせに設計チームとマネージャが同席する。このとき、マネージャは設計チームをサポートするに留める。もちろん、現在の設計チームの知識量では荷が重いと思われる仕様に対しては、マネージャは設計チームの責任を借りて、決定を行う。この決定は、以後、設計チームに引き継がれる。
- 顧客要望の重要度(仕様変更、緊急リリース、即修正すべきバグ)は、設計チームの支持に従う。本来、ほんとうに重要であるかどうか、優先が高いかどうかは、マネージャひとりの考えでも、設計チームとの共同協議の結果でも、誤る率(リスク)は変わらない。むしろ、権限を持たない、マネージャ以外の者のほうが客観視できる。
- もし、マネージャが緊急度が高いと思われるものがあるならば、それは、顧客・マネージャ・プロジェクトの正常な協調を関係を崩すような、重大な事項である。重大な事項は、プロジェクト全工期において、2,3度しか起こらない。1度も起こらないのが普通である。それ以上、頻繁にあるということは、重大な事項ではない、ということだ。
- およそ、マネージャとプロジェクトメンバ(リーダーを含む)の予想するスケジュールは離反するのが常である。スケジュールを短く、顧客の出す仕様変更をなるべく盛り込むという目標を持つマネージャと、工期を守る、仕様変更はしたくないというリーダーの立場では、根本的な視点が異なり、リスクの捉え方も異なる。たいていの場合、マネージャとリーダーの中間スケジュールが、正しい位置となる。
こうすることによって、マネージャは本来の仕事である顧客とのスケジュール調節、顧客から雨あられと振ってくれる仕様変更の調節、次プロジェクトの開拓、近視眼的ではない長期スケジュール(少なくとも3ヶ月先の予定)を立てることが可能になる。
デスマーチ状態のプロジェクトに対して、マネージャができることは数少ない。高野フルーツパーラーのケーキを持ってきたり、なるべく目立たないようにプロジェクトを観察していることぐらいしかない。
設計者(リーダー)の権限が強大
もうひとつ陥るパターンとして、設計チーム(あるいはリーダー)の権限が大きすぎる場合がある。マネージャが他のプロジェクトにかかりきりになってしまったり、過度にマネージャがリーダーに権限を持たせたりしたときに陥るパターンである。
5人以下で構成される小規模のプロジェクトである場合、プロジェクトマネージャ兼リーダーとなる場合もあるので、このパターンにならないように注意する必要がある。
マネージャの権限が強大であるパターンと同じように、もともと権限を持ちやすい立場にいる役割の人が、権限をそのまま行使するとリーダーがプロジェクトの進捗管理をしないといけないにもかかわらず、仕様の把握&文書化をしないといけない、という情報が伝達されない状態になる。
- 設計チームは顧客からの要望(仕様変更・追加)を直接取り込む役割に振られているので、その伝達を製作・試験チームに伝える責を担っているが、正常なフィードバック(製作チームからみた変更度合いの調節、仕様変更による試験のやり直しの量、影響範囲の大きさ)が阻害される。
- 設計チームは、顧客の要件を分析し仕様書として残すだけではなく、顧客との打ち合わせによてってバランスのよいソフトウェアを構築することを求められる。製作チームに過度な負担をかける仕様変更・優先度は、一方通行の伝達しかなく、製作チームからみた保守性・変更の容易さを阻害される。
- 製作と試験チームで行われる不具合の量を無視したまま、要求を受け入れるとおのおののチームが最善としたスケジュールを崩すことになる。
- マネージャが疎外されているために、金額交渉、スケジュール交渉に支障がでる。設計者(リーダー)が交渉を行った場合、基本的に設計者の仕事が増えるだけで、役割分担にはなっていない。
- リーダーがマネージャ役になってしまうので、実質的なリーダー役がいなくなり、プロジェクトのスタッフに対して過度な期待が求められてしまう。
陥りやすい設計者(リーダー)の性格や立場は、
- マネージャとリーダーを兼務している
- 基本的にパソコンがすき
- 設計パターンが好きで、新しいユーザーインターフェースに惹かれやすい。
となる。
マネージメントとリーダー業務の混在(よく言われる、役職以上の責務を期待される風習)により、外向きの交渉(マネージメント)と内向きの交渉(リーダーシップ)とのバランスが取れなくなってしまっている例である。
スタッフの中に新たなリーダーが出現しない限り、プロジェクトは形式的なリーダー(リーダー業務を放棄したリーダー)を中心に据えてしまうために、機動性が悪くなる。リーダーの指示待ちになるプロジェクトが出来上がる。
この設計者(リーダー)による、デスマーチシナリオは次のようになる。
- プロジェクトマネージャ兼リーダー、あるいは、リーダーがひとりの状態からプロジェクトが始まる。
- リーダーは、顧客との打ち合わせや仕様を煮詰めていく。
- ある程度、仕様が固まった段階で、仕様書の作成、プロトタイプのコーディングのためにスタッフを入れる。しかし、スタッフに伝承するのではなく、分担のみで別々の作業を行う。スタッフは、無難な部分を書きリーダーがチェックする方式をとる。
- コーディングが始まり、さらにスタッフを入れるが、仕様書を作成したスタッフも「よくわかっていない」ので、リーダーが手取り足取りしないとコードが進まない。やむなく、仕様書は全面的にリーダーが書くのだが、打ち合わせもあって満足な質にはならず、メーリングリストや議事録を使いながら断片的にスタッフに仕様を伝える。
- コーディングが終わる頃になって、仕様書の不足分(詳細性ではなく、網羅性が足りない)が見つかる。リーダーはスタッフを叱咤するが、「よくわからない」ままコーディングしているスタッフにとって、仕様はリーダーが握ったままなので、どうしようもない。
- 同様に、試験工程が始まっても、仕様の網羅性は保てない。既に、仕様書を書く暇はなくなっているので、再び4のように断片的に伝えるが、スタッフは理解しない。試験も任せることもできず、かといってコーディングも任せることができない状態となる。リーダーが仕様を握っている、という状態に陥る。
ここでの最大の問題は、3でリーダーがスタッフに仕様の伝承を怠ったことにある。リーダーは過去1ヶ月の顧客との打ち合わせにより、基礎技術を勉強する時間もあり、顧客との意思疎通もはかれているのだが、途中からは入ったスタッフには何の前準備もない。おそらく、導入時におおまかなプロジェクト概要と周辺技術を1時間程度説明することが多いと思うが、そのような短期間では概要しか伝えることができない。導入段階では、あくまで概要を伝えるのみにとどめ、プロジェクト内で働くために必要な知識は、継続的に伝えておく必要がある。
最初が間違っているので、4から6へ工程が進んだままでも間違えたままになる。
このような方式でクリアできるプロジェクトの大きさは5人以下の小規模プロジェクトで、リーダーがひとりひとりのスタッフの動作を目で確認できる程度の大きさまでだろう。10人以上になれば、作業分担をせざるを得ず、リーダーひとりでは全体を掌握することはできない。
このような場合、対策は、早急に設計者をもうひとり育てることである。デスマーチ状態の場合、仕様書を書き直したり、詳細な設計を残したりする時間的な余裕がない状態になっているので、形式を求めることは不可能である。
誰かひとりをピックアップ(一番最初にプロジェクトに入ったスタッフがよい)を対象にして、半日をかけてリーダーが知っている仕様をひとつひとつ確認していく。半日は、本来のリーダー業務に戻るとよい。
- 顧客打ち合わせの場には、新しい設計者を伴い、新規に発生した仕様変更や追加は、新しい設計者がすべて把握できる環境を整える。
- 新しい設計者に説明するときには、口頭だけではなく、印刷した既存の仕様書への書き加え、ホワイトボードの利用、紙と鉛筆を使ってUML等を書き出してみる、というような形が残る形式をとる。そうすることによって、メモ書きを、新しい設計者が、さらに別のメンバ(製作や試験チームの人)に伝えやすくなる。
- リーダーが直接説明するのではなくて、新しい設計者が、製作や試験チームの人に説明をする。そのときには、リーダーは同席する。間違いを訂正したり補足したりすることができる場所にいる必要がある。作業効率を求めて、リーダーが打ち合わせに行っている間にスタッフに説明しておいて、というのは駄目。
- ある程度伝達がすめば、互いに補足をし合えるようになるので、平行して作業をすすめることができるようになるだろう。
プロジェクトリーダーの本来の仕事は、プロジェクトメンバが仕事をする際にフォローアップを行うコーチングである。プロジェクトリーダーが設計を行い、スタッフがコーディングを行う、新人が試験を行うというヒエラルキーが、このデスマーチを引き起こす。
プロジェクトリーダーがリーダーシップを以って、プロジェクトメンバを牽引し、経験上技術スキルが足りないところがあればフォローアップし、配員が不足していると思えばマネージャと相談する、という中間管理をすることによって、避けられるリスクである。
製作者(リーダー)の権限が強大
プロジェクトリーダーが技術指向であったり、マネージャとリーダーを兼務している場合に陥りやすいのが、製作チームの権限が強大になったてしまうパターンである。設計者(リーダー)のときと同様に、比較的小規模のプロジェクトで起こりやすい。また、中規模以上のプロジェクトではリーダーがスキルを過信していると、あっという間に取り返しのつかないデスマーチへと突入してしまう。
設計者(リーダー)が強大になるパターンと違い、製作者(リーダー)が強大になる場合には問題が顕在化しにくい。これは、ある意味で成功するプロジェクトのパターンと考えられるからだと思われる。
技術スキルのある人がプロジェクトリーダーを受け持った場合、顧客との仕様調節の場に出て仕様を把握し、ある程度の仕様書を残してスタッフと一緒に仕様書を作成(あるいは分担して作成)し、プロトタイプ製作を行うために製作者としてプロジェクト全体を牽引していく、というパターンは、一種のプロジェクト成功パターンである。
しかし、よく図を眺めてほしい。このリーダは、顧客との打ち合わせで交渉能力を発揮し、設計で顧客の要件をひとつひとつ仕様書に書き起こし、さらに品質の高いプログラミングを行う能力のある「スター」ではないだろうか。スターは、平均的なプロジェクトでは現れることがない。ひょっとしてこのようなスター的なリーダーが現れたら疑いの目で見てほしい。偽装されたスターかもしれないからだ。
自称スター型のリーダーが陥りやすい点を列挙してみよう。
- 自分の設計を過信しやすい。実際、すばらしい設計を書くかもしれないが、他の設計者が容易に理解できなかったり、実装が難しかったりする設計を書きやすい。そのような設計は顧客には喜ばれ、マネージャに一時的な評価をもらえるかもしれないが、結果的には実現不可能な設計をしているに過ぎなくなる。
- 同様に、すばらしいコーディングをしているものの、他の製作者には理解できないコードを書いている。特にスタッフに説明もなしに使われているライブラリや、コードテクニックを使っている場合には要注意である。だれも、そこのメンテナンスができなくなってしまう。保守性のないコードは、将来的にはデスマーチを引き起こす。
- ある設計と製作の部分を抱え込んでしまうので、リーダーは忙しくなりすぎる。3人程度のプロジェクトであれば、特にプロジェクト運営に支障はないが、5人を超え始めると、リーダーはプロジェクト運営に注力し、スタッフのフォローに回らなければ、プロジェクトの品質がちぐはぐな状態になる。
陥りやすい製作者(リーダー)の性格&性質は、
- 技術スキルに長けている。同時に設計スキルに長けている
- 新しい技術をよく知っているし、それを実践する能力を持っている
- 説明が苦手で、教えるよりも手を出したほうが早いと思っている
マネージャを兼任してはいないが、プロジェクトを任されている信頼あるリーダーが陥りやすいパターンである。能力は悪くない、しかし、プロジェクトを運営させるとなぜかうまくいかない、という技術者が陥る落とし穴である。
- 技術スキルのあるリーダーが、技術調査も含めてプロジェクトを開始する。
- 技術調査を行い、ある程度の基礎設計(顧客の要件)をまとめる。
設計書には非が見つからない。やや記述不足が見られるが時間の制約もあり特に問題は見つからない。
- 設計の中途段階、あるいは、設計の終わった段階でスタッフが入る。
この場合、同程度のスキルを持つ勘のよいスタッフであれば問題はでない。しかし、平均的なスキルのスタッフを投入した場合、リーダーの描く設計イメージがスタッフに伝わらないまま、設計を進めていくことになる。難しい設計はリーダーが行い、無難な部分をスタッフが行う。
- 設計が終わり製作段階になると、リーダーは難しい設計を実装していく難しいコーディングに注力し始める。リーダーはスキルが高いので、実装も難なくクリアしてしまう。スタッフは無難なところをコーディングして一見、うまくいっているように思える。
- ところが、なんらかの要因で作業量が倍増した(設計漏れ、顧客の要望、工期の短縮など)ときには、スタッフは増員される。リーダーは難解なコーディングを仕上げる(あるいはデバッグ)するまで忙しい状態が続き、新しいスタッフへの説明もままならなくなる。
- せっかく増員したスタッフであるが、しばらく遊んでいる(仕事が割り当てられない)状態が続いてしまう。単純に工数を浪費してしまい、仕事はすすまず、リーダーが関わっている難しい設計と難しいコードは、他のスタッフには手が負えず素晴らしい設計は屑同然になる。
一見、リーダーに非がないように見えるが、このリーダーはプロジェクト全体の技術レベルを合わせることを忘れ、自分の満足を達成させるために設計とコーディングを行っている。おそらく、リーダー自身には悪意はない。これによって自体はますます深刻になる。
このような技術リーダーの場合には、プロジェクト全体のバランスをとる方法を伝えたほうがよい(トム・デマルコ「ゆとりの時間」より)。エンジン全開は研究プロジェクトの場所にとっておいて、かの人の技術を他のスタッフへ伝承するような役割を認識させるとよいだろう。
- 普通のプロジェクトでは技術レベルを下げ、平均的なスタッフでも理解できるような全体の統一が取れた設計に仕上げる。また、新しい技術は、あれこれと含ませずにひとつのプロジェクトではひとつだけに留める。
- コーディング時には、ペア・プログラミングのように技術スキルをスタッフに直接伝えられるような手法をとっていく。リーダーだけが技術レベルがトップであっても、他のスタッフがフォローできないコードを生み出しても保守性に欠けてしまう。フォローアップができる程度の余裕を持たせた製作を行う。
- スタッフが増えた場合には、リーダー業務に専念する。ややスキルの低いスタッフをフォローアップしたり、プロジェクト内で壁になっている部分の突破口を開いたりする。その後の仕事はスタッフ自身に任せる。
自称スター型のリーダーは、好きなことができない手かせ足かせを感じるだろう。しかし、技術を相手に伝えることができないのであれば、その技術はリーダーひとりでしか活用できない、死んだ技術でしかない。常に新しい息吹を吹き込んで、イテレーションにより再生可能な技術にするためには、自らが育て上げた技術を伝承していくことが必要になる。
スタッフとリーダーとマネージャ
よく聞かれる人材育成の方法として「現在の立場よりもひとつ上の役目を要求する」というものがある。たとえば、リーダーではないスタッフに対して、リーダーが行う仕事(品質管理やスケジュール調節)を要求したり、マネージャではないリーダーに対して、マネージャが行う仕事(顧客交渉、金額ベースのスケジューリング)を課したりする。
これは弊害が多い。特に無難な小規模のプロジェクトではよいのだが、中規模以上のプロジェクトでは、スタッフはスタッフの仕事(コーディングや試験や設計)、リーダーはリーダーの仕事(プロジェクトの進捗管理や顧客の要件分析、スタッフのフォローアップ)、マネージャはマネージャの仕事(顧客との金額交渉、スケジュール交渉)があるので、リーダーがマネージャの仕事をすれば、リーダーが忙しくなり、スタッフがリーダーの仕事をすればスタッフが忙しくなりすぎて、それぞれに課せられた任務をまっとう出来なくなる。最終的に、マネージャは余った時間を何に使っているのかと見れば、コーディングをしていたりする。これでは本末転倒である。
人材教育はOJT目標などを使って計画的・明示的にプロジェクト内に組み込まれたほうよいし、そうすることによってそれぞれの仕事分担が明確になるし、誰がどの役割を担っているのか、誰が越権行為を行っている(プロジェクト全体の調和を乱そうとしている)のかが、わかるようなる。
おそらく、キャリアパスがスタッフ→リーダー→マネージャという一本しか用意されていないのが、デスマーチを作っている最大の要因かもしれない。会社が全面的に悪いとは言わないが、営業スキルを求められるマネージャタイプのパスだけではなく、ソフトウェア職人気質のような技術指向のプログラマのパスや、広くスタッフに教育を行うための指導スキルを持ったパスなど、各人においての長所が利用できるようなキャリアパスがあれば、現在のようなスタッフが最下位で、マネージャが最上位というヒエラルキー的な弊害を避けることができると思われる。
スタッフからマネージャまでを含めて、相互に協調できる形でプロジェクトを運営し、デスマーチ状態から脱出できるのが、役割分担型のプロジェクト運営である。