Fight the Future

Java言語とJVM、そしてJavaエコシステム全般にまつわること

システム開発を「誰でもできる」ように細分化はできないんじゃない?

大規模システム開発前提かも。

分割

システムをサブシステムに分割して。
サブシステムを機能に分割して。
機能を画面に分割して。
画面をUIとビジネスロジックに分割して。
設計と実装を分割して。


「誰でもできる」ように細分化するってのはここではそんな意味で。

「無から有」への変換

なんかうまく言えそうにもない気がするけど書いてみる。
自動車製造をシステム開発のアナロジーに使うけど、
部品を組み立てていく物理的な作業と、設計やプログラミングは同質の作業じゃないと思う。


要件定義にしろ設計にしろプログラミングにしろ、どこかに「無から有」への変換がある。
そういった作業を「誰でもできる」ようにしようとした時点で、その作業は事務的な作業になる。
事務的な作業となった時点で、「無から有」への変換は定型的なものになる。
事務的な作業となった時点で、作業者は自分の作業しか見えなくなる。つまり最高でも部分最適にしかならない。


設計する人と実装する人が違うことでよく問題が起こっているけど、ここではそれは触れないでおく。


細分化することで作業が事務的になることが問題だと思う。
大規模であれば細分化は必要だ、って意見ももっともなんだけど、なんていうか。。。

コスト

そのシステムは本当に全機能一斉に作り始めて一気にリリースしなければならないの??


フィードバックってやつは本当に大切で。
インクリメンタルに同じシステムを作ってもそんなに期間は変わらない気がする。
(気がするってだけじゃダメなんだけど。データで実証したいなあ。)
一斉に作るシステムは無駄なコストが多いから。


まず人数が多いってだけでコミュニケーションコストが膨大。
諸費用も膨大。プリントアウトする紙のコストもいくら削減してもけっこうある。
そもそもその人必要なの?っていう人件費。
機能間の整合性を合わせるだけでコストがかかる。
そもそも会議は10人が2時間やると「10 * 2 = 20」で2.5人日のコストがかかるんだぜ。

結論

僕は事務的な作業をずっとやるのはつらいw
もちろんできる限り一生懸命にはやるけど。。。
仕事があって、お金をもらえるだけ恵まれているって自分でも思うけど。


それでもあと何十年も仕事するんだ。
イヤイヤなんてやりたくない。
しんどくてもいい。何か充実感があれば。


やっぱり、突き抜けるくらい自分をレベルアップさせるしかないって結論かな。