1. TOP
  2. エンスタマガジン
  3. フリーランス
  4. システムエンジニアが上流工程とは?求められるスキルや経験を合わせて紹介

システムエンジニアが上流工程とは?求められるスキルや経験を合わせて紹介


はじめまして、エンジニアスタイル編集部です!

コラムページでは、ITフリーランスに向けてお役立ち情報を発信します。Twitterではホットな案件を紹介してまいりますので、ぜひフォローをお願いいたします!
本記事が、皆様の参考になれば幸いです。

経験がまだ少ない方にもわかりやすく説明するために、初歩的な内容も記載しております。記事も長いので、実務経験豊富な方は、ぜひ目次から関心のある項目を選択してください。

エンジニアスタイルは、最高単価390万円、国内最大級のITフリーランス・副業案件検索サービスです。システムエンジニアのフリーランス・副業案件一覧を以下からご覧いただけますのであわせてご確認ください。

システムエンジニアの上流工程とは。下流工程との違いを確認

システムエンジニアの仕事を大きく2つに分けると、プロジェクトの概要を決定する上流工程と実際にシステムを組み上げる下流工程にわかれます。ですが具体的に上流工程を担当するシステムシステムエンジニアが、日々どのような仕事に取り組んでいるのか、どのようなスキルが必要となるかなど、なかなかイメージがつかないこともあるでしょう。

そこで今回は、システムエンジニアのなかでも上流工程を担当するシステムエンジニアについて、仕事内容や必要なスキルなど詳しく解説していきたいと思います。

システムエンジニアの業務における上流工程とは?

上流工程とは、sLerなどのシステム開発において用いられる、ウォーターフォールモデルに基づいた工程の初期段階の開発ステップのことです。開発の初期段階とは要件定義や設計などが該当し、プロジェクト全体の予算やシステムの概要決定などスケジュールの大筋を決める工程です。

ウォーターフォールとは滝の意味で、上流から下流にそって開発することを滝に例えていると言えるでしょう。

このウォータフォールモデルはプロジェクト全体のスケジュールが立てやすく、早い段階で取り組む内容が明確になりやすいとされます。逆にプロジェクト進行中に問題が発生した際は修正に手間がかかるので、やり直し作業は増加し成果物の納品も遅くなりがちです。

そのため上流工程でうまくクライアントの要望を吸い上げて仕様を決め、全体の方向性を決めスケジュールを確定することが、プロジェクトの成功に大きく関わってくる要素となります。

システムエンジニアの業務における上流工程と下流工程の違いとは

上流工程が決定した概要や予算をもとに指示を受けて、実際にプログラミングやテストを行なう工程を下流工程と呼ばれる工程です。上流工程と下流工程との大きな違いは、作業の流れと役割や待遇などになります。

上流工程を担当するシステムエンジニアの業務は、システムの概要や予算・スケジュールの決定といったプロジェクト全体の方向性を決めるものです。

対して下流工程を担当するシステムエンジニアは、開発、テスト、納品という流れで開発に関わります。つまり上流工程がプロジェクト全体の計画や設計など開発の準備をする役割であるのに対し、下流工程は実際に開発して最終的に納品するまでを行なうのが役割です。

下流工程を担当していると、すでに概要やスケジュールが決まった状態でプロジェクトに取り組むことになります。それだけにどのようにしてそれらが決まってきたのかを知ることはなかなかありません。そうした点が上流工程では何をしているのか、いまいち見えにくい要因かもしれません。

ただしプロジェクトによっては役割が明確に分離されておらず、上流工程と下流工程をすべて同じチームで行なうこともあります。

上流工程を担当するシステムエンジニアは、技術者としてというよりマネージャーやコーディネーターなどマネジメント的な要素の多い仕事内容です。そのため待遇面でも下流工程を担当するシステムエンジニアとは異なるものとなります。

システム開発におけるシステムシステムエンジニアの上流工程とは

状況や場合によっても異なるので一概にはいえませんが、おもに企画から設計を行なうのが上流工程です。具体的な流れとしてはシステム化企画立案、要件定義、設計、見積もり作成の4つとなります。

① システム化の企画立案

クライアントからの要望に基づいてシステム化を企画する段階です。

クライアントはさまざまな課題を抱えており、それを解決するためにシステムの導入を検討しています。そのためまずはクライアントからの要求や課題を明確化し、予算や開発期間を決めてプロジェクトの概要を決定する最初の段階が企画立案です。

