有截止日期约束时,正排与倒排排程怎么安排任务时间

有截止日期约束时,正排和倒排解决的是两个不同问题:正排从最早可开始时间出发,沿依赖关系推出每项任务最早什么时候能做完,用来判断截止日期是否可行;倒排从截止日期出发,逆着依赖关系回推每项任务最晚必须什么时候开工,用来锁定底线。实际操作中,通常先用正排校验可行性,再在工期紧张时用倒排确定最晚开工时间,两者配合使用。



要点总览(TL;DR)


  • 正排从最早可开始时间出发,沿依赖正向推出每项任务的最早开始与最早完成时间,用来判断截止日期是否可行。
  • 倒排从截止日期出发,沿依赖逆向回推每项任务的最晚完成与最晚开始时间,用来锁定最晚开工底线。
  • 截止日期宽松、依赖清晰时优先正排;截止日期刚性、工期紧张时用倒排锁定最晚开工时间;依赖不确定或涉及外部交付时两者结合并设置缓冲。
  • 排程变更后先重算正排校验可行性,再重算倒排更新底线,避免倒排结果早于实际可开始时间。
  • 排程结论落到工作项时记录计划开始、计划结束、前置依赖和浮动时间,评审确认后再进入执行。


正排与倒排:同一批任务,两种时间推算方向


正排和倒排面对的是同一批任务、同一组依赖关系和同一份工期估算,区别在于推算的起点和方向。正排以“最早可开始时间”为起点,沿依赖关系从前往后推,回答“最早什么时候能完成”;倒排以“截止日期”为起点,沿依赖关系从后往前推,回答“最晚什么时候必须开始”。


两种方式输出的字段可以对应起来看。正排得到每项任务的最早开始时间和最早完成时间;倒排得到每项任务的最晚完成时间和最晚开始时间。把两组结果相减,就得到浮动时间,即这项任务在不影响截止日期的前提下可以推迟的余量。浮动时间为零的任务串起来,就是关键路径。


两种推算对输入有共同要求。依赖关系需要完整,前置任务和后置任务要明确,否则推算链条会在缺失处断开;工期估算需要有一定精度,估算偏差会沿依赖链逐级累积,正排会放大成完成时间偏差,倒排会放大成开工时间偏差。依赖不全或工期明显失准时,先补齐这两项输入,再谈排程方向的选择。


对照维度 正排排程 倒排排程
推算起点 已知的最早可开始时间 给定的截止日期
推算方向 沿依赖关系从前往后 沿依赖关系从后往前
输出的时间字段 最早开始、最早完成 最晚开始、最晚完成
对截止日期的处理 算出完成时间后与截止日期比较 把截止日期作为推算的固定终点
主要用途 判断可行性、确定执行顺序 锁定最晚开工时间、识别关键路径
适用条件 截止日期相对宽松,依赖清晰 截止日期刚性,工期紧张
变更后的重算方式 从变更点向后重推完成时间 从截止日期向前重推最晚开工时间


有截止日期时,正排怎么安排开始与结束时间


正排的推算规则可以概括为:每项任务的最早开始时间,等于它所有前置任务最早完成时间中的最大值;最早完成时间等于最早开始时间加工期。从没有前置任务、可以直接开工的任务起,按依赖顺序逐项往后推,直到所有任务都算出时间。


具体步骤:


  1. 找出没有前置依赖的任务,把已知的最早可开始时间作为它们的最早开始时间。
  2. 用最早开始时间加工期,得到每项任务的最早完成时间。
  3. 对每项后置任务,取它所有前置任务最早完成时间中的最大值,作为自己的最早开始时间。并行分支在这里汇合,先完成的分支需要等待后完成的分支。
  4. 重复第2、3步,直到所有任务都得到最早开始和最早完成时间。
  5. 取所有任务中最早完成时间的最大值,作为整批任务的正排完成时间。

