エンジニア歴20年のおっさんが語る、いろいろな経験やこれからのソフトウェア業界についてです。

第6話 マネージャもプログラムを書け!

»

 プロローグで書いたように、わたしは立場的にはPMです。正確にはPM相当でしょうか。SIerではないので(受託開発はやりますが)、顧客からの要求というものはほとんどありませんが、規模は大きくないので企画や開発計画から設計、間に合わないと思えばプログラムも組みます。営業からの要請があれば資料も作ります(実際はなくても作っていますが)。責任がついてまわるのでPMですが、実際は何でも屋です。

 わたしのことはさておいて、一般に上流といえばPMやSEでしょうか。SEは「上流SE」なんていうこともありますが、今回は言葉はともかく、要件から機能設計段階までを担当するエンジニアを対象にして「上流エンジニア」で統一することにします。それ以外は一般エンジニアとします(下流という表現は好きじゃないので)。

注意!

 今回も以下の文章はあくまでわたし個人で感じていることであり、大多数のエンジニアについていっているわけではありません。それを理解して読んでください。

■誰が火をつけるのか

 プロジェクトが火を噴いてデスマーチになるケースは、残念なことに決して少なくありません。デスマーチまで行かなくても「やべー」と思うことは上流エンジニアをやっていればよくあることだと思います。それだけ今のシステムは複雑になっています。

 工程的に「要件」「設計」「製造」「試験」と段階を踏んだ場合、デスマーチになる要因はどこの工程にも潜んでいますが、確率から言えば「要件」と「設計」部分が大半だと思います。ただ、「製造」と「試験」の段階で表面化する事が多くて、スケジュール的に一般エンジニアの人たちがその犠牲になります。

 これを踏まえて考えると、一般エンジニアの人が上流エンジニアの人たちに文句を言いたくなるのは当然だといえます。上流エンジニアのプログラムに対する理解度が低いため、設計の精度が落ちているのです。

 システム開発全体で考えた場合、上流と一般では必要とされるスキルが異なります。上流ではプログラミングスキルよりはコミュニケーションスキル(顧客から要望を聞いて要件を確定させるのに必要)やリーダーシップ、業務知識、そして全体像を把握するためのIT関連全体の知識が必要となります。ソフトウェアという部分を切り出せば、広く浅く知識が求められます。一般の場合は設計されたものをプログラムに落とし込むので、言語やプログラミングスキルが必要となります。反面、自分の範囲以外は分かっているのが理想ですが、必須まではいきません。つまり狭く深い知識が求められます。

 この両者の違いがお互いに理解されないからか、プロジェクトに火がつき始めると、どこからともなく上流は一般エンジニアのスキル不足を責め、一般は上流エンジニアのプログラムに対する理解の低さを責めます。客観的に見ると非常に不毛な争いとなり、論点がズレ始めます。

■ベストよりベターを目指せ

 これは全体の要件をまとめるときに必要な考え方だと思っています。一生懸命なPMほど顧客満足度の向上を目指してよりベストな選択を模索します。方向としては決して間違っていないと思いますが、ボランティアならともかくビジネスですので、どこかで妥協点が必要です。

 社会情勢もあり、最近ではIT関連の設備投資はかなり鈍いです。ただ、システム化は必要なのでニーズは必ずあります。その時、ネックになるのはやはり「費用」です。顧客側からすれば少しでも安く、SIer側からすると少しでも高く、この点だけは必ず反目します。だから、顧客側は費用対効果が一番高そうなところで、SIerは機器のグレードやオープンソース、必須以外の機能削減を行い、お互い妥協点を探ります。これがベターです。

 PMにはもう1つ考慮する点があります。それはメンバーへの配慮です。納期までの期間が短いと、それだけでデスマーチになりかねません。少なくともそこは何とかすべきです。顧客と上手に駆け引きできないPMはそれだけでプロジェクトを破綻させかねません(顧客の言いなりになりかねないため)。このあたりが一般エンジニアと大きく異なるところだと思います。

