Dependency (project management)
|This article does not cite any references or sources. (December 2009)|
There are four kinds of dependencies with respect to ordering terminal elements (in order of decreasing frequency of use):
- Finish to start (FS)
- Finish to finish (FF)
- Start to start (SS).
- Start to finish (SF)
Finish-to-start is considered a "natural dependency" whereas all the others are constraints imposed by the scheduler to reflect resource constraints or preferential dependencies. SF is rarely used, and should generally be avoided.
There are three kinds of dependencies with respect to the reason for the existence of dependency:
- Causal (logical)
- It is impossible to edit a text before it is written
- It is illogical to pour concrete before you dig the foundations of a building
- Resource constraints
- It is logically possible to paint four walls in a room simultaneously but there is only one painter
- Discretionary (preferential)
- I want to paint the living room before painting the dining room, although I could do it the other way round, too
Early critical path-derived schedules often reflected only on causal (logical) or discretionary (preferential) dependencies because the assumption was that resources would be available or could be made available. Since at least the mid-1980s, competent project managers and schedulers have recognized that schedules must be based on resource availability. The critical chain method necessitates taking into account resource constraint-derived dependencies as well.
In addition, these dependencies can be modified by leads, and lags. For example: When building two walls from a novel design, one might start the second wall 2 days after the first so that the second team can learn from the first. This is an example of a lag in a Start-Start relationship.
It may also be useful to specify lead time when tasks are performed in parallel in a Finish-Finish relationship. For example: The work for 'Document A' should finish 5 days before the work for 'Document B' so that the reviewers have time to read each individually. Although Document A and Document B may take different times to write, they will be planned to finish 5 days apart.
If you are building a building, you can't paint the walls before putting the water pipes into the walls. Well, maybe you can, but it is going to be expensive, because you need to tear down the wall, put the pipes, test them, then fill the holes and finally paint.
It would be much faster and less expensive, to put the pipes first, put the cement to actually build the wall around the pipes, and finally paint the walls.
The process of converting source code (human readable form) to executable code (computer executable form), is called compilation.
Projects can be compiled separately, meaning that one project can be converted into a library that other projects use to compile, thus each project can be compiled without having to compile the other at the same time.
Projects are said to depend on their libraries, since without their respective libraries they can't compile, while libraries can compile without the other being around.
These dependencies are also called build dependencies, for obvious reasons. As you can imagine, circular dependencies are very bad, because it means you can't compile from scratch.
One way to avoid this is to have a machine dedicated to compile from scratch (like Jenkins), using a build script (like Maven).