把正排完成时间与截止日期比较,会出现三种结果,对应不同动作:


  • 明显早于截止日期:截止日期可行,按正排结果推进执行,把差额作为缓冲留在关键路径末端或风险较高的环节。
  • 接近截止日期:可行性存疑,需要压缩工期或调整范围,此时转入倒排,看每项任务的最晚开工时间还剩多少余量。
  • 晚于截止日期:按当前工期和依赖无法满足截止日期,必须调整,包括压缩关键任务工期、调整依赖顺序、拆分并行任务或缩减范围。

示例(演示情景):任务A工期2天,从第1天开始;任务B依赖A,工期3天;任务C依赖A,工期1天;任务D依赖B和C,工期2天。正排结果:A为第1天至第2天,B为第3天至第5天,C为第3天至第3天,D的最早开始取B和C最早完成时间的最大值即第5天,D为第6天至第7天。整批任务最早第7天完成。若截止日期是第10天,正排完成时间早于截止日期,可行;若截止日期是第6天,正排完成时间晚于截止日期,需要调整。



有截止日期时,倒排怎么安排开始与结束时间


倒排的推算规则与正排对称:每项任务的最晚完成时间,等于它所有后继任务最晚开始时间中的最小值;最晚开始时间等于最晚完成时间减工期。从没有后继任务、直接面向截止日期的任务起,按依赖逆序逐项往前推。


具体步骤:


  1. 找出没有后继任务的任务,把截止日期作为它们的最晚完成时间。
  2. 用最晚完成时间减工期,得到每项任务的最晚开始时间。
  3. 对每项前置任务,取它所有后继任务最晚开始时间中的最小值,作为自己的最晚完成时间。并行分支在这里分流,前置任务必须早于最早开工的那个后继任务完成。
  4. 重复第2、3步,直到所有任务都得到最晚完成和最晚开始时间。
  5. 用每项任务的最晚开始时间减最早开始时间,得到浮动时间;浮动为零的任务构成关键路径。

浮动时间反映的是余量。浮动时间较大的任务可以适当推迟,把资源让给关键路径上的任务;浮动时间为零的任务一旦推迟,截止日期就会被突破,是压缩工期和重点跟踪的对象。


沿用上例,截止日期为第7天。D无后继,最晚完成为第7天,最晚开始为第6天;B和C的后继都是D,最晚完成取D最晚开始即第6天,B最晚开始为第4天,C最晚开始为第5天;A的后继是B和C,最晚完成取两者最晚开始的最小值即第4天,A最晚开始为第3天。结合正排结果,A的浮动时间为第3天减第1天即2天,B为第4天减第3天即1天,C为第5天减第3天即2天,D为第6天减第6天即0天,D在关键路径上。若截止日期改为第6天,D最晚开始为第5天,B最晚开始为第3天,A最晚完成为第3天、最晚开始为第2天,A的浮动时间降为1天,余量明显收紧。



依赖与截止日期条件下,选正排还是倒排


选择依据主要是两个变量:截止日期的松紧程度,以及依赖关系的确定程度。可以按下面的分支规则判断:


  • 截止日期宽松、依赖清晰:优先正排。按最早时间推进,执行顺序明确,团队知道每项任务最早什么时候可以开始,缓冲留在哪里也清楚。
  • 截止日期刚性、工期紧张:用倒排。倒排直接给出每项任务的最晚开工时间,团队知道哪一天之前必须启动,哪些任务没有推迟空间。
  • 依赖存在不确定性,或部分任务依赖外部交付:两种方式结合使用,并在外部依赖前后设置缓冲。正排给出计划节奏,倒排给出底线,缓冲用来吸收外部交付的波动。

两种方式可以组合,组合方式有明确分工:正排定执行节奏,回答“按计划什么时候做”;倒排定最晚底线,回答“最迟什么时候必须做”。截止日期宽松时,正排结果是主计划,倒排结果用来确认余量;截止日期紧张时,倒排结果是主约束,正排结果用来确认哪些环节还有压缩空间。


排程变更后的重算顺序建议固定下来:先重算正排,校验在新工期或新依赖下截止日期是否仍然可行;再重算倒排,更新每项任务的最晚开工时间和浮动时间。顺序反过来容易出问题,因为倒排依赖截止日期这个固定终点,如果正排已经证明不可行,倒排算出的最晚开工时间会早于实际可开始时间,失去指导意义。