■プログラミングスキルは磨け

 PMにプログラミングスキルは不要かと聞かれれば、わたしは迷わず「ノー」と答えます。よく考えればこれは当たり前のことで、業務手順を最終的にプログラムロジックに落とし込むわけですから、そのプログラムを知らないと、とんでもない要件や設計が出来上がります。しわ寄せは言うまでもなくPGへ行きます。無理なことは逆立ちしても無理です。

 わたしは要件や設計をしながら絶えず頭でロジックに落とし込む作業をします。お客様と話をする時も、よく頭の中でロジックを組みながら話をします。やっていることはPMやSEですが、考えていることは常にPGです。要するに打ち合わせが終わっているころには、ほぼ方針がきまり、設計が終わると頭の中ではロジックができている状態になります。ですから後からSEやPGが「これは無理です」と言ってきても、やり方や方針をきちんと伝えられます。これができなくなるとSEやPGの負担が増えます。方向性を間違うと品質は確実に落ちて、その責任は結局PMに来ます。

 正直、いまのSEやPGを見ていると、前回書いたようにやや想像力が乏しいと感じます。ついでに柔軟性もあまりなく、なぜか若くても頭がガチガチの人が多いです。でも、だからといってそれを言ったら軋轢を生みます。ですからプロジェクトを成功に導くためには、PMがそれを理解してそれなりに対応すべきです。当然、全員がそうではないので、メンバーのスキルや性格に応じて上手に導いてやることが必要不可欠です。そのためにプログラミンぐスキルは必要だと言えます。プログラムを理解できないPMをPGはあまり尊敬しません。

 よく、システム化に際して保守性(運用性)を理由に自分のスキルの低さを隠すPMがいます。保守も運用もシステム化の一部であり、開発の延長線上なのでPMの立場からするとおざなりにはできません。でも、だからといって何でもWebアプリ、顧客が知らないからVB6、誰も理解できないからSQLは簡潔に……うんざりです。プロを自認するならベターで選択した要件をベストなスキルで完成させるべきだと考えています。安易に楽な方に逃げても顧客の求める品質には届きません。遅かったらスケールアップだなんて、素人でも考えつきます。それで済めばシステム要件なんて決める必要ないです。最初からハイパフォーマンスなマシンにすれば良いだけですから。

 もし、顧客がどうしても、と言うなら、メリットとデメリットを並べて、それでもと言うならそういう選択もありだと思います。でも、本来はシステム化することによって得られるメリットが少しでも減るのなら、PMは顧客にそれを訴えるべきです。運用が不安ならきちんと運用手順を示して教育するべきだし、保守性がと言うならやはり資料を作成して教育すべきです。その手間をPMが惜しみ、安易に妥協して後から追加料金を取るのは悪徳商法となんら変わりません。SEやPGに高スキルを要求するなら、PMはそれ以上に高度なスキルを持つべきです。コミュニケーションスキルとリーダーシップだけでは顧客満足度を上げることは到底無理です。

