Полное руководство

Как построить
PERT-диаграмму

Как превратить замысел проекта в строгую событийную сеть: прояснить результат, сохранить параллельность, точно выразить зависимости и собрать диаграмму в редакторе. Сначала строится логика — затем редактор рассчитывает даты событий и выделяет критические работы красным.

01

Базовая семантика

Что именно моделирует PERT

Редактор использует модель «работа на дуге» (Activity-on-Arrow, AOA): прямоугольная вершина фиксирует достигнутое состояние, а направленная дуга показывает работу, переводящую проект в следующее состояние.

Диаграмма описывает не перечень поручений и не календарь, а логику достижения результата: какие состояния должны стать истинными, что для этого нужно сделать и какие результаты обязательны для начала следующей работы.

Диаграмма показывает
  • границы проекта;
  • работы и их результаты;
  • непосредственные зависимости;
  • параллельные ветви и точки слияния;
  • ожидания и необязательные оценки времени;
  • расчётные даты событий и критические работы.
× Расчёт не учитывает
  • загрузку и выравнивание исполнителей;
  • стоимость работ и бюджетные ограничения;
  • праздники и календарные исключения;
  • доступность оборудования и других ресурсов.
Событие

Мгновенно фиксируемое состояние проекта. Не выполняется, не занимает времени и не потребляет ресурсы.

Реальная работа

Сплошная стрелка с действием. Обычно занимает время и создаёт результат.

Ожидание

Тоже сплошная стрелка: активной работы может не быть, но проект действительно ждёт.

Фиктивная работа

Пунктирная стрелка без подписи. Имеет нулевую длительность и передаёт только логику.

Событие отвечает: «Что теперь стало истинным?»

Событие наступает после завершения всех входящих работ. Оно не описывает процесс и должно быть проверяемым: для него можно однозначно ответить «да» или «нет».

НеудачноРазработка backend

Это процесс, а не достигнутое состояние.

ЛучшеBackend реализован

Результат можно проверить.

Хорошие названия: «Требования согласованы», «Контракт API утверждён», «Тестовое окружение готово», «Приёмочные испытания завершены», «Релиз опубликован». Избегайте формулировок «почти готово», «работа продолжается» и других состояний без однозначного критерия.

Реальная работа отвечает: «Что нужно сделать?»

Работа имеет начало и окончание, может занимать время, потреблять людей, деньги или вычислительные ресурсы и создаёт результат, зафиксированный конечным событием. Называйте её глаголом и объектом.

Не работаРаботаКонечное событие
АвторизацияРеализовать авторизациюАвторизация реализована
ТестыПровести нагрузочный тестИспытания завершены
РелизОпубликовать релизРелиз опубликован

Ожидание занимает реальное время

Ожидание решения ревьюера, публикации приложения магазином, выдачи сертификата, открытия окна релиза или завершения операции у поставщика учитывается как реальная работа. В редакторе это сплошная дуга с положительной длительностью, даже если команда в этот период ничего не делает.

(Сборка передана на ревью)
        ── Ожидать решения ревьюера, 2–5 дней ──▶
(Решение ревьюера получено)

Фиктивная работа не является ожиданием

Фиктивная работа ничего не выполняет, не создаёт самостоятельный результат и не занимает времени. Она нужна, только если без нулевой связи сеть потеряет обязательную зависимость или добавит лишнюю.

(Backend готов)
        ── фиктивная связь, 0 ──▶
(Можно начинать интеграцию)
!
Сначала логика, затем время.

Не подменяйте неизвестную длительность нулём и не придумывайте оценки. Пустая длительность допустима; нулевая длительность — свойство фиктивной связи, а в редакторе её поле оставляют пустым.

02

Главный закон

Событие ждёт все входящие работы

Слияние дуг всегда означает логическое «И». После наступления события все выходящие работы получают право начаться и наследуют полный набор его предпосылок.

Логика событияC начинается только после A и B
Выполнить A Выполнить B Выполнить C Можно начать A Можно начать B A и Bзавершены C завершена

Событие в центре наступит только после обеих входящих работ. Поэтому C не может начаться после одной из них.

Все выходящие работы наследуют все условия события

Если из события «A и B завершены» выходят C и D, обе работы зависят и от A, и от B. Если C должна зависеть только от A, а D — от A и B, начинать их из одной вершины нельзя. Нужно сохранить отдельное событие «A завершена» и создать отдельное объединённое событие.

