設計にどれぐらい時間が割けますか?
このところ、かなり急ピッチでソフトウェアを書いていますが(皆さんにも使えるように、世の中にちゃんと出て行くといいなぁ、ほんとに)、皆さんは設計にどれぐらい時間を割くでしょうか?
普通、いまどきのソフトウェア開発だと、設計とそれ以外の時間の配分を決定することなど、おいそれと出来ないのでしょうが、決定権があるのでしたらどのような比率で行いますか?
私の場合は研究だという理由もあるのかもしれませんが、どちらも完全に自分で今は決められるという、ある意味で幸いな立場ですが、とにかく時間が無くなりました。
昔から私が一人でコードを書く場合には、8:1:1ぐらいで8の時間を設計に割り当てます。1でコーディングして、1でテスト・デバッグです。まぁ、それぐらい設計に時間を使っておかないと、あとで悲惨なことになることは目に見えていたりするのです。
ところが、時間がなくなってくると、設計もそこそこにとにかくコーディングをするということが、ここに来て増えました(というか、今の仕事になってからそういう傾向が強くなってしまった)。もうこうなると最初の出来は、相当不満があるので、結果反復的な開発にならざるを得なくて、リファクタリング(全く都合の良い言葉だ)の連続になります。悪くない方法なのかもしれませんが、これだと、どうしても局所最適解に陥りがちで、本当に良いアーキテクチャにはならないように思えるのです。 そうすると、そのアーキテクチャで行くところまで行って、限界が来たら、全部作り直すという事態が生まれてきたりします。
まぁ、もうそういうものなのかなと思ってあきらめていますが、突貫工事で作って本当に時間が節約できているのかなぁとか思ってしまう日々です。とはいえ、さっさと動くものを作るためには、設計の時間しか削るところは無いので(コーディングはどこまで行っても作業に一定の時間を食ってしまいますから)、仕方が無いんですけどね...
設計って、ソフトウェアの将来に対する拡張があればあるほど、難易度が格段に上がってくるものです。要求がはっきりしていてclosed endなものであれば、それなりの設計でも動いてしまいますが、そうでないものは、設計が悪いと、まったく先に進めなくなってしまいます(実際そういうものを初期のIIIMF serverでメンテして気が狂いそうになった)。
つまり、ひどい話ですが、先のことを考えなければ、設計はどんどんいい加減に出来ると言うことを意味します。まぁ、ソフトウェアが使われる時間も短くなってきているし(ほんとか?)、それでいいのかもしれませんが、なんだか個人的には割り切れないものを感じていたりします。もう少しこの話題は掘り下げてみたいと思います。