■理屈だけではプロジェクト管理はできません

 最近はプロジェクト管理やソース管理、バグトラッキングなどが容易にできるツールがたくさん、しかもオープンソースで手に入ります。それに伴いプロジェクト管理の本なども出てきて、個人的にはいい時代になったと思います。

 でも、これらのものが便利すぎるあまり、PMが管理に対して過剰になりすぎる傾向が見えます。これらはツールなので手助けと考えるのは良いのですが、必須と考えると非常に窮屈です。言ってしまえば理屈だけで管理しようとします。

 「管理」するにあたって一番ネックになるのは何だと思いますか? 実は「人間」だったりします。どんなにいいツールを使っても、どんなルールを作っても、それを履行する人間がいい加減だったら何の意味もありません。管理はさせるものではなく、するものです。そのための手助けをツールに委ねます。

 最近のシステムは複雑化しています。なかなか一筋縄では開発はできませんし、管理も大変です。そのためにいろいろな手法やツールが考え出されているのですが、管理の根本部分を置き去りにしてしまうため、それがすべての至上主義になってしまいます。

 本当はツールなんて何でも構わないと思います。ちゃんとPMが「管理」できれば。

 プロジェクト管理の基本だと思っているのですが、(少なくともわたしは)進捗は必ず自分の目で確認します。人間誰しも怒られたくありませんし、保身を考えます。そうすると自己評価が非常に甘くなり、進捗報告でも隠します。特に今は「分からない」と言い出せないエンジニアが増えているので余計です。後になって結局「できていなかった」となるとデスマーチに突入する可能性大です。これは本人も悪いのですが、管理しきれないPMの責任でもあります。

 PMはプログラムの細かい部分はPGの仕事であって、PMの仕事ではないと思っている人も多いでしょう。でも、それとプログラミングスキルは別の話になります。実際、細かい部分を知らないと何かあった時に対処できません。わたしは途中経過でプログラムを動作させておかしいところは必ずコードを調べ、担当者に聞いて修正をお願いします。全部を闇雲に見るのは現実的ではないので、担当者単位で差分を取るようにしています。

 ちなみに、不可解なコードを見つけても担当者に聞きます。あら探しはしませんが、見つけてしまっては放置できません。前回も書きましたが、頭ごなしにダメ出ししても絶対に受け入れてくれないので、まず意図を聞いてその上でマズかったらどうしてマズいのか話した上で修正してもらいます。PGは自分の範囲で仕事をします。でも、時々他に影響が出そうなコーディングをする時もあります。分業なので、何でも管理してダメ出しするのは逆にPGやSEのやる気を削いでしまう危険性があり、注意が必要ですが、ダメな所はダメと言わないとそのエンジニアのためにもなりません。逆に時々、褒めることも忘れずに。

 わたしは仕事をする時は常に楽することを考えます。これはサボることではなく、負担を減らすことを意味します。その上でいつも後輩に対して自分と同じレベルかそれ以上にスキルを引き上げることを考えています。時々、手柄を独り占めしたくて自分の技術を教えたがらない人がいますが、わたしは非常にもったいないと思います。周りのメンバーのスキルが上がれば、それだけ自分の負担が減って、結果的にプロジェクトはスムーズに回ります。技術なんて大事にしていてもすぐ古くなりますし、これだけ情報が溢れていれば誰かが公開してる可能性の方が高いです。

■エンジニアの前に人同士

 最近の20代から30代はキレやすい、って記事が出ていました。でも実際は、下から上までそれこそ老若男女問わずイライラしている人が多いと感じます。電車に乗っても車の運転しても、余裕のない人が増えたと実感します。

 プロジェクトもそうです。わたしは、エンジニアは技術的なことで議論したりケンカするのは良いことだと思っています。でも、それを人間関係に持ち込むのは良くないと思います。要するに、本当の喧嘩はマズいですが、切磋琢磨は必要だと考えています。

 確かにPM、SE、PGで立場が違うので、それぞれ思い通りにいかないとイライラするでしょう。本当はそうではなくて、相手の立場を考えて行動することがプロジェクトの炎上を防ぐ一番の近道だと思っています。わたしはPG、SE、PM、どれも経験しているので、どれが偉いとか思うのはナンセンスだと考えています。どのポジションでもそれぞれに悩みも誇りもあります。ですから、相手を責める前に、まず相手を理解するようにして欲しいと思います。

 PMでもプログラム経験が浅いならまず自分で組んでみることです。いかに今のシステム開発が複雑なのか理解できるでしょう。SEはどうしてPMがこのような要件で設計するのか考えてみてください。機会があれば一緒に顧客との打ち合わせに参加させてもらうのをオススメします。PGなら自分で機能だけ見て設計してみてください。プログラム技術だけでは難しいことがよく分かると思います。

 1人で完遂できるプロジェクトはごくわずかだと思います。いろんな立場の人が参加しているにはそれなりの理由があります。自分だけがつらい思いをしていることはまずないので、それを常に頭に入れて自分が持っている最高のパフォーマンスを発揮できるように頑張って欲しいものです。それがこれからエンジニアを目指す人を増やすための原動力だと思います。

 次はちょっとこのシリーズはお休みして、せっかくお題をもらったので勉強会やカンファレンスについて少し書こうと思います。