Лишний вход создаёт ложную зависимость

Каждая входящая работа становится обязательной предпосылкой для каждой выходящей. Поэтому объединение ветвей «на всякий случай» незаметно запрещает параллельное выполнение и искусственно увеличивает срок.

Событие — контракт состояния

Читайте вершину как утверждение: «К этому моменту завершено следующее: …». Для каждой вершины проверьте три свойства.

  1. 1
    Необходимость. Все ли входящие работы действительно нужны для наступления состояния?
  2. 2
    Достаточность. Достаточно ли завершить все входы, чтобы считать состояние достигнутым?
  3. 3
    Проверяемость. Можно ли однозначно подтвердить наступление события?
И
Разветвление не означает выбор.

Несколько исходящих ветвей означают, что все они входят в проект и могут выполняться параллельно. Для выбора «A или B» сначала добавляется реальная работа выбора, а затем строится сеть выбранного сценария.

03

Когда план ещё не ясен

Стройте сеть как инструмент прояснения

Полный перечень работ заранее не обязателен. Для нового проекта он часто неизвестен, а попытка выдумать всё до построения сети создаёт ложную точность.

Начните с двух известных состояний

Зафиксируйте текущее состояние и ближайший или конечный результат. Промежуток между ними пока может оставаться крупным.

Известно сейчасЗапрос сформулирован

Понятно, какое изменение требуется.

пока неизвестный путь
Целевое состояниеИзменение доступно

Результат можно проверить у пользователей.

Идите от результата назад

Для целевого события спрашивайте: «Что должно быть истинно непосредственно перед тем, как этот результат станет возможен?» Перед публикацией могут потребоваться принятый релиз-кандидат, готовность продакшена и открытое окно релиза. Повторите вопрос для каждого найденного состояния.

Затем пройдите сеть вперёд

Для каждого события спросите: «Какие работы действительно можно начать сразу после его наступления?» Прямой проход показывает лишние зависимости, пропущенные ветви, слишком крупные работы и неточно названные состояния.

Сохраняйте неизвестное как неизвестное

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

(Требования согласованы)
        ── Реализовать интеграцию с провайдером ──▶
(Интеграция готова к приёмочным тестам)

Превратите неопределённость в работу исследования

Технический спайк, исследование или согласование — реальные работы, если они занимают время и создают решение.

(Требование к авторизации сформулировано)
        ── Провести технический спайк ──▶
(Допустимый способ авторизации выбран)

Не рисуйте несколько возможных реализаций как обычные параллельные ветви: сеть прочитает их как обязательные. Сначала покажите работу «Выбрать вариант», затем стройте выбранный вариант или отдельные сценарные диаграммы.

Проясняйте ближайший полезный горизонт

  • ближайшие работы, по которым принимаются решения, показывайте подробно;
  • среднесрочные участки оставляйте укрупнёнными;
  • дальние участки уточняйте по мере появления информации;
  • не раскладывайте проект до коммитов, файлов и отдельных тест-кейсов без управленческой причины.

Практический цикл построения

  1. 01
    Постройте грубый путь к результату.

    Начните с нескольких крупных работ, чтобы появился связный путь от текущего состояния к цели.

  2. 02
    Найдите реальную параллельность.

    Разведите работы в ветви, только если им не нужны результаты друг друга.

  3. 03
    Найдите обязательные слияния.

    Объединяйте результаты перед работой, которой действительно нужны все входы.

  4. 04
    Уточните значимые внутренние зависимости.

    Разделите крупную работу там, где промежуточный результат открывает новую ветвь или требует отдельной приёмки.

  5. 05
    Выполните обратный и прямой проходы.

    Сверьте необходимые условия результата и возможность старта каждой работы.

  6. 06
    Повторяйте цикл.

    Возвращайтесь к укрупнённым участкам, когда появляется новая информация.

04

Масштаб модели

Выберите полезную степень детализации

Детализация нужна не сама по себе. Она полезна, если меняет зависимости, показывает параллельность, открывает точку контроля или позволяет принять решение.

Работа слишком крупная, если скрывает важный результат

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

Слишком крупноРазработать приложение

Одна дуга скрывает почти все полезные зависимости.

Полезный разрезУтвердить API → реализовать backend и frontend

Контракт открывает параллельные ветви.

Работа слишком мелкая, если не влияет на сеть

