> ## Documentation Index
> Fetch the complete documentation index at: https://docs.glidepathcpm.com/llms.txt
> Use this file to discover all available pages before exploring further.

# CPM Engine Fundamentals

> How GlidePath's Critical Path Method engine calculates your schedule

# CPM Engine Fundamentals

GlidePath uses Critical Path Method (CPM) scheduling to automatically calculate task dates, identify the longest path through your project, and quantify scheduling flexibility for every task.

## Feature Spec Reference

**Module 3.1 -- Forward Pass**\
**Module 3.2 -- Backward Pass**

## What CPM Does

CPM answers three questions for every task in your schedule:

1. **What is the earliest this task can start and finish?** (Forward Pass)
2. **What is the latest this task can start and finish without delaying the project?** (Backward Pass)
3. **How much scheduling flexibility does this task have?** (Float Calculation)

GlidePath runs CPM automatically every time you make a change -- add a task, edit a date, modify a dependency, or change a constraint.

## The Forward Pass

The forward pass starts at the project start date and calculates **Early Start (ES)** and **Early Finish (EF)** for every task:

```
Early Start  = max(Early Finish of all predecessors + lag)
Early Finish = Early Start + Duration
```

**For the first task (no predecessors):**

* Early Start = Project Start Date
* Early Finish = Project Start Date + Duration

**Effect of ASAP scheduling:** Most construction tasks default to As-Soon-As-Possible (ASAP), which means GlidePath schedules them at their earliest possible date. This produces the shortest overall project duration.

## The Backward Pass

The backward pass starts at the project end date (the latest Early Finish calculated in the forward pass) and calculates **Late Start (LS)** and **Late Finish (LF)** for every task:

```
Late Finish  = min(Late Start of all successors - lag)
Late Start   = Late Finish - Duration
```

**For the last task (no successors):**

* Late Finish = Project Early Finish
* Late Start  = Project Early Finish - Duration

## Float (Total Slack)

Float represents how many days a task can slip before it delays the project end date:

```
Total Float = Late Start - Early Start
           = Late Finish - Early Finish
```

| Float Value  | Meaning                                                      |
| ------------ | ------------------------------------------------------------ |
| **0 days**   | Task is on the critical path -- any delay delays the project |
| **> 0 days** | Task has scheduling flexibility                              |
| **Negative** | Task is over-constrained and already delays the project      |

## Recalculation Triggers

GlidePath recalculates CPM immediately after any of the following:

* A task's duration changes
* A task's start or finish date is directly edited
* A dependency is added, removed, or modified
* A constraint is applied, changed, or removed
* A calendar change affects working days
* A task is added, deleted, indented, or outdented

## ALAP (As-Late-As-Possible)

Non-critical tasks have float that gives them scheduling flexibility. If you want a task scheduled as late as possible without delaying the project, you can apply an **ALAP** constraint. GlidePath will schedule it at its Late Start date.

Most tasks should remain ASAP unless there is a specific reason to delay them (e.g., deferring material procurement until the last possible moment to preserve cash flow).

## Free Float vs. Total Float

**Total Float** measures how much a task can slip before affecting the project end date.

**Free Float** measures how much a task can slip before affecting its immediate successors. A task can have total float but zero free float if its successors have no float themselves.

GlidePath displays **Total Float** in the Float column. Free float is not displayed separately but is implied by the schedule structure.

***

## Next Steps

* [Calendars and Working Days](/scheduling/02-calendars-working-days)
* [Critical Path](/dependencies/04-critical-path)
* [Automatic Scheduling](/scheduling/03-automatic-scheduling)