Comment(14)

コメント

インドリ

今回も問題を的確に指摘しているいいコラムですね。
何度も我が意を得たりと頷きました。
さらに程度が悪い上流技術者になると金銭感覚もまったくないんですよね・・・
ソフトウェアの原価管理すらしていない会社が結構多く、
経営や管理がもう行き当たりばったりだったりします(本人は考えているつもり)
そんな事では赤字とデスマーチばっかりで会社は維持できません。
私はそこも気になります。
何故上流のプロなのに金が計算できないのかな?
上流は簿記の知識ぐらい持っていて欲しいです。
おそらく、経営層も経験しているにゃん太郎さんも気にしている事かと思います。

saki1208

重ね重ね申し訳ないのですが、連投します。

私は趣味でとあるスポーツをやってますが、練習するときはいつも同じ状況が100%
こなせることを目指して練習を行います。なぜなら、試合など本番の舞台では緊張し
たり、その他いろいろなプレッシャーの影響で練習で100%こなせる内容でも80%程
度の成功率に下がるからです。
# 100%以上でないとこなせない内容をこなせる確立はそのときの集中力次第で、上
# 級者も下級者も大して違いません。地力の違いが多少影響するだけです。

仕事でも同じに考えていますが、100%で燃え尽きる覚悟で出来ることと80%でリス
クを考慮しながら余力を持って作業できる状況では異なってくると思います。
結局、いつもいっぱいいっぱいではいい仕事はできませんし、心に余裕を持ってい
ないとどこかであり得ないミスをします。

プロジェクトの参加メンバーに対してそういう風な雰囲気に持って行けるような
人になりたいなぁといつも考えています。

# ちなみに、根本は「もっと楽に仕事したいw」ですかね。やっぱり。
# 少し傲慢な気はしますが、自分が楽になる状況では他のプロジェクトメンバー
# も今よりもっと楽になると考えており、そのための努力を惜しむ気はありません。
# 今まで私が通ってきた道を後輩たちも間違いなく歩んでいるのですから...
# 同じ苦労をする必要は無いと思います。もっと前向きにもっと良い方向に意識を
# 向けてもらえたらと...
# 上層部には中々受け入れてもらえないけど。

にゃん太郎

インドリさん、ありがとうございます。

> そんな事では赤字とデスマーチばっかりで会社は維持できません。

 おっしゃる通りです。お金(原価管理)や経営に関しては何回か後にコラムで
書こうと思っています。個人的にはプロジェクトで赤字が出てから悩む人が多い
のが気になります。悩むならその手前で悩まなきゃ。ソフトウェア開発では人件
費という一番不確定な要素の割合が一番高いのに管理してないとは・・・どうい
う事?

にゃん太郎

saki1208さん、ありがとうございます。

 先の投稿、削除というか非表示にしておきました(そういう権限は一応あるみ
たい)間違いとはいえ、削除はどうも気分的に…

 頑張ることは大事ですが、頑張り所を間違えている人は多いと思います。上流
に行けば行くほど本当は余裕が必要だと思うのですが、たいがい上があたふたし
て下にハッパかける構図になります。

 おっしゃる通り、後輩が同じ苦労を(この場合、する必要のない苦労かな)す
る必要はないですし、ラクとは言わないまでも神経すり減らさざるを得ない状況
は間違いなく優秀な人材を潰します。その損失はなかなか埋め合わせが難しいと
思います。

 インドリさんのコメントではないのですが、もう少し「原価管理」をちゃんと
やれば分かりそうなもんですけどね。

saki1208

saki1208です。

>おっしゃる通り、後輩が同じ苦労を(この場合、する必要のない苦労かな)す
る必要はないですし、