Обычно не нужно выделять создание ветки Git, каждый файл и коммит, запуск каждой команды, каждую мелкую правку, сообщение или встречу без самостоятельного результата. Такая детализация затрудняет чтение, но не улучшает решения.

Оставляйте работу одной дугой, когда

  • Один набор входных условий.

    Всем внутренним действиям нужны одни и те же предпосылки.

  • Один проверяемый результат.

    Промежуточные состояния не используются другими ветвями.

  • Нет критичного ожидания внутри.

    Внешняя задержка не требует отдельного контроля.

  • Порядок никому не важен.

    Внутренняя последовательность не меняет остальную сеть.

События отражают готовность, а не процент

«Реализация выполнена на 50 %» редко является полезным событием. Хороший промежуточный результат можно передать или использовать: «Контракт API опубликован», «Авторизация работает в тестовом окружении», «Миграция совместима с предыдущей версией».

?
Критерий разделения.

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

05

Типовые конструкции

Основные схемы зависимостей

Для каждой работы задавайте строгий вопрос: «Какие результаты обязательно должны быть готовы непосредственно перед её началом?» Порядок пунктов в плане сам по себе зависимостью не является.

Проверка связи

Представьте, что предполагаемый предшественник ещё не завершён. Можно ли честно начать следующую работу?

НетЗависимость необходима
ДаСвязь, вероятно, лишняя
01

Последовательность

B может начаться только после завершения A. Промежуточное событие называет именно тот результат A, который нужен B.

(Исходное состояние) ── Выполнить A ──▶ (A завершена)
                                           ── Выполнить B ──▶ (B завершена)
02

Разветвление и слияние

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

                    ┌── Выполнить B ──▶ (B завершена) ──┐
(A завершена) ──────┼── Выполнить C ──▶ (C завершена) ──┼──▶ (B, C и D завершены)
                    └── Выполнить D ──▶ (D завершена) ──┘
03

Одна работа зависит от A, другая — от A и B

Сохраните событие A отдельно, чтобы C не получила лишнюю зависимость от B. В объединённое событие передайте A фиктивной связью.

(A завершена) ── Выполнить C ──▶ (C завершена)
      └── фиктивная связь ──▶ (A и B завершены) ── Выполнить D ──▶
                                  ▲
(B завершена) ────────────────────┘
04

Собственные и общий последователи

C зависит только от A, D — только от B, а E — от A и B. Отдельные события сохраняют независимость, объединённое открывает общую работу.

(A завершена) ── Выполнить C ──▶ (C завершена)
      └── фиктивная ──┐
                      ├──▶ (A и B завершены) ── Выполнить E ──▶
      ┌── фиктивная ──┘
(B завершена) ── Выполнить D ──▶ (D завершена)
05

Частичное перекрытие работ

Если следующая работа начинается до полного завершения предыдущей, выделите реальный промежуточный результат. Фиктивная связь не создаёт готовность и не переносит время.

(Требования согласованы)
        ── Подготовить и утвердить контракт API ──▶ (Контракт API утверждён)
                                                       ├── Реализовать backend ──▶
                                                       └── Реализовать frontend ──▶
06

Внешний результат

Внешний исполнитель или сервис не отменяет зависимость. Если без доступа, решения или данных нельзя продолжить, это состояние должно присутствовать в сети.

(Заявка отправлена провайдеру)
        ── Получить доступ к API ──▶
(Доступ к API получен)
07

Ревью и согласование

Ревью занимает время и создаёт результат, поэтому является реальной работой. Доработку показывайте вперёд новыми событиями, а не обратной стрелкой.

(Первичное ревью завершено) ── Устранить замечания ──▶ (Замечания устранены)
                                                ── Провести повторное ревью ──▶
08

Автоматическая операция

Сборка, миграция, автотесты, сканирование и развёртывание занимают время, могут завершиться неуспешно и создают проверяемый результат. Это реальные работы.

(Изменения объединены)
        ── Выполнить CI-сборку и тесты ──▶
(Сборка прошла CI)
09

Альтернативы и необязательные работы

Обычное разветвление означает «И», а не «или». Сначала выполните работу выбора, затем стройте выбранную ветвь или отдельную сценарную диаграмму.

(Варианты известны)
        ── Выбрать механизм авторизации ──▶
(Механизм авторизации выбран)
10

Ограничение общего ресурса

Если две работы технологически независимы, но их выполняет один человек, можно оставить ветви параллельными и учитывать загрузку отдельно. Соединяйте их последовательно, только если порядок уже принят как обязательный план.

