Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

What does "downstream/upstream design" in software development mean?

share|improve this question

migrated from Apr 25 '11 at 14:03

This question came from our site for linguists, etymologists, and serious English language enthusiasts.

I don't know that the usage you are asking about is well established. What is the context of your question? What problem are you trying to solve? – Jeremy Jun 14 '11 at 3:18
Are you sure the word "design" is attached? I've heard of upstream and downstream, usually coupled with "activities", not design. In that sense, requirements and design are upstream activities, while implementation, testing, and maintenance are downstream activities. – Thomas Owens Jul 14 '11 at 3:30
Related: What does 'upstream' mean? at OS – kenorb Aug 20 '15 at 15:48

Upstream components are other parts of the system that your component depends on to do its job. If the design of an upstream component changes, the ability of your component to function may be affected. If an upstream component has a bug, this bug may be manifested in your component.

Downstream components are parts of the system that your component can affect. Changes in your component can ripple to components that are downstream from your component.

Consider an application that consists of a database tier and an application tier. The database tier would be considereded to be upstream of the application tier.

share|improve this answer

Upstream = up the well (the origin of the software) Downstream = downwards to the ocean (of use cases)

Open Source developers who are "downstream" build applications and tools on the finished products. Those who are upstream actually work on the products to be released.

If you develop software: you depend on the stability of the upstream development. And those who work on your software are downstream developers.

share|improve this answer
This answer is the clerest of all ! – Alexander Leon VI Jun 15 at 21:22

I think this is more software engineering jargon than English, but the way I understand it "downstream design" is where the application developers take the tools that have already been developed and use them to complete their application. Using already produced software libraries where decisions about what the library capabilities would do have already been made is downstream.

With "upstream design" the application developer is consulted and involved in the development of the libraries before the application work has even really begun. If you're going to be a software company focusing on audio software, for example, you might need to develop libraries to cover the range of software you plan to develop. It would be nice to be able to have library developers sit down with the application developers so that the app devs can provide input into what they want.

Upstream is more customized, which makes it much more expensive but potentially produces a better end product.

share|improve this answer

protected by gnat Jun 25 at 7:34

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?