Перейти до змісту
Увійти

Теорія

Критичний шлях і резерв часу

Прямий і зворотний прохід вручну на восьми задачах запуску фізики: найраніше завершення, ланцюжок без запасу і на скільки можуть зсунутися інші задачі.

~8 хв читання · 9 вправ · 250 балів

Перед початком

Який ланцюжок визначає дату?

Досі листопад на запуску фізики в Klasna. Залежності записано; тепер ти береш вісім задач (програма, репетитори, сторінка й лист про старт) і вручну рахуєш, коли їх усі можна завершити.

Цей урок питає, який ланцюжок задач визначає дату завершення і наскільки інші задачі можуть зсунутися, не зсуваючи її.

Критичний шлях: найдовший ланцюжок задач, що чекають

Сума всіх тривалостей дає час, який забрала б робота, якби йшла задача за задачею: 82 робочі дні для восьми задач запуску. Але багато задач не чекають одна на одну. Чернетки програми (A), пошук репетиторів (C) і сторінка (F) можуть початися в 0, тобто в день 1.

Дату завершення визначає критичний шлях: найдовший ланцюжок задач, що чекають одна на одну. Його довжина — найкоротший час, за який можна виконати всю роботу, і будь-яка затримка на ньому зсуває дату завершення на стільки ж. Задачі поза цим ланцюжком мають простір для зсуву.

Його знаходять два проходи мережею. Прямий прохід дає кожній задачі найраніший початок і завершення; зворотний прохід, від кінця, дає найпізніший початок і завершення, які не зсувають кінця. Де вони збігаються, у задачі немає простору: вона критична. Знаючи, які це задачі, керівник проєкту знає, куди дивитися щотижня.

  • Так
    «Кінець = найдовший ланцюжок очікування, а не сума тривалостей»
  • Не так
    «82 дні роботи, отже завершимо в день 82»

    Ігнорує задачі, що йдуть паралельно.

Прямий прохід: найраніший початок і завершення

Прямий прохід іде мережею від початку й дає кожній задачі найраніший початок і найраніше завершення. Два правила:

  • Найраніший початок = найпізніше з найраніших завершень попередників (задача чекає на найповільніше з того, що їй потрібно). Задачі без попередників починаються в 0.
  • Найраніше завершення = найраніший початок + тривалість.

У мережі запуску: A іде 0–22, C 0–18, F 0–8. B потребує A, тож 22–32. G потребує F, тож 8–13. D, демоуроки, потребує і B, і C. Вона чекає на пізніше: B завершується на 32, C на 18, тож D починається на 32 і завершується на 32 + 8 = 40.

Вісім задач запуску · є вище

Правило «найпізніше з попередників» — місце, де помиляються. Те, що відбір у Roman завершується на 18-й день, не дає демоурокам почати раніше: вони однаково чекають на остаточну програму. Раннє завершення некритичного попередника нічого не дає.

  • Так
    «D починається в max(32, 18) = 32»
  • Не так
    Почати D на 18, бо відбір завершено

    D однаково чекає на остаточну програму.

Найраніше завершення всієї мережі

Доведи прямий прохід до останньої задачі, і отримаєш найраніше завершення всієї мережі: найкоротший час, за який можна виконати роботу з такими тривалостями й зв'язками.

У мережі запуску: D іде 32–40, E (введення в роботу) 40–46. H, лист про старт і реклама, потребує E і G. E завершується на 46, G на 13, тож H починається на 46 і завершується на 46 + 5 = 51. День 51 — понеділок, 11 січня, якщо понеділок, 2 листопада, — день 1.

Вісім задач запуску · є вище

Порівняй із 82, сумою тривалостей: майже півтора місяця різниці, і все — через задачі, що йдуть поруч. До того ж число 51 — обіцянка лише за припущень плану: ці тривалості, ці зв'язки, ніхто не відсутній. Воно каже, коли робота може завершитися найраніше, а не коли завершиться. Які задачі не можуть зсунутися на день, не зсунувши 51, — наступне питання, на яке відповідає зворотний прохід.

  • Так
    «Найраніше завершення восьми задач: день 51 (11 січня), за тривалостями плану»
  • Не так
    Оголосити «завершимо 11 січня» як зобов'язання

    Найраніше завершення, а не обіцянка.

Зворотний прохід і резерв часу

Зворотний прохід починається з кінця й дає кожній задачі найпізніше завершення й найпізніший початок, які не зсувають дати завершення:

  • Найпізніше завершення останньої задачі = кінець (51).
  • Найпізніший початок = найпізніше завершення − тривалість.
  • Найпізніше завершення задачі = найменший із найпізніших початків задач, що на неї чекають.

У мережі запуску: H 46–51, E 40–46, D 32–40, B 22–32, A 0–22. C живить лише D, яка має початися до 32, тож C може завершитися аж на 32 і початися аж на 14.

Вісім задач запуску · є вище

Резерв часу (float) = найпізніший початок − найраніший: наскільки задача може зсунутися, не зсуваючи кінця. Задачі з нульовим резервом утворюють критичний шлях: тут A, B, D, E і H, чиї тривалості дають 22 + 10 + 8 + 6 + 5 = 51. Рецензія Vira на ньому. C має 14 днів резерву, сторінка — 33.

  • Так
    «Критичні: A, B, D, E, H (22 + 10 + 8 + 6 + 5 = 51)»
  • Не так
    Назвати критичною найдовшу окрему задачу

    Критична — означає нульовий резерв у ланцюжку.

