システム開発はいくつかの工程に分けることができます。顧客の要望をヒアリングして、どのようなシステムにするかを決める要件定義という工程から始まります。その要件をどのような画面にして、どのようにデータを保持するかなどを決めるのが設計という工程です。その設計をもとにプログラミングしていくのが開発という工程になります。開発されたシステムが正常に動作し、要件定義や設計の内容を満たしているかを確認するのがテスト工程です。
このようにしてシステムが完成し、実際に稼働し利用されていきます。要件定義・設計・開発・テストの各工程で検証を行い、順番にシステム開発を進めていく手法をウォーターフォールモデルと呼びます。このモデルにおいて、要件定義・設計を上流工程、開発・テストを下流工程と呼んでいます。
上流工程の作業の良し悪しが、下流工程に大きく影響を及ぼすことになります。そのため、上流工程はシステム開発経験が豊富なところが担当するのが一般的です。大規模プロジェクトでは大手企業が担当することが多いです。職種としてはシステムエンジニアが上流工程を担当します。
一方、下流工程は中小企業のシステム開発会社が担当する傾向があります。職種としてはプログラマーが担当します。
上流工程を担当する場合、システム開発が順調に進んでいるかのスケジュール管理も行います。さらには、開発コストについても管理します。実際に顧客と接することが多いのも上流工程の方だと言えます。そのような重要性のある上流工程に携わるシステムエンジニアに求められるスキルや資格などについては、こちらのサイトにまとめられているので確認してみるといいでしょう。