Project Management & Operations Research
Critical Chain Root-Sum-of-Squares Buffer Formula
Pool task contingencies into Eliyahu Goldratt’s (1997) Critical Chain Project Buffer PB_SSQ = SQRT(SUM((P90_i - P50_i)^2)) and monitor execution with the Fever-Chart Buffer Burn Index.
Stop wasting task-level safety padding on Parkinson’s Law and Student Syndrome!
When engineers pad individual task estimates from aggressive median P50_i out to safe P90_i (local safety s_i = P90_i - P50_i), Parkinson’s Law ("work expands to fill available time") and Student Syndrome consume local padding early without passing early finishes forward! Eliyahu Goldratt (1997) in Critical Chain Project Management (CCPM) strips local padding out of individual critical-chain tasks (scheduling the Aggressive Chain Sum(P50_i)) and aggregates independent task uncertainties at the end of the chain via the Root-Sum-of-Squares (SSQ) Project Buffer PB_SSQ = SQRT(SUM(s_i^2)) — delivering the SAME ~90% end-date protection in a dramatically shorter total lead time Sum(P50_i) + PB_SSQ < Sum(P90_i)! During execution, CCPM tracks the Fever-Chart Buffer Burn Ratio BBI = (%_Buffer_Consumed) / (%_Critical_Chain_Completed) (< 1.00 Green/Yellow tracking, > 1.00 burning buffer faster than progress)!
Verify on exact Pythagorean numbers across a 3-task critical chain (Rows 2..4): Aggressive_P50 = [12, 16, 12] days (Sum = 40.00 days) and Padded_P90 = [18, 24, 22] days (Traditional Schedule = 64.00 days; stripped safeties s_i = [6, 8, 10] days -> Linear Safety Sum = 24.00 days). Pooling in quadrature yields SSQ Project Buffer = SQRT(6^2 + 8^2 + 10^2) = SQRT(36 + 64 + 100) = SQRT(200) = 14.14 days, cutting Committed Project Lead Time from 64.00 days down to 40 + 14.14 = 54.14 days (saving 9.86 days = 15.4%!)! If 20.00 days of the 40-day chain are completed (50.0% progress, H2) while 4.24 days of buffer have been consumed (30.0% buffer burn, H3 = 4.2426), Fever-Chart Burn Ratio is 0.30 / 0.50 = 0.6000 (healthy < 1.00)!
| Critical Chain Metric (P50=[12,16,12], P90=[18,24,22]) | Formula | Verified Output |
|---|---|---|
| Traditional Padded Schedule Sum(P90) | SUM(C2:C4) | 64.00 days (24d Local Padding) |
| Goldratt SSQ Project Buffer (PB_SSQ) | SQRT(SUMPRODUCT(D2:D4, D2:D4)) | 14.14 days (SQRT(200)) |
| Committed CCPM Schedule Duration | SUM(B2:B4) + PB_SSQ | 54.14 days (-9.86d Shorter!) |
| Fever-Chart Buffer Burn Ratio (BBI) | (Buf_Used / PB_SSQ) / (Done / Chain) | 0.6000 (Healthy < 1.00) |
Root-Sum-of-Squares (SSQ) Pooled Project Buffer Formula
Use helper column D (s_i = C_i - B_i) and SUMPRODUCT(D2:D4, D2:D4) so SQRT evaluates cleanly without array squaring!
=IF(OR(MIN(B2:B4) <= 0, MIN(D2:D4) < 0), "Require P90 >= P50 > 0", ROUND(SQRT(SUMPRODUCT(D2:D4, D2:D4)), 2))CCPM Fever-Chart Buffer Burn Index Formula
Compare % Buffer Consumed against % Chain Completed (when chain progress > 0 and PB_SSQ > 0).
=LET(ch_tot, SUM(B2:B4), pb_ssq, SQRT(SUMPRODUCT(D2:D4, D2:D4)), ch_dn, H2, bf_us, H3, IF(OR(ch_tot <= 0, pb_ssq <= 0, ch_dn <= 0, ch_dn > ch_tot, bf_us < 0), "Invalid Fever-Chart Input", ROUND((bf_us / pb_ssq) / (ch_dn / ch_tot), 4)))Try the example
Use the original values or change them to test your understanding.