システム開発には様々な手法があり、制作する製品やチームのスタイルなどによってふさわしい手法は変わってきます。
代表的な手法がウォーターフォール開発です。ウォーターフォール開発ではその名のとおり、要件定義から順を追ってシステムを完成させていきます。クライアントとのヒヤリングと要件定義が完璧に終われば、それをもとに設計を済ませ、それに沿ってプログラマーがコードを打ちこんでいきます。コードが正常に動いてクライアントが納得のいくシステムが出来れば完成です。ちょうど滝が逆流することが無いように、ウォーターフォール開発の作業も、トラブルが無い限り逆走することはありません。
ウォーターフォール開発と対照的なのが、アジャイル開発です。アジャイル開発では、それぞれの工程が完璧に終わるまで待つことはしません。ある程度完成したらすぐに次の段階に進んで、不完全でも、まず完成品を作ってしまうのです。もちろん不完全なものをクライアントに渡して終わりではなく、その完成品から得たデータをもとに、もう一度同じシステムを作り直していきます。こうしてトライ・アンド・エラーを繰り返し、製品の質を高めていくのです。
2つの中間にある方法が、プロトタイプ開発です。プロトタイプとは「試作品」という意味で、まず先に仮の完成品を作ってクライアントに提出します。そしてそこから得たフィードバックや問題点をもとに、改めて正式な製品を作っていきます。メリットは、クライアントやチームと完成品のイメージを共有できることです。クライアントもだいたいのイメージがつかめるので、リクエストを出しやすいし、安心感も出てきます。