11

Календарное ограничение

Отличайте календарь выполнения от реального ожидания. Если релиз действительно ждёт открытия окна, покажите ожидание сплошной дугой с положительной длительностью.

(Релиз-кандидат принят) ── Ожидать окна релиза ──▶ (Окно открыто)
                                            ── Выпустить релиз ──▶
06

Нулевая логическая связь

Когда действительно нужна фиктивная работа

Фиктивная работа требуется, когда без неё нельзя одновременно сохранить обязательную зависимость и не добавить лишнюю другой работе.

В PERT

Пунктир, пустая подпись, нулевая длительность

Создайте обычную дугу, переключите стиль на пунктирный, оставьте название пустым и не задавайте длительность. В экспортируемых данных такая связь имеет стиль dashed и duration: null.

ABC ждёт A и B

Признак необходимости

Предположим, интеграция требует готовности backend и frontend, а документацию API можно закончить после backend, не ожидая frontend. Нельзя начинать документацию из общего события «Backend и frontend готовы»: возникнет лишняя зависимость. Сохраните «Backend готов» отдельно и передайте его в событие начала интеграции пунктирной связью.

Тест удаления

  1. 1
    Мысленно удалите пунктирную связь.
  2. 2
    Определите, какая работа после этого сможет начаться раньше.
  3. 3
    Сравните получившееся разрешение старта с реальной логикой проекта.

Если удаление ничего не меняет, связь, скорее всего, избыточна.

Что нельзя изображать пунктиром

  • ожидание ответа или окна;
  • согласование и принятие решения;
  • code review и тестирование;
  • сборку, публикацию и развёртывание;
  • получение доступа;
  • технический спайк;
  • исправление дефектов;
  • резерв времени.

Не используйте пунктир и для неизвестности. Неясный участок остаётся крупной реальной работой или превращается в работу исследования.

Не минимизируйте число фиктивных связей любой ценой

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

Ограничение редактора: одна дуга на пару событий

У дуг в сервисе нет отдельных идентификаторов, поэтому две дуги с одинаковыми начальным и конечным событиями считаются дубликатом и блокируют импорт. Если две реальные работы имеют одинаковые условия начала и общий результат, проведите одну из них через дополнительное событие и добавьте необходимую фиктивную связь.

                    ┌── Выполнить A ───────────────────────────────┐
(Можно начинать) ───┤                                              ├──▶ (A и B завершены)
                    └── Выполнить B ──▶ (B завершена) ── фиктивная ┘

Нумерация нужна сервису, но не логике

На самой диаграмме достаточно понятных названий. При сохранении сервис назначает событиям технические идентификаторы вида node_N; отдельный пользовательский реестр номеров и работ для небольшой сети не обязателен.

07

Структура и аудит

Как проверить готовую сеть

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

Структурные правила

  • Один исходный и один итоговый результат.

    Все обязательные ветви начинаются после старта и приводят к финишу.

  • Граф ацикличен.

    Ни одна стрелка не возвращается в уже достигнутое событие.

  • Каждая работа встречается один раз.

    Общий результат разветвляется после единственного выполнения работы.

  • Нет скрытых предпосылок.

    Доступы, решения, окружения и внешние данные выражены структурой.

  • Нет лишних предпосылок.

    Работа не ждёт ветвь, результат которой ей не нужен.

  • Нет потерянных ветвей.

    Каждая работа имеет понятное отношение к итоговому результату.

Повторную работу нельзя показывать циклом. Разверните её вперёд: «Первичная проверка завершена» → «Устранить замечания» → «Замечания устранены» → «Провести повторную проверку».

Проверка без таблиц

  1. 01
    Прочитайте каждую вершину.

    Фраза «событие наступает, когда завершены все входящие работы» должна совпасть с названием события.

  2. 02
    Проверьте каждую выходящую работу.

    Можно ли начать её сразу после события, если не учитывать занятость людей и календарь?

  3. 03
    Проверьте каждое слияние.

    Должна ли каждая последующая работа действительно ждать каждый вход?

  4. 04
    Проверьте каждое разветвление.

    У всех ли выходящих работ полностью одинаковые условия начала?

  5. 05
    Удалите мысленно каждый пунктир.

    Должна появиться конкретная ошибка — преждевременный старт или потеря условия.

  6. 06
    Пройдите от финала назад.

    Найдите забытые внешние входы и ветви, которые не приводят к результату.

  7. 07
    Выполните прямой прогон.

    Отмечайте, какие работы открываются после каждого достигнутого события.

