Hi, I can see developers often use terms “upstream” and “downstream” to point to the dependencies or dependents of something, either in the context of building software from modules / subprojects or using source control systems that allow cloning / forking. However I’ve encountered developers who apply contradictory meanings to these terms and it made me quite confused. So I ask here, which interpretations of “upstream” and “downstream” do you find correct. As a non-native speaker I’d like to be understood correctly and avoid messing up these terms.
Consider there are three projects: A, B and C (e.g. in SBT). Project C depends on code in B, and project B depends on code in project A. You have to first build project A, then B, then finally C.
Project A is upstream from B, and project C is downstream from B. This is because information flows in the direction A -> B -> C, and such is also the order of building. Therefore, by manufacturing analogy, A can be considered raw materials, B a half-product and C the final product. In manufacturing raw materials / suppliers are upstream, final product / consumers are always downstream. Also any change in B affects only B and C, but not A, so changes are propagated down with the stream, so C must be called a downstream dependent of B.
Project A is downstream from B and project C is upstream from B. This is because we can draw the dependency graph as A <- B <- C. Therefore the “dependency stream” flows from C to A, so A must be downstream and C must be upstream.
Obviously both can’t be correct, so which one is correct?
Or is it totally messed up and one should just avoid using these terms, because noone really grasps what they mean?