My tech diary

ソフトウェアエンジニアをやっています。技術的内容を中心に調べたことを書いていきます。

ソフトウェア成長曲線

ソフトウェアも生物と同じで、生まれてから死ぬまでの成長のライフサイクルを持っている。

人生と同じで、将来どうありたいのか、そのために、現在どのステージにあり、そのステージで何をすべきなのか、を見極めることが重要。その判断を間違えると、うまく育っていかなかったりする。

成長初期の頃に無理をしすぎると、成長の柔軟性を失って、後々ガタが来る。

成長に合わせて、周りの環境も時代も変わっていくので、あるべき姿を固定しすぎて、方向転換できなくなってしまうと、時代遅れになってしまう。

一方で、まだまだ成長できるはずなのに、ダメだと判断して、一度破棄して、フルリニューアルとかしてしまうことは、すごくもったいない。せっかく、フルリニューアルして作り直した (当然時間がかかる) のに、その間に時代が変わって理想形が変化していたら、本当にもったいないと思う。

以下の図の、各ステージ (フェーズ) で、それぞれどんなことに気をつけるべきなのか、考えてみたいと思う。

software_growth_curve.png

幼年期

あらゆる可能性を秘めたフェーズ。 ぼんやりした作りたいもののイメージは持ちつつも、あるべき姿に関して、厳密に決めすぎないほうがいいだろう。

どのような環境を用意するか、どんなアーキテクチャを用いるか、などを、今ある情報をもとに未来を想像しながら、ざっくりと決めるといい。

この時点で洗練されている必要は全く無い。まずは手を動かして、やってみることが大事。

青年期

ある程度、骨格ができてきて、機能追加という名の筋肉を付けていくべきフェーズ。

いろいろやっていく中で見えてきたこともあるはずなので、良かった点はさらに伸ばしつつ、イマイチだった点については直すなり、切り捨てるなりすることが必要。この段階であれば、必要があれば、モデルチャンジも厭わずやっていくべきだろう。それは、今まで作ってきたものをゼロにするという意味ではなく、培ってきた知識なり経験をもとに改良を加えるという意味である。

その後の伸びしろという意味では、このフェーズが非常に重要で、失敗を恐れずに大胆にチャレンジするといい。

壮年期

まさに働き盛り、脂の乗った30-40代。今まで育んできた能力をフルに発揮すべきフェーズ。

一方で、体のあちこちにガタが出てくるのもこのフェーズ。 大きな病気になったときの影響範囲が広いので、細かい体調管理には十分気をつけたい。

老年期

壮年期ほどではないにせよ、まだまだ生産性を供給できるフェーズ。 とはいっても、もう無理は禁物。まだまだ伸ばせるはずの寿命を縮めることになりかねない。

安定的な運用を心がけながら、スムーズな次世代へのバトンタッチを行うべし。