もしこの企画段階での詰めが甘い場合、後々問題が多数発生することになります。そのため予算や人員、開発期間やそもそも開発しようとしているシステムが妥当であるのかを徹底的に審議することが必要です。

企画がまとまったら上層部へ企画書を提出して開発を行なう許可を得て、実際に要件定義や設計を行なう段階に移ります。

② 要件定義

要件定義とは、システムの概要や機能を明確に定義してクライアントに提示し、企画に同意を得て正式に契約に至る重要な工程です。

要件定義の具体的な内容としては、システムに盛り込む主要な機能がクライアントの要求どおりで抜けや漏れがないかを最終確認します。そのためクライアントと上流工程を担当するシステムエンジニアが詳細な打ち合わせを行ない、実装する機能を定義することが必要です。

その後の設計工程や下流工程をスムーズに進めるためにも、重要な工程といえるでしょう。

③ 設計する

要件定義で決まった内容をもとに、具体的に実装方法を検討する工程が設計です。設計には外部設計と内部設計があり、システムの構成や処理方法を検討します。

外部設計は基本設計とも呼ばれ、セキュリティやデータの出力、操作画面や操作方法、ユーザーインターフェースといった基本的な設計を行ないます。内部設計はシステム内部の動作や機能をどのように実装するかの設計です。

④ 見積もりの作成

要件定理や設計が完了したら、システム開発の概要や予算、開発期間などをもとに見積もりを作成します。

見積もり工程が上流工程を担うシステムエンジニアにとっての最後の工程です。クライアントにこの見積もり内容で同意を得れば契約成立となり下流工程である開発作業に移ります。

以上がシステム設計の上流工程の大まかな流れです。

システム設計におけるシステムシステムエンジニアの上流工程とは

同じ上流工程でも、システム設計の場合はシステム開発とは違った業務内容となります。ですが実際に開発する作業の前に機能や仕様を決定し、課題の確認を行なう点などは共通です。

① 要件定義

システム設計でも開発工程と同様に、要件定義によってクライアントの要求や必要な機能などを明確化して、その要望をシステムでどう解決するかを定義します。

要件定義の流れを大まかに挙げると、以下 の流れで行われます。

  • 業務要件の明確化

クライアントが求める仕様を定義し、システム化の対象となる業務の流れ(業務要件)を明確にすること。

  • 機能要件と非機能要件を定義

業務要件で明確化したシステム化で実現すべき機能要件と、機能以外でクライアントがシステムに求めるセキュリティやパフォーマンスなどの非機能要件を定義する。

  • 要件定義書の作成

要件定義工程で固まった要件をまとめて要件定義書を作成する。作成された要件定義書は、プロジェクト進行中のあらゆる工程で参照される資料となるため、抜けや漏れがないように作成することが必要です。

② アーキテクチャ設計

要件定義が定まったら基本設計であるアーキテクチャ設計を行ないます。

アーキテクチャ設計とはシステムの骨格を設計することであり、システムに要求される機能や性能をもとに構成する要素を明確化することです。要件定義での決定内容をもとに、開発言語やソフトウェアやハードウェア、実行環境などシステムに関するすべての設計を行ないます。

③ 機能設計

システムに機能を実装する具体的な手段を決定するのが機能設計です。

プログラムやデータの管理方法など処理に関連した内容から、操作画面の設計やボタン配置などユーザーインターフェースを考慮した設計なども機能設計に含まれます。

④ 内部設計をする

内部設計では、外部から見えにくいシステム内部の設計をおもに行ないます。機能分割、データ設計、入出力方法の詳細設計に分けて行なうのが一般的です。

機能分割では各モジュールの機能を明確に決定し、物理データ設計でデータファイルのやり取りについて決定します。

また入出力の詳細設計で、外部設計で決定したユーザーインターフェースの表現方法について詳細に決定します。

システムエンジニアが上流工程業務の経験をすることによるメリットとは

このように、システムエンジニアの上流工程は下流工程とはまた違ったスキルが必要になります。では、上流工程を経験したシステムエンジニアにはどのようなメリットがあるのでしょうか。

年収や社内でのポジションなど、待遇が良くなる

システムエンジニアの年収は400万円から800万円ほどといわれています。

求人内容を見てみると実務経験3年以上の年収は400万円台が多く、実務経験が10年を超えると700万円台の企業も多いようです。

ですが純粋にシステムエンジニア職としてはその辺りで頭打ちとなります。それ以上の待遇となると、マネジメントなど管理職や上流工程での実務経験が必要です。

