投稿日: 2024年12月10日
最終更新日: 2024年12月10日
初めに
一般的に、システム開発は顧客の要望を実現するプロセスとして認識されることが多いです。最も分かりやすい例は要件定義です。要件定義では顧客の要求を元に仕様を作ります。そして、エンジニアはその仕様通りにシステムを実装します。他の解釈としては、例えば、プロジェクトマネジメントにおけるシステム開発は「開発期間や予算を守りながらスコープ (機能) を実装する活動」です。
いずれもシステム開発を適切に捉えていますが、システムの作り方に着目するあまり、システムを完成させることが目的になってしまう傾向にあります。アジャイル開発に取り組むエンジニアですら、この傾向が見られます。なぜなら、「要件を実現する」というこれまでの考え方は変わっておらず、しかも「より小さな単位で要件を実現する」ことがアジャイル開発の目的であると誤解しているからです。
この傾向を強めている理由の1つが、IT業界に潜む一次請けや二次受けという役割分担です。一連の開発プロセスが上流工程と下流工程に分割されることにより、システム開発に携わるチームが「仕様を決める人」と「仕様通りに実装する人」に分断されるためです。
このようなシステム開発に対する認識の誤りや、それに基づく開発手法の誤解、チームの分断が、システム開発を通じた顧客価値の創出を妨げています。そのため、「システム開発とは何か?」を考え、システム開発の本質を見直すことが顧客価値の向上に不可欠です。
システム開発における「システム」とは
システムの意味を振り返ることから始めましょう。システムは、制度、組織、体系と言い換えることができます。つまり、システムは「多くの要素が集まり、まとまったもの」あるいは「一連の要素を秩序立てたまとまり」と捉えることができます。
この定義に基づくと、システムは異なるレベルで解釈できます。
例えば、システムを技術的な観点から見ると以下のようになります。
- プログラムが集まったもの
- アーキテクチャによって整理された実装の集まり
次に、システムをビジネス的な観点から見ると以下のようになります。
- 業務を支える要素の集まり
- 人々の活動を支援する仕組み
- 組織の目的を達成するための手段
つまり、例えば「システムを理解する」という言葉は、「プログラムのロジックを理解する」、「アーキテクチャパターンを覚える」というように、技術的観点から捉えることができる一方で、「業務を支える要素について学ぶ」、「人々の活動を支援するための課題を理解する」というように、ビジネス的観点から捉えることもできます。
この2つの観点は密接に関わっています。技術的な選択はビジネス価値に影響を与えますし、ビジネスの理解は適切な技術選択を導きます。そして、システムの目的は両者の相互作用から生まれます。
システムなどの人工物は初めから目的があります。例えば、椅子は座るために作られ、自転車は移動するために作られます。一方で、人間は生まれながらに目的が定められている訳ではありません。自分で人生の目的を見出していく必要があります。このように、目的があること自体がシステムの特徴の1つです。
システム開発の話題に戻ると、システム開発とはシステムを作ることです。システムは人工物であるため、システムを作るためにはシステムの目的を決める必要があります。つまり、システム開発とは、システムの目的を実現するための活動と考えられます。
システムの目的は曖昧である
次に、誰がシステムの目的を決めるのかを考えます。具体例を元に観察してみましょう。
Excelなどの表計算ソフトは様々な用途で使われます。本来は数値データの集計や分析に利用されるソフトウェアですが、簡易的なデータベースやプロジェクト管理ツールとして利用されることもあります。この例の場合は、開発者とユーザーの両方がシステムの目的を決めています。そして、Excelが生まれたばかりの頃は表計算ソフトとしての利用がほとんどでしたが、時が経つにつれ、データベースなどの新たな用途が普及していきました。
このような歴史を踏まえると、システムの目的は曖昧であると考えられます。そして、開発者がその目的を決めることもあれば、ユーザーがその目的を決めることもあります。つまり、技術を起点としてシステムが成立する場合と、ニーズを起点としてシステムが成立する場合があるということです。
技術がすべてではないが、ニーズがすべてでもない
技術を起点としてシステム開発を考えれば、「新しい技術がユーザーの行動を変える」と考えられます。逆に、ニーズを起点としてシステム開発を考えれば、「ユーザーのニーズが技術の活用方法を生む」と考えられます。
ソフトウェアエンジニアが理解すべきなのは、物事には様々な見方があり、システムもその例外ではないということです。そして、この考え方は「より良い『システム』とは何か?」を考える上で役立ちます。
例えば、周囲と良好な関係を築こうと過度に気を使ってしまうと「システムに対する考え方は人それぞれ」という価値観が生まれやすいです。このような事態を避けるには、「システムの目的は曖昧であるが、システムのような人工物には必ず目的がある」ということを理解することが大切です。
また、システムについての考察は、異なる立場の人々の視点を理解する上でも重要です。システムの多面性を理解していれば、システム開発に携わる関係者と友好的な関係を築けますし、エンジニアとして技術的な選択について関係者に説明する際に、ビジネス的な観点からの考察を述べることができます。
これまでの考察をまとめると、ソフトウェアエンジニアは、「技術がすべてではないが、ニーズがすべてでもない」ということを胸に刻み、それぞれの強みを理解し、常に選択の余地を残しておくべきであると考えます。