把排程结果落到工作项上:字段、状态与复核


排程算完只是结论,要被执行还需要写进工作项并保持可追踪。建议每项任务至少记录四个字段:计划开始时间、计划结束时间、前置依赖、浮动时间。前两个字段来自正排或倒排的最终采用结果,前置依赖记录推算链条,浮动时间标记余量大小,便于执行中判断哪些任务可以调整。


排程结果需要经过评审再进入执行。评审时重点确认三件事:依赖关系是否与实际工作一致,工期估算是否有依据,关键路径上的任务是否有明确的负责人和启动时间。评审通过后,用工作项状态反映排程确认;执行中发生工期变化或依赖调整时,先更新字段,再按“先正排校验、再倒排更新”的顺序重算,并把变更同步给受影响的下游任务负责人。


在协作工具中承载这套流程时,工作项是基本单位。ONES Project 提供任务工时统计,可用于估算任务持续时间;支持将需求和相关任务规划至迭代并分配负责人;提供看板、燃尽图等工具跟踪当前进度;团队可以围绕项目计划、工作项和迭代安排协同工作,及时了解任务状态、项目进展和待处理事项。排程结论写入工作项的计划时间与依赖信息后,负责人可以在迭代内按计划推进,进度变化通过状态和图表反映出来。依赖链的自动推算、浮动时间字段等具体配置,以实际版本的字段设置为准。



常见问题


正排算出的完成时间晚于截止日期时,应该先压缩工期还是先调整依赖?


先看关键路径。正排完成时间晚于截止日期,说明按当前工期和依赖无法满足要求,此时用倒排回推,浮动时间为零的任务就是必须优先处理的环节。压缩工期和调整依赖可以同时评估:压缩关键任务工期直接缩短总时长;把串行依赖改为并行、拆分任务或缩减范围,则改变推算链条本身。选择哪种取决于任务能否拆分、工期是否还有压缩空间,以及调整依赖是否带来新的协调成本。


依赖关系不完整时,还能直接用倒排吗?


不建议直接使用。倒排沿依赖关系逆向回推,依赖缺失会让推算链条在断开处失去约束,算出的最晚开工时间偏乐观,团队按此执行容易在后期才发现来不及。可行的做法是先补齐前置与后置关系,至少覆盖关键路径上的任务,再执行倒排;对暂时无法确认的依赖,按外部交付处理,在其前后设置缓冲,并在依赖明确后重新回推。


浮动时间较大的任务,执行中可以随意推迟吗?


浮动时间表示在不影响截止日期的前提下可以推迟的余量,推迟幅度应控制在这个余量之内。浮动时间较大的任务适合作为资源调配的弹性空间,把人力让给关键路径上的任务;但推迟会消耗余量,一旦超过浮动时间,该任务就会进入关键路径,截止日期随之被突破。执行中建议把浮动时间写入工作项字段,任务推迟时同步更新,便于判断余量还剩多少。


排程执行到一半工期发生变化,重算时要注意什么?


按固定顺序重算:先更新工期或依赖字段,再重算正排,确认新条件下截止日期是否仍然可行;然后重算倒排,更新每项任务的最晚开工时间和浮动时间。顺序反过来容易出问题,因为倒排以截止日期为固定终点,如果正排已经证明不可行,倒排算出的最晚开工时间会早于实际可开始时间,失去指导意义。重算完成后,把受影响的变更同步给下游任务负责人。


在 ONES 中落地排程结论,需要关注哪些已有能力?


ONES Project 提供任务工时统计,可用于估算任务持续时间;支持将需求和相关任务规划至迭代并分配负责人;提供看板、燃尽图等工具跟踪当前进度;团队可以围绕项目计划、工作项和迭代安排协同工作,及时了解任务状态、项目进展和待处理事项。排程结论写入工作项的计划时间与依赖信息后,负责人可以在迭代内按计划推进。依赖链自动推算、浮动时间字段等具体配置,以实际版本的字段设置为准。