生き様030. システム開発を考える ~シリーズ:システム開発考(3)~
【設計】について考える
前回に引き続き『シリーズ:システム開発考』として、白柳が考える「システム開発とはこうあるべきだ」という姿を言語化していく企画も第三回目です。
段々、綴っているというよりも、言葉を紡いでいるような…
明確な答えがありそれを記しているのではなく、暗闇を手探りで進みながら答えになりそうなパーツを探して並べているだけ、の様な…
そんな感覚になってきました。
ですがこの感覚、何かに似ています。
そう、【設計】です。
ITに限らず、システム開発というものを考え直すことで、
その手段としての【設計】を見つめ直したいと思います。
- システムとは何か?
- ITシステムを作るという事の意味
- システム開発とは?← 【今回】
- 業務システムとアミューズメント(ゲーム系)システム、開発の大きな違い
システム開発とは
まず、ITに限らずに、【システム開発】という物を見直してみましょう。
何故システムを作るのか?
ITエンジニア視点の話は前回していますね。
でも、今回は社会というか、[システムを利用する人の視点]から考えてみましょう。
例えば、蒸気機関。
石炭を燃やして得られる高熱で蒸気を作り出し歯車を回すことで、それまで風力や水力より安定的に力を取り出せる仕組み。
例えば、発電・送電。
エネルギーを生み出す場所と、消費する場所を分けることで、消費する場所をコンパクトにする事ができる仕組み。
例えば、スマホ。
小型化された電気部品、高速・大容量化されたストレージで、いつでもどこでも簡単に情報に繋がれる仕組み。
これらに共通して見えるものがあります。
それは「既存の仕組みを、新しい仕組みを利用して運用できるようにすること」です。
【システム開発】とは、無から有を作り出すものではありません。
今まであったものに、新しい要素を足すことで、より便利になったものを作ることです。
スマホ以前には携帯電話がありました。
携帯電話以前にはポケベル、固定電話がありました。
固定電話以前には手紙が…
ITシステム開発とは
現代の形のITシステムの歴史は、ここ50年程度の比較的新しいものです。
特に一般企業にITシステムが普及したのは、90年代後半~2000年代前半でしょう。
その頃は、僕がITシステム開発の仕事を始めた時期でもあります。
2000年代前半までのITシステム開発の多くは、手作業で行っていた業務をパソコンを利用してできるようにする、でした。
しかし、2000年代後半からは、既にあるITシステムを新しい環境に合わせて作り直す、という仕事が多くなってきました。
つまり、ITシステムの開発が指す意味は、昔と今では大きく違っている、ということです。
もちろん、2000年代前半までにシステムのリプレイスが無かったわけでも、
2000年代後半以降に、手作業をシステム化するというシステム開発がなくなったわけでもありません。
あくまでも、比率の話です。
手作業からのITシステム化と、ITシステムのリプレイス。
元となるITシステムの有無、人が行っている作業の量。
様々な違いはありますが、それでも昔から変わらない事があります。
それは
ということです。
その為に必要なことは、
- 旧いシステムをしっかりと識ること
- 新しいシステムの目的をしっかりと立てること
この2つに集約されるでしょう。
そして、この2つを行うことが【設計】なのです。
設計という行為で新旧システムに向かい合う
今回僕が言う【設計】は、随分範囲を広く取った言葉です。
一般的には【要件定義】と呼ばれる作業、
【基本設計】【詳細設計】【テスト設計】と呼ばれる色々。
いわゆる【上流工程】。
設計の持つ一般的なイメージは、この範囲の中にあると感じています。
ですが、今回僕は、システム開発全般に存在するある事柄を【設計】と言います。
新しいITシステムを作る時、そのシステムが何をするのか、十分に検討を行います。
- 新システムが担う役割
- 新システムが使う技術
- 新システムの運用
- etc…
「事前に決めておく」でも「やりながら決断していく」でも、同じです。
これらの内容を検討していく中で、新しいシステムとガッツリ向かい合います。
そして同じ様に向かい合わなければいけないシステムがあります。 それは、旧いシステムです。
- 旧システムが担ってきた役割
→ 当初とのズレはないか?新システムが正しく継承できるのか? - 旧システムが使う技術
→ 新システムで使用する技術との差は?旧システム導入時の技術的課題のその後は? - 旧システムの運用
→新システムとの運用のギャップは?それは十二分に移行時にフォローできるのか?
これらをしっかりと考えた後に出る言葉に『現行踏襲』はありえません。
そして僕は、これらを【要件定義】や【詳細設計】という小さい作業範囲の中に押し込める事はできない、と考えています。
上流も下流もない、と考えています。
システム開発を通して、新旧システム双方に対して、十分に向かい合う。
その中で出る色々な方策や指針をまとめる事までを【設計】と呼んでいます。
これを今風に、別の言葉で言うのであれば【モデル化】なのでしょう。
断言できないのは、僕がモデル化に対する知識が足りない為です。
今日の戯れ言
システムを作るっていうのはね、数学の計算のように、ビシッと1つの答えが決まってるわけじゃない。
無限の手段の中から、様々な条件・要件によって適切な手段を絞っていく作業なんだよ。
Mostはなく、MoreBetterを繰り返した結果が、システムという形になっただけなんだ。
だから、2つと同じシステムはありえない。
『現行踏襲』ったって、前提条件が違うんだから、踏襲のしようがないんだよ。
ゲームなんかがいい例だね。
『アーケードゲームの移植』ってよく言うけどさ、完全に同じものはできない。
遊ぶ環境、マシンのスペック、短く遊んで欲しい環境と長く遊んで欲しい環境の違い、etc…