そうですね。逆に必要な苦労なら多少原価オーバーしてもしてもらいたい。w
# 最近の風潮では会社的に許してもらえませんけど。

ビガー

ビガーです。

火を噴いたプロジェクトを幾つか鎮火してきましたが、それらに共通することは何を信じていいかわからない状態になってしまった状況だと思います。
上流では要件の優先度も範囲もぶれている、一般(実装側)では機能間の関連の定義があいまいで機能の結合段階で誰の責務かを明確化できないなどがあります。

各人のスキルが比較的高い場合は、上記のようなことは起こりにくいですが、フリーで委託を受けていると相当数そういった状態になっているプロジェクトは存在します。委託での限界は、大体が鎮火できたら基本的に契約終了なので、ノウハウやある程度のフレームワークは残せるけど、実行する人次第でまた同じように火を噴いてしまうという状況が起こりえます。(実際社員さんからの残念なお知らせがある場合が。。)

社内の事情や文化、にゃん太郎さんのようにコントロールできる人がいないなどのいろいろな問題があると思いますが、委託での限界を感じる瞬間です。

インドリ

私もフリーなのでビガーさんの気持ちよく分かります。
それ本当にそうですよね・・・
虚しさを感じる時が多々あります。
火消しとして呼ばれているので改革を試みますが、
自分の身が可愛い駄目社員からは敵視され、成功しても誰にも感謝されず、
おまけに馬鹿社長が火の元である社員のいう事を鵜呑みにして来る始末・・・
かといって、要求定義から運用保守まで全て丸投げされてもしんどいです。
本当に火がついたついたプロジェクトは人を不幸にします。
それにも関わらず、何も考えずにデスマーチを繰り返す経営層や管理層に疑問を感じます。

にゃん太郎

ビガーさん、ありがとうございます。

 プロジェクトが火を噴くという事は当然上から下まであっぷあっぷな訳で、そん
な状態から鎮火するにはビガーさんやインドリさんのような方が呼ばれる訳です。
身近に鎮火してくれる人がいないからそうなるのは必然でしょうね。

 でも、みんな喉元過ぎれば・・・と言うか早く終わらせたい、終わったら「やっと
終わったー」と開放感に浸りますが、根本が何も解決していない事に気がつかない
ため、何度も同じような状態になるのは当然です。技術は絶えず変化していきます
が、ノウハウは常に蓄積し次に生かす事で意味が出てきます。そう言った事に経営
者も含めた上の連中が気がつかないのであればいつか淘汰されてしまいます。

 私も割と火消しをする方なのですが、年々炎上の仕方が激しくなると感じます。
知らない、考えない、動けばよしの考え方が結合試験あたりから品質として表面化
します。そうなるとほぼ手遅れの状態すらあります。ひどいと納品日から数ヶ月経
っても納品できる品質にならないケースもあります。なまじ動くから顧客も担当者
もあと一歩と思うのでしょうが、よくよく見ると設計からおかしいケースが多々あ
ります。そこに気がつかないエンジニアがいる事がコワイ事ですし、そんな状況で
頑張っても一生納品できる品質にはなりません。悩み所は多いですね。

kuma

今回も興味深く、拝読いたしました。

人のつながりなので「思いやり」が大切なのだと実感します。
でも、余裕がなくなるとできなくなるんですよね。

コメントにあります、「原価管理」で思い出しましたが、
会計の工事進行基準についてはどうお考えでしょうか?

個人的には、今までの慣例と異なるので、契約を大きく
変える必要がある気がします。

にゃん太郎

kumaさん、ありがとうございます。

> 人のつながりなので「思いやり」が大切なのだと実感します。
> でも、余裕がなくなるとできなくなるんですよね。

 ここが一番なんですけどね。一度どこかに亀裂が入ると修復が難しいと感じま
す。誰もが分かっているとは思うのですが、開発現場では自分の事で精一杯になっ
てしまうのも致し方ない面はあります。それをうまくPMやSEでコントロールしてく
れれば・・・と常々思ってます。

