Dependency (project management)

From Wikipedia, the free encyclopedia
Jump to: navigation, search
This article is about project management dependency. For other uses, see Dependency (disambiguation).

In a project network, a dependency is a link amongst a project's terminal elements.[citation needed]

The A Guide to the Project Management Body of Knowledge (PMBOK Guide) does not define the term dependency, but refers for this terms to a logical relationship, which in term is defined as dependency between two activities, or between an activity and a milestone.[1]

Standard types of dependencies[edit]

There are four standard types of dependencies:

  1. Finish to start (FS)
    • A FS B = B can't start before A is finished, or in another words Activity A must be completed before Activity B can begin.[2]
    • Dependency-FS.png
    • (Foundations dug) FS (Concrete poured)
  2. Finish to finish (FF)
    • A FF B = B can't finish before A is finished or in another words Activity A must be complete before Activity B can finish.[2]
    • Dependency-FF.png
    • (Last chapter written) FF (Entire book written)
  3. Start to start (SS).
    • A SS B = B can't start before A starts or in another words Activity B can start after Activity A has started.[2]
    • Dependency-SS.png
    • (Project work started) SS (Project management activities started)
  4. Start to finish (SF)
    • A SF B = B can't finish before A starts
    • Dependency-SF.png
    • (New shift started) SF (Previous shift finished)

Finish-to-start is considered a "natural dependency". The Practice Standard for Scheduling recommends, that "Typically , each predecessor activity would finish prior to the start of its successor activity (or activities)(known as finish-to-start (FS) relationship). Sometimes it is necessarily to overlap activities; an option may be selected to use start-to-start (SS), finish-to-finish (FF) or start-to-finish (SF) relationships....Whenever possible, the FS logical relationship should be used. If other types of relationships are used, they shall be used sparingly and with full understanding of how the relationships have been implemented in the scheduling software being used. Ideally, the sequence of all activities will be defined in such a way that the start of every activity has a logical relationship from a predecessor and the finish of every activity has a logical relationship to a successor".[2]

SF is rarely used, and should generally be avoided. Microsoft recommends to use SF dependency for just-in-time scheduling.[3] It can be easily show however, that this would only work in case resource levelling is not used, because resource levelling can delay a successor activity (an activity, which shall be finished just-in-time) in such a way, that it will finish later than the start of its logical predecessor activity, thus not fulfilling the just-in-time requirement.

There are three kinds of dependencies with respect to the reason for the existence of dependency:

  1. 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
  2. Resource constraints
    • It is logically possible to paint four walls in a room simultaneously but there is only one painter
  3. 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.

Leads and Lags[edit]

Dependencies can be modified by leads, and lags. Both leads and lags can be applied to all 4 types of dependencies.

PMBOK defines lag as "the amount of time whereby a successor activity will be delayed with respect to a predecessor activity".

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.

In accordance to PMBOK a lead is "the amount of time whereby a a successor activity can be advanced with respect to a predecessor activity For example, on a project to construct a new office building, the landscaping could be scheduled to start prior to the scheduled punch list completion. This would be shown as a finish-to-start with two-week lead".[1]

Example[edit]

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.

Advanced cases of activities dependencies[edit]

Maximal-Type Relationships[edit]

Activity A and Activity B are said to have a Maximal-Type Relationship, if Activity B can start after Activity A, but with the delay of no more than X.[4] Real life examples, which are simulated by Maximal-Type Relation:

  • Shoring of the trench has to be done not necessarily immediately after excavation, but within certain time, otherwise the trench will collapse.
  • Vaccination of baby has to be done not immediately after birth, but within certain time
  • Renewal of the passport has to be done some time after the current one has been issued, but before it expires.
  • Invoice payment does not have to be done immediately, but within certain time after it has been issued.

Maximal-type relationships are rarely implemented in the project management software, most probably because with this feature it is too easy to create contradictory dependencies.

Build dependency[edit]

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).

See also[edit]

References[edit]