また上流工程をこなせるシステムエンジニアは、プロジェクトに必須の存在であり、社内でも重要なポジションととらえられる傾向にあります。そのため上流工程を経験することは、社内外問わず自身の市場価値を上げることに直結するのです。

システムエンジニアとしてのスキルは確かに大切な要素ですが、ある程度以上の待遇や収入を得たいのであればプラスアルファの要素が必要になる点は、世の中のその他の職業と同様であると言えるでしょう。

キャリアパスの幅が広がる

システムエンジニアのキャリアには、特定の分野に特化したスペシャリストになるかさまざまな経験を積んでジェネラリストになるかというキャリアパスがあります。

スペシャリストとして一つの分野を極めることも方法の一つですが、スペシャリストは往々にしてプロジェクト全体ではなく自身の工程に知識が偏りがちになります。

ジェネラリストの場合、さらにそこからプロジェクトマネージャーやITコンサルタントになるなどの選択肢があります。ジェネラリストとしてキャリアを積み重ねるのであれば、幅広い知識や経験をもとにプロジェクト全体を俯瞰して見ることができる点が重要です。

下流工程を経験しているシステムエンジニアは大勢いますが、上流工程のことを知っている、もしくは経験したことのあるシステムエンジニアは相対的に少ないものです。そのため上流工程をけいけんすることは、将来のキャリアパスを大きく広げることにつながります。

市場にあまりいないため、需要が高い

システムエンジニアの年収は、上流工程への理解があるほど上昇傾向です。

上流工程を実務レベルでこなせるシステムエンジニアは、顧客へのヒアリングや業務分析といったシステムエンジニア本来の仕事以外のスキルも必須です。また上流工程はシステム開発や設計で必ず必要な工程となります。つまり上流工程をこなすことができるシステムエンジニアが不足しており、需要が高まっていることを示しています。

各企業にとって上流工程に対応できるシステムエンジニアは、確保しておきたい人材なのです。

システムエンジニアが上流工程の業務と合わせて持っておきたいスキルとは

上流工程を担当するシステムエンジニアの場合、幅広い業務を担うためシステムエンジニアとしてのスキル以外にもマネジメントスキルなど、さまざまなスキルが求められます。では具体的にどのようなスキルを求められるのでしょうか。

システムエンジニアの基本となるスキル

いくら上流工程に必要なスキルがさまざまなものであったとしても、システムエンジニアのスキルの基本であるスキルを身に着けていなければ、そもそも何を決めればよいかもわかりません。またシステムエンジニアとしてのスキルが低い場合、上流工程を任せようと抜擢される機会も少なくなります。

もちろん上流工程と下流工程の業務内容は大きく異なりますが、システムエンジニアとしての基本スキルを身に付けることは重要です。

システム開発全般の知識

上流工程を担当するシステムエンジニアには、要件定義や設計などシステム開発の方向性を決定するためのスキルが必須となります。また、直接プログラミングを行なうわけではありませんが、下流工程のプログラマーとの意思疎通をはかるうえでも前提知識は必須です。

上流工程の業務内容に関しても、プロジェクトの工程に必要なリソースを考えるうえで、基準になる基本的なプログラミングスキルも求められます。業務内容が上流工程であろうとシステム開発全般の幅広い知識を身に付けておくことが大切なのです。

プロジェクト管理能力

プロジェクトは納期が決まっているため、予定どおり作業を進めることができるスケジュール管理能力が必要です。またシステム設計・開発プロジェクト進行中は予想もしない問題が発生しがちで、システムエンジニアは問題解決能力が求められます。上流工程ではこうしたプロジェクト進行に関する管理能力全般が必須のスキルです。

ステークホルダーとのコミュニケーション

システム開発には、クライアントの要望を十二分に引き出すヒアリング能力が不可欠です。ヒアリング能力が高いと要件をうまく洗い出し、課題解決につながる設計が可能となります。

要望をうまくヒアリングできなかった場合、プロジェクト途中でのやり直しや仕様変更などでスケジュールが計画通りに進みません。

プロジェクト全体の進行を滞りなく進めることは実は非常に難しいことですが、その原因になるのは往々にして双方の認識違いです。そうした事態に陥らないためにも情報を整理しながら提案を進めるためのヒアリング能力がポイントです。

キャリアパスを見据えた時に必要なスキル

上流工程に携わること以外でも、システムエンジニアとしてキャリアアップ・キャリアチェンジを望むのであれば自身の適性やスキル、興味のある分野など、さまざまな角度からキャリアを見つめなおすことが大切です。キャリアパスを描いていくなかで、今後必要となるスキルや経験が見えやすくなります。

