「技術的負債を設計スキルで解消しよう」なんて思わなくなってる

ここ20年ずっと大規模ソフトウェアを開発してきて、特に最近はクソみたいなプロジェクトに3~4回連続で関わっているので技術的負債を解消どころかどんどん負債を作っていくだけの毎日となっている。

 

 

きっと若くてデザインセンスのあるような人が後から見たら僕が関わったコードはひどい設計で技術的負債がいっぱいでそして「俺なら全部作り直してクリーンな設計で保守性のあるコードにできて今後のメンテナンスも属人性なくできる」みたいに思ってしまったりするのだろう。

でも実際にはそう思った人たちが作っても、全然うまく動作するプロダクトを作れなくて、でもローンチが迫ってくるのでなんとかしてくれる奴を募集して、それで毎回プロダクトはなんとかできるんだけどだいたい汚い感じになっているので、次に、どうやら全部を作り直したくなるのでこれを繰り返してしまう、ということのようだ。

 

 

全部作り直したくなる理由はわりと簡単で、最後になんとかした人たちは外注で、「俺なら全部作り直してクリーンな設計で保守性のあるコードにできる」と思った人たちは完成させれなかったくせにそれを反省せず、最後になんとかした人たちの「技術力が低かった、あるいは旧態依然とした開発スタイルで開発したのが原因」みたいなことを大きな原因の一つとして掲げてしまうからなんだ。

じゃあ次は新しい開発スタイルで最初から最後までやろう! って結論になるだろ。

 

でも実際には違うんだ。新しい開発スタイルでいけると思ったくせに開発失敗したから旧態依然としたスタイルの組織にお願いせざるを得なくなってしまったんだ。なぜ失敗したんだ? これも簡単で素人ばっかり集めたからだ。素人って言うと言い過ぎか。でもちょっと知ってるくらい(僕らのプロダクトの20%くらいを知っている程度)のくせに「完璧に理解した」と思い込んでる人たちがだいたい偉そうにしてるんだ。

  • 開発期間が3~4年にわたる超巨大なプロジェクトの、全体のごく一部分だけを1年間担当しただけの人が経験者として厚遇されたりしている。ずっとかかわってきたと主張している人たちもやっぱりごく一部分だけしか見ていない。上流しかやってない人とかは最後にどのようにしてどれくらい膨大なリソースを費やして細かい仕様をFIXさせることができたのかがわかってない。
  • そしてそんな人たちが音頭を取って決めた開発プロセスはもう最初から破綻しているんで、そこに期待をもって集まってくる人たちも当然素人が多い。
  • 結果的に「誰でもいいから完成させることのできるやつ」を血眼になって探して、そいつらには「リソースが足りないならいっぱいアサインしてやるから(ただし技術レベルは問えない…緊急事態になっているので抱き合わせでいろんな奴が来てしまう)とにかく完成させろ」という指令が下るんで、全体のレベルが低くてもなんとかできちゃうプロセスを採用せざるを得なくなる

こんなのトップマネジメントの問題以外の何物でもない。だれか一人が設計力を磨いたところでどうしようもないだろ。だいたいこのレベルになってくると、もう採用する技術についても「どういうレベルの技術者なら集めることができるから、その人たちにも扱えるxxを採用しておくか」みたいな判断が必要になるはずだし、「末端は遅いPCを使わされているからこの重いツールの採用はしちゃダメだな」みたいなどうでもいいことにも気を配らないといけない。

だんだん話がそれてきた。とにかく巨大なプロダクトで全体がわかることなんてほぼないので、「完璧に理解しているエキスパートチームを集めて最初からクリーンに作る。しかも期限内に」というのは、人類には不可能なのではないだろうかという気がしている。僕らにできることは、メインストリームに向けては「一度血反吐を吐いて作られた完成品を、そのまま継続してメンテしていく中で部分的にきれいにしていく」ということだけだ。

そして本当にきれいなものが作りたければメインストリームじゃないスカンクワークみたいなところでちゃんと完成品に近いところまで機能を作り込んでいくべきだ。だいたいみんな、それをやっているつもりだったんだ。でもだいたいにおいてそういうプロジェクトって「2年でほぼ完ぺきに動作するプロトタイプを作って見せますよ」と宣言させられて、でも2年後には良くて全体の5%くらいしかできてなくて(だってプロダクトを作るリソースの1/20くらいしか投入されてないからね)、なのに「もう技術的にはほとんど完成してるんです」と宣言せざるを得なくなって、上層部が「なるほど技術的にできているんなら次のメインストリームはこいつをベースにしよう」って判断してしまい冒頭の流れになる。やっぱりトップマネジメントがクソだとしか言いようがない。

 

 

でもたぶん「旧態依然としたプロセスでデスマーチを繰り返している組織」vs「新しいプロセスと新技術でそれを一新しようとする組織」当然前者は疲れているし難しいことをいっぱい経験してきているし平均年齢も高いので保守的なことしか言えず、後者は難局にあたった経験が少ないために自分達の優位性を声高らかに主張してくる。日本の組織の経営陣がここで前者を選ぶのは難しいかもしれない。