Типичные ошибки

01Событие описывает действие

«Разработка функции» замените на «Функция реализована».

02Работа описывает состояние

«Функция готова» замените на «Реализовать функцию».

03Ветви объединены слишком рано

Последующая работа получает лишнюю зависимость.

04Пропущена фиктивная связь

Работа открывается раньше обязательного результата.

05Ожидание показано пунктиром

Нулевая связь искусственно сокращает срок.

06Ветви прочитаны как «или»

Обычная сеть считает обязательными обе альтернативы.

07Детализация ради детализации

Технический шум скрывает условия старта и слияния.

08Зависимость спрятана в названии

Условие должно быть стрелкой, а не фразой «после получения доступа».

09Ложная параллельность

Ветви разведены, хотя одной не хватает общего результата.

10Ложная последовательность

Независимые работы поставлены цепочкой ради аккуратного вида.

11Цикл для доработки

Обратная стрелка делает событийную сеть логически неразрешимой.

12Лишняя параллельная дуга

Одинаковая пара событий не поддерживается сервисом; нужна промежуточная вершина.

Проверка сервиса не понимает смысл проекта.

Она обнаружит цикл, дубликат дуги, разрыв, несколько стартов или неверные ссылки, но не узнает, нужна ли конкретная зависимость в реальности. Смысловой аудит остаётся за автором и командой.

08

Развёрнутый пример

Небольшой программный релиз

Пример показывает, как работы выявляются прямо при построении сети, как сохраняется параллельность и где фиктивные связи объединяют разные наборы условий.

01

Уточнить границы

Исходное состояние — «Цель релиза определена». Итог — «Релиз опубликован».

(Цель релиза определена)
        ── Уточнить и согласовать требования ──▶
(Требования согласованы)
02

Развести независимую подготовку

После согласования требований параллельно готовятся контракт API, макеты, тестовое окружение и приёмочные сценарии.

                              ┌── Подготовить контракт API ──▶ (Контракт API утверждён)
                              ├── Подготовить макеты ────────▶ (Макеты утверждены)
(Требования согласованы) ─────┼── Настроить тестовое окружение ▶ (Окружение готово)
                              └── Подготовить сценарии ──────▶ (Сценарии готовы)
03

Собрать разные условия реализации

Backend требует контракта API и окружения. Frontend требует контракта API и макетов. Окружение нельзя добавлять в условия frontend, если оно ему не нужно.

(Контракт API утверждён) ── фиктивная ──┐
                                        ├──▶ (Можно реализовывать backend) ── Реализовать backend ──▶ (Backend готов)
(Окружение готово) ──────── фиктивная ──┘

(Контракт API утверждён) ── фиктивная ──┐
                                        ├──▶ (Можно реализовывать frontend) ─ Реализовать frontend ─▶ (Frontend готов)
(Макеты утверждены) ──────── фиктивная ──┘
04

Объединить всё необходимое для интеграции

Интеграция ждёт backend, frontend и тестовое окружение. Готовые приёмочные сценарии пока остаются отдельной ветвью.

(Backend готов) ────────── фиктивная ──┐
(Frontend готов) ───────── фиктивная ──┼──▶ (Можно начинать интеграцию)
(Окружение готово) ─────── фиктивная ──┘              └── Интегрировать систему ──▶ (Интеграция завершена)
05

Принять и выпустить результат

Приёмочные тесты ждут интеграцию и сценарии. После принятия релиз-кандидата можно развернуть релиз.

(Интеграция завершена) ── фиктивная ──┐
                                      ├──▶ (Можно начинать приёмочные тесты)
(Сценарии готовы) ─────── фиктивная ──┘              └── Провести тесты ──▶ (Релиз-кандидат принят)
                                                                                   └── Развернуть релиз ──▶ (Релиз опубликован)

Что показывает пример

  • полный реестр работ не требовался до начала построения;
  • контракт API выделен как событие, потому что открывает две ветви;
  • каждая работа получила только необходимые предпосылки;
  • приёмочные сценарии готовятся параллельно реализации;
  • пунктир используется только для объединения условий;
  • каждое слияние читается как логическое «И».
09

Оценки и интерфейс

Добавьте время и соберите модель в редакторе

