SEが行っているシステム開発は、上流工程と下流工程に分けることができます。上流工程で行われる仕事、要求分析や要件定義、機能設計です。要求分析とは、その名の通り要求を分析する作業のことを指します。システム開発において、「このようなことができたらもっと使いやすくなるのに」というような声を拾い上げて、その内容を誰が見てもわかるようにまとめるのです。
要件定義は、要求分析から出てきた案を具体的な形にしていく作業となります。要求分析では良いと思われる機能をすべて拾い上げますが、要件定義ではそれが本当に必要な機能なのかを確認する役割があります。その要件定義で採用された機能の細かい内容を設計していく作業が、機能設計です。

一方、下流工程で行われる仕事は、コーディングや各種テスト、納品などです。コーディングとは、プログラミング言語を用いてシステムを構成するプログラムを作っていくことを指します。機能設計で細かく設計された内容に、HTMLやCSSなどのマークアップ言語を使用して、システムの内容を見える形にしていく作業です。
各種テストには、単体テストとシステムテストの2種類があります。単体テストとはコーディング作業が終わったシステムの確認テストのことで、システムテストとはプログラムを組み合わせても正常に機能するかどうかを確認するテストです。納品時には受入テストが行われており、設計されたシステムに不具合がないかを確認します。