> 会計の工事進行基準についてはどうお考えでしょうか?

 個人的には理想であるが難しいのかな、と思っています。正確な見積と信頼性の
あるコストや進捗・・・言ってしまえば上流でちゃんとしましょうって事なんでしょう
が、それが出来れば赤字プロジェクトやデスマーチは起こらないと思います。

 大企業なら次のプロジェクトや他のプロジェクトで穴埋め可能かも知れませんが
(本筋としては間違っていますが)中小ではそうも行かないでしょうね。顧客も途
中でなかなか支払いづらいでしょうし。最終的にプロジェクトが失敗したらそれこそ
訴訟になるケースも出てくるでしょう(あったような気がしますが)

 決算書に計上する売上に仕掛かり中のプロジェクトが反映されないため出てきた
要望だったと記憶していますが、そもそも途中段階のソフトウェアに売上げだけの
価値があるかと言えばそれもまた疑問です。

 とは言うものの、そうしなくちゃいけないので契約は分けてやるんでしょうね、
きっと。

ビガー

>そう言った事に経営者も含めた上の連中が気がつかないのであればいつか淘汰されてしまいます。
おっしゃるとおりです。ただ、エンジニア主体での啓蒙活動が必要と考えています。
そのためにも上流の技術は必須なのでこれからのエンジニアはそこを含めてキャリアを創っていくべきだと思います。

友ぞう

にゃん太郎さん、こんにちは。
友ぞうと申します。

にゃん太郎さんのようなPMの下でプロジェクトができれば幸せだろうなと思いました。SEやPGを見下したりせず、対等にそして全体をきちんと見てくれる。
本来あるべき姿なんだと思います。

管理のためのツールの話の部分で、なんのための管理なのかということを
忘れている人が多いと思います。(自分のまわりのことですが)
本来、プロジェクトを無難に終わらせるため(ちょっと言葉おかしいですか・・・)にあるべきなのに、管理自体が目的になっていることがありますよね。
上司に報告するための管理。
そして、ツールがあるんだから簡単に管理できると思っている上司。
私たちは密かに、顧客満足度ではなく部長満足度のための管理と呼んでいますが。

メンバーはその管理のための報告に時間をとられ、作業時間を削られています。
それなのに、コスト削減を口にしたりして。
矛盾した話です・・・。

あ、すみません。つい愚痴を。
そんなわけで(汗)、にゃん太郎さんのような考え方のPMが増えてくれることを願うばかりです。

にゃん太郎

ビガーさん、ありがとうございます。

 この不況下ではエンジニアも技術だけではなく経営や社会情勢も頭に入れながら
仕事をする必要があると思います。これから先はスキルだけで生き抜いて行けるほ
ど甘くないのかも知れませんね。

にゃん太郎

友ぞうさん、ありがとうございます。

 お褒めの言葉ありがとうございます。励みにしたいと思います。

> 本来、プロジェクトを無難に終わらせるため

 これはおかしくないと私は思います。予定を立てるのも進捗管理するのも、プロ
ジェクトを無難に終わらせる為にする「はず」だからです。

 進捗管理は本来、予定通り進んでいるかとかメンバーに異変(負荷が掛かりすぎ
ていなかなど)がないかを定期的にチェックするために行うものだと考えていま
す。それをどこかで間違えるとメンバーの管理にすり替わり、プロジェクトの進行
が予定通り進まなくなると犯人捜しに発展します。本来はプロジェクトの進行を管
理するものであり、メンバーは管理ではなく良い状態であるかを確認するだけで良
いと思います。遅れているからとメンバーを追い込んでもマイナスにしかなりませ
んし、遅れは他のメンバーにも少しずつ負荷分散して乗り切るようにしないと、ど
んどん離脱者だけが増えてプロジェクトは正常に進まなくなります。

 友ぞうさんのおっしゃる通り、進捗報告に時間をかけるのは本末転倒でメンバー
には進捗報告を考える時間よりは実作業に集中出来るようにPMは考えるべきだと
思います。

コメントを投稿する