また技術の進歩が速く、トレンドも変化しやすいIT業界では、常に知識をアップグレードして強みを持ち続けることが大切です。

より経営視点に立てるスキル(会計や組織開発など)

開発部門やチーム全体のマネジメントをするマネージャーや、個別単位のプロジェクトを担当するプロジェクトリーダーを目標とする場合、メンバーの人事評価や人材採用といった、企業の意思決定に関わる機会が増えます。

経営層への参加や今後独立を考えているなど経営に携わってみたい方に向いているでしょう。

まずはゼネラリストとして幅広い分野を経験し、システム開発の設計からテスト、運用までを全体的に取りまとめる存在になりましょう。

セキュリティに関する知識と経験

システム設計や開発時には機能面を重視しがちですが、それ以上にセキュリティ対策が重要です。当然システムエンジニアにもセキュリティ面の知識が求められます。もし上流工程の段階で適切なセキュリティ対策がとれていなかった場合、クライアントの信頼を失い自社にとっても大きなイメージダウンにつながります。

AI・機械学習に関する知識と経験

機械学習はコンピューターが目的の作業を行えるようデータを繰り返し処理させて知能の向上を図る研究分野です。システム開発や設計においても今後機械学習を取り入れたものが求められるようになることが予想されます。

上流工程を担当する場合でも、今後はクライアントの要望をヒアリングし機能を決定する際の前提知識として、もしくはシステムの仕様を決める際にこの機械学習の知識が必要になるでしょう。

クラウド分野に関する知識と経験

近年ではオンプレミス環境でのシステム開発から、クラウドサービス環境での開発へトレンドが移行しつつあります。クラウド環境であれば、開発スピードが早く、コストや保守管理などの面でもメリットがあるため、今後はクラウド分野に関する知識も求められてくるでしょう。

クラウドサービスのなかでも大きなシェアをもつものが以下3つです。

  • Amazon Web Service(AWS)
  • Microsoft Azure(Azure)
  • Google Cloud(GCP)

トップシェアであるAWS はAmazonが提供するサービスで、クラウドサービスのなかでも最も長い歴史と200以上もの豊富な種類のサービスを誇ります。

AWSは幅広い用途に活用可能です。また、セキュリティレベルが高いので多くの企業で採用されており扱うことができるエンジニアの数も多く、日本語でも情報やナレッジを集めやすい点もポイントです。

AzureはMicrosoft が提供するクラウドサービスで、 Microsoft が提供するサービスと親和性が高い点が特徴となります。オンプレミスサーバーもWindowsを採用しているサーバーが多く、オンプレミス環境との連携もスムーズです。

GCPは Googleが提供するクラウドサービスで、Google 検索や Google MAP、Gmail や YouTubeなどでも使用されています。

GCPはGoogle 社内で利用しているものと同一環境のクラウドですので、開発をスピーディーに行なうことが可能です。

また、料金も従量課金のため初期投資を抑えてスタートすることができます。

トレンドの移り変わりの早いIT業界では、紹介した内容もすぐに古い情報になる可能性は高いものです。最新の情報を絶えずリサーチし、対応できるだけの知識を得ておく必要があります。

システムエンジニア関連のフリーランス・副業関連記事はこちらもオススメです。

まとめ

上流工程はシステム開発・設計の初期段階で、クライアントからの要望や課題をシステムにつなげていく重要な工程です。また下流行程が作業しやすいように大筋を決めて、プロジェクトを成功に導く役割も果たす必要があります。

必要な知識が幅広く、またそれぞれ高い水準が求められるので上流工程を担当できるシステムエンジニアは数が少なく貴重な存在です。逆にいえば上流工程を担当できれば、自身の市場価値を高め今後のキャリアパスも大きく開けることになります。

ぜひ上流工程にチャレンジできるように、自身のスキルを高めてみては如何でしょうか。

SNSシェア
新規会員登録エージェントとの初面談1社につきAmazonギフト券3,000円分全員にプレゼント!

あわせて読みたい関連記事


エンジニアスタイルでシステムエンジニアの案件を見る

おすすめ&新着求人・案件


各種SNSで情報を
発信中フリーランスで働くエンジニアに役立つ情報を発信しています。
フリーランス求人・案件の選び方や注意点、単価を上げるコツなどをエンジニアスタイルの編集部が発信しています。
フォロー・友達に追加していただき最新の情報をGETしてください。