人月の壁

昔、誰かのブログで『エンジニアを自称するなら、人月の壁なんて壊してみな』って記事があったけど、今まさに人月の壁にぶつかってるような気がする。当初の見積もりだと1人月で簡単に終わると思ってた仕事が、1.5人月ぐらい(締め切りは変えずに)やってるような気がする。それなのに、やっとコーディングが終わった段階で、テストとかマニュアルはまだ手つかず。正直、あと2週間で終わらせれるか心配になってきた(土日出ないとダメなんだろうなぁ。。。)

ところで、人月を超えるためには、どうすれば良いんだろう? そもそも人月は、1人が1ヶ月働く仕事量。この1人と言うのがミソで、世の中には平均的な人の2倍働ける人もいれば、0.5人分ぐらいしか働く事ができない人もいる。とはいえ、大企業なんかで平均化すると、だいたい1人月100〜120万と言う金額で落ち着くため、簡単に金額を見積もる事ができるので、非常に便利。では、この仕事を量を増やすためには、

  • 1人分以上の働きをする
  • 1日の仕事時間を長くする

出来の悪いオイラは、後者を長くする事で、なんとか1人月を満たしている。でも、優秀な人は、期間が短くても1人分以上の働きをして、仕事を華麗に終わらす。どちらが良いかは一目瞭然なわけで、しかも、前者の方は、『仕事を短時間で終わらす』→『余った時間で自己啓発に励む』→『さらに能力を向上する』と正のフィードバックがかかっている。それに対して、後者は、『仕事が長時間になる』→『翌日寝不足』→『よけいに効率が悪化し、長時間残業になる』と言うネガティブフィードバックになっている。

これをなんとか前者に持っていくためにはどうしたら良いか? ちょうど今やっている事で当てはめると、

  • プログラムのデバッグ
  • なぜデバッグが大変?
  • グローバル変数を使っているために、モジュール間の結合度が強い
  • その場しのぎの命名則になっているため、モジュール間をわたると意味不明な状態になる。
  • ログのポリシーなどが無茶苦茶

結局、上流段階でちゃんと考えないと行けない事をおろそかにしているから、後になって力技で苦しんでる気がする。とすると、問題点は明らかなので、次回からは今回の轍を踏まないようにしっかり方法を検討しないと。