Оценки времени назначаются работам только после проверки структуры. Событие длительности не имеет, реальное ожидание имеет положительную длительность, фиктивная работа — нулевую.

Как сервис хранит и показывает длительность

1Одна оценка

Если заполнено ровно одно из трёх полей, редактор показывает это число как длительность.

3Две или три оценки

Редактор применяет формулу PERT. Если заполнены только два поля, незаполненное технически принимается равным нулю.

Трёхточечная оценка PERT

te = (a + 4m + b) / 6

a
оптимистическая оценка
m
наиболее вероятная
b
пессимистическая

Для осмысленной PERT-оценки лучше указывать все три исходных значения. Единица измерения отдельно не хранится и не выводится, поэтому заранее договоритесь, что вся диаграмма использует, например, рабочие дни или часы.

Раннее время и критический путь

Раннее время события равно максимуму времени завершения всех входящих ветвей, потому что событие ждёт их все. Критический путь — самый длинный по времени путь от старта к финишу. Команда «График» записывает ранние календарные даты непосредственно в события, а критическим работам назначает красный цвет.

t
Формула не исправляет структуру.

Даже точные оценки бесполезны, если событие объединяет лишнюю ветвь или работа открывается раньше обязательной предпосылки.

Работа в редакторе

  1. 1

    Нажмите правой кнопкой на пустом месте и выберите «Создать событие».

  2. 2

    Создайте исходное и целевое события, затем добавляйте ближайшие известные состояния.

  3. 3

    Выберите «Создать работу» и укажите начальное и конечное события.

  4. 4

    Сплошные дуги называйте действиями. Для фиктивной связи включите пунктир и оставьте подпись пустой.

  5. 5

    Размещайте события слева направо и разводите параллельные ветви по вертикали.

  6. 6

    При необходимости заполните длительности, используя одну согласованную единицу измерения.

  7. 7

    Запустите проверку структуры и разберите каждое предупреждение до обсуждения диаграммы.

Совет Сначала смысл,
затем раскладка.

Не добавляйте события и фиктивные связи только ради красивого рисунка. Меняйте положение элементов, не меняя логику.

Технические правила сервиса

  • строить сеть слева направо: начальное событие левее конечного;
  • не создавать петли, циклы и повторяющиеся дуги между одной парой событий;
  • использовать одну исходную и одну завершающую вершину для единого результата проекта;
  • не проводить стрелку через карточку постороннего события;
  • не использовать пунктирную дугу с названием или длительностью;
  • не считать цвет заменой логической связи: цвет служит только визуальной пометкой.
10

Перед публикацией

Контрольная проверка диаграммы

События

  • каждая вершина описывает достигнутое состояние, а не процесс;
  • состояние можно проверить однозначно;
  • название соответствует совокупности всех входящих результатов;
  • событие не имеет собственной длительности.

Работы

  • каждая сплошная дуга описывает действие или реальный интервал;
  • у каждой работы есть понятный результат;
  • одна работа не продублирована в разных ветвях;
  • масштаб работы соответствует управленческой задаче.

Зависимости

  • у каждой работы есть все необходимые и только необходимые предпосылки;
  • выходящие из события работы имеют одинаковые условия начала;
  • каждое слияние означает обязательность всех входов;
  • параллельные ветви не используются для выбора;
  • в сети нет циклов.

Фиктивные работы

  • каждая пунктирная связь передаёт конкретное обязательное условие;
  • её удаление приводит к понятной логической ошибке;
  • подпись и длительность отсутствуют;
  • пунктир не изображает ожидание, ревью или автоматическую операцию.

Полнота

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

Десять правил в короткой форме

  1. Вершина — состояние, дуга — работа.
  2. Событие наступает после завершения всех входящих работ.
  3. Все выходящие работы наследуют полный набор предпосылок события.
  4. Слияние и разветвление ветвей означают «И», а не «или».
  5. Фиктивная работа передаёт только логику и всегда имеет нулевую длительность.
  6. Ожидание, ревью, тестирование и автоматическая операция — реальные работы, если занимают время.
  7. Полный список работ заранее не обязателен: сеть уточняется итеративно.
  8. Детализируйте только там, где это меняет зависимости или решения.
  9. В сервисе между одной парой событий допустима только одна дуга.
  10. Сначала проверяйте логику, затем добавляйте время.

Материалы для углубления

Следующий шаг

Проверьте методику
на своём проекте.

Создать диаграмму