What Is the Programming Value Chain?
The programming or software development value chain represents the various skills and tasks required to achieve the desired output—in most cases, a software release. Of course, there are other outputs apart from software releases—test reports, requirements documents, and so on (see Figure 1). Just as in any value chain, the conceptual simplicity of these outputs tends to conceal all the complexity and effort that goes into producing them.
Figure 1 The programming value chain.
No individual job function in Figure 1 is intended to seem more important than any other. Some very important jobs aren’t even listed here; for instance, software design. Each job box in Figure 1 contributes to the desired end product—the software release (or some other element). This setup provides the first clue to moving programmers up the value chain: interaction with and knowledge of the work of other members in the chain.
In larger organizations, different people typically perform all the functional areas on the left side of Figure 1. Indeed, in very busy software development environments, it’s not uncommon to have one person solely responsible for packaging and building the software, particularly where many different versions coexist. Typically, this job involves maintaining artifacts such as Ant build scripts, installer code, etc.
Smaller organizations usually share the Figure 1 job areas across the available staff, so a developer in a small organization can gain priceless exposure to a range of value chain activities. On the other hand, the experience may be somewhat superficial in nature if the company is very young and its processes are not yet very sophisticated.
In the context of Figure 1, a programmer operates from high up the value chain if she at least has a good knowledge of and appreciation for all the areas in the chain. Let’s look a little more closely at why this might be so.