The forward pass computes the earliest each activity can start and finish. Every earliest time is the maximum of predecessor finishes plus the activity duration, so the arithmetic makes the first feasible project timeline visible.

highlighted = computed this step

Start at origin

Activity A starts at 0 and finishes at 2. Why: it has no predecessor. Interpretation: the forward pass is computing the earliest possible timeline under the precedence rules.

ESA=0EFA=2ES_A=0\quad EF_A=2
forward pass tabletaskdurESEFLSLFslackA202020B325361C426260D257792E369690F29119110

Forward through C

Activity C starts at 2 and finishes at 6. Why: its earliest start is A's earliest finish. The duration of C then pushes that branch forward to its earliest finish.

ESC=2EFC=6ES_C=2\quad EF_C=6
forward pass tabletaskdurESEFLSLFslackA202020B325361C426260D257792E369690F29119110

Forward into F

Activity F starts at 9 and finishes at 11. Why: it waits for the later predecessor finish. Interpretation: the forward pass exposes which incoming branch is currently controlling the terminal activity.

ESF=9EFF=11ES_F=9\quad EF_F=11
forward pass tabletaskdurESEFLSLFslackA202020B325361C426260D257792E369690F29119110

Diagram note

The table values are the recomputed forward and backward CPM times for the pinned DAG. They are exact consequences of the modeled precedence graph, not a calendar promise. Pixel positions are rounded for layout; every number shown is exact.

forward pass values are exact\text{forward pass values are exact}
forward pass tabletaskdurESEFLSLFslackA202020B325361C426260D257792E369690F29119110