Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

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

share|improve this question
    
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
add comment

migrated from english.stackexchange.com Apr 25 '11 at 14:03

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

3 Answers

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
add comment

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
add comment

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
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.