「ソフトウェア開発ファシリテーション」アドベントカレンダー11日目の記事です。
「ソフトウェアは変化に対応できるから『ソフト』ウェアなんですよ」
というのは、私自身もよく言う言葉なので、
「ソフトウェアっていつでも直せるんでしょ」
とよく言われる訳ですが、それには一つ前提があります。
それは「そのソフトウェアがメンテナンスされ続けていること」です。
メンテナンスし続けないと「ソフトさ」を維持できない
例えばサーバ上で動いているソフトウェア。
ソフトウェアは一つのプログラムだけで動いているわけではなく、効率よく開発を進めるためにアプリケーションフレームワークを使っていたり、データを効率よく扱うためにリレーショナルデータベースといったソフトウェアと連携していたり、動的言語を利用している場合はそのコードの実行環境が動いていたり、もちろん大元にはOSが動いています。
お手元のPCやスマホのOSがどんどんバージョンアップされていくのと同じように、サーバ上のソフトウェアもどんどんバージョンアップされていくのが通常です。
とはいえ「バージョンアップをしない」という手段を取ることも可能です。そうすると、どうなるか?
よくOSバージョンアップの際には「セキュリティアップデートのために必要です」と書かれていたりしませんか?
あらゆるネットワークから完全に孤立している場合を除いて、サーバへは何らかの手段で到達は可能な状態になっていると思われます。そのためセキュリティへの対策というのは日進月歩で、当然多数の人に使われるミドルウェアやOSなどのソフトウェアは定期的にアップデートが入るわけですね。つまりバージョンアップをせずに放っておけば、自然とセキュリティ面でのリスクは高まっていくわけです。
もちろんセキュリティだけではなく機能面でのバージョンアップも進んでいきます。機能面でのバージョンアップの際には破壊的なアップデートと言って、これまで使っていた機能の使い方が変わることもあります。放っておけば放っておくほど乖離が激しくなって、バージョンアップすることが困難になります。
アプリケーションフレームワークもどんどんバージョンアップしていきます。私が主に利用しているRuby on Railsというフレームワークは、ほぼ毎年のペースで大規模な変更が加わっていきます。コツコツバージョンアップしていればそこまで大きなインパクトはないのですが、数個バージョンが離れたものを一気にバージョンアップするのは、さすがに骨が折れると思われます。
つまりソフトウェアは放っておけば放っておくほど、外部環境の変化によって手を入れた際の影響範囲が大きくなっていくため、手を入れづらくなっていくわけです。
だからこそ、例えばいったん機能を作りきって1年ぐらい放置してから「二次開発」みたいな形で再度開発をスタートするような計画はリスクが大きいのです。
運用するからにはコツコツとバージョンアップを継続する。
そうでないとソフトウェアは、変化にいつでも対応できるという「ソフトさ」を維持できないのです。
一方で「ソフトウェア開発のファシリテーションで、どうして開発の中の話が関係するの?」と思われるかも知れませんが・・・こういったソフトウェア開発における前提がない状態で話を進めても、結局は絵に描いたモチで生々しい話に対しては無力だと思うのです。ソフトウェア開発を進めていくにあたっての生々しい話を適切に共有しながら場を前に進めていくことも、ソフトウェア開発のファシリテーションにおいては大事な話だと考えたので、本日はこのお題を取り上げました。