Як прочитати резерв задачі

Резерв задачі каже, наскільки вона може зсунутися, перш ніж зсунеться дата завершення. Рахуй його як найпізніший початок мінус найраніший, використовуючи обидва проходи.

Пошук і відбір у Roman (C) має найраніший початок 0. Він живить лише демоуроки (D), чий найпізніший початок — 32, тож найпізніше завершення C — 32, а найпізніший початок 32 − 18 = 14. Резерв = 14 − 0 = 14 робочих днів.

Вісім задач запуску · є вище

Що це означає на практиці: якщо відбір затягнеться на 10 днів, він завершиться на 28-й день, усе ще раніше, ніж він знадобиться демоурокам на 32-й, і кінець лишиться на 51, з 4 днями резерву. Якщо рецензія Vira (B, нульовий резерв) затягнеться на 3 дні, кінець зсунеться на 3 дні, до 54. Той самий проєкт — дуже різні наслідки.

Тому керівник проєкту щотижня стежить за критичними задачами, а для інших робить легшу перевірку: скільки резерву лишилося.

  • Так
    «C: резерв 14. Затримка на 10 днів лишає 4; кінець тримається»
  • Не так
    Вважати кожну задачу із затримкою надзвичайною ситуацією

    Спершу перевір резерв.

Резерв на бічному ланцюжку

Резерв так само рахують на бічному ланцюжку з кількох задач: іди назад від точки, де ланцюжок приєднується до критичного шляху.

За сторінкою Danylo (F, 8 днів) іде запис за предметом (G, 5 днів), а лист про старт (H) потребує G. Найпізніший початок H — 46, тож найпізніше завершення G — 46, а найпізніший початок 46 − 5 = 41. F має завершитися до 41, тож її найпізніший початок 41 − 8 = 33. Найраніший початок F — 0, отже резерв 33 дні; найраніший початок G — 8, отже її резерв 41 − 8 = теж 33.

Вісім задач запуску · є вище

Числа виглядають щедро, і в цій мережі так і є: сторінку можна почати в середині грудня й однаково не зсунути день 51. Але зверни увагу, що F і G показують той самий резерв 33. Це не збіг і не 66 днів на двох — саме цю пастку розбирає наступна картка.

  • Так
    «F: найпізніший початок 33 (41 − 8); резерв 33»
  • Не так
    Рахувати резерв F прямо від H, пропустивши G

    Іди назад через кожну задачу ланцюжка.

Резерв спільний, і це не подарунок

Резерв належить ланцюжку, а не кожній задачі окремо. F і G обидві показують 33 дні, бо ділять один резерв: що використає F, те втратить G. Якщо сторінка затягнеться на 20 днів, запис почнеться на 28-й день замість 8-го, і для нього лишиться лише 41 − 28 = 13 днів резерву.

Це важливо, коли на одному ланцюжку кілька власників. Danylo може спокійно ставитися до запізнілої сторінки («33 дні резерву!»), не розуміючи, що витрачає й простір запису. Коли задачі йдуть одна за одною, повідомляй про резерв ланцюжка, а не кожної задачі.

Друга пастка: резерв — не дозвіл почати пізно. Це місце для несподіванок. Почати задачу пізно, «бо є резерв», — витратити простір ще до того, як щось пішло не так, і перша справжня затримка вдарить по даті завершення. Стався до резерву як до запасу: знай, скільки його лишилося на кожному ланцюжку, і витрачай лише тоді, коли щось справді затримується.

  • Так
    «Веб-ланцюжок F → G: разом 33 дні резерву; після затримки сторінки лишилося 13»
  • Не так
    «Резерв є, тож почнімо сторінку в грудні»

    Витрачає простір до будь-якої несподіванки.

Затримки переносяться завжди, виграш — лише іноді

Критичний шлях несиметричний. Затримка на ньому завжди зсуває кінець на стільки ж. Виграш переноситься не завжди: наступні задачі мають мати змогу почати раніше, а коли критичний ланцюжок коротшає, критичним може стати інший ланцюжок.

У мережі запуску, якщо рецензія Vira (B) завершиться на 3 дні раніше, на 29-й, демоурокам однаково потрібен відбір (C), який завершується на 18-й, тож D може початися на 29-й, і кінець зсунеться на 48. Але якби відбір завершувався ближче до 29, критичний шлях перейшов би на нього, і частина виграшу зникла б.

Вісім задач запуску · є вище

Ще два застереження. Тут лише вісім задач: додай ланцюжок діагностичного тесту, і критичний шлях може пролягти зовсім деінде — кейс покаже це на всіх 17 задачах. А скорочення критичної задачі додаванням людей — окреме питання.

Як це складається докупи: дату завершення визначає найдовший ланцюжок очікування; два проходи його знаходять; резерв каже, наскільки може зсунутися решта, і він спільний для ланцюжка. Наступний урок: чому трудомісткість — не тривалість і коли додаткові люди допомагають.

  • Так
    «Рецензію завершено на 3 дні раніше; перевір, чи не стане межею відбір, перш ніж обіцяти день 48»
  • Не так
    «Критична задача виграла 3 дні, отже завершимо на 3 дні раніше»

    Виграш переноситься не завжди.

Готові потренуватися?

Виконайте вправи уроку й отримайте 250 балів, коли пройдете його вперше.

Розпочати вправи