프로젝트 스케줄을 구성하는 기본 단위는 task뿐만이 아니다. Task는 프로젝트의 가장 기본이 되는 작업 단위이기 때문에 프로젝트의 목표를 시각적으로 잘 나타낼 수 없다. 이러한 프로젝트의 다양한 목표를 일정 내에 표현하기 위한 방법이 마일스톤이다. Milestones
플랜트 프로젝트에서 P&ID 도면이 특정일까지 도출되어야 한다고 생각해 보자(프로세스가 기본이 되는 석유, 화학 플랜트에 있어서는 P&ID가 매우 중요하다). 이때 P&ID 도면을 도출하기 위한 다양한 작업은 Task로 정의되며 스케줄 내에 표기된다. 하지만 이런 과정을 태스크로만 표현하면 P&ID를 언제까지 도출해야 할지 눈에 잘 들어오지 않는다.

일정을 세울 때 프로젝트의 중요한 절점, 즉 마일스톤은 일반적으로 이렇게 눈에 띄게 맨 위에 배치한다.
일정을 세울 때 프로젝트의 중요한 절점, 즉 마일스톤은 일반적으로 이렇게 눈에 띄게 맨 위에 배치한다.

우리가 스케줄링을 수행하는 가장 큰 목적은 체계적인 일정관리(특히 critical path)를 통해 프로젝트의 공정 지연을 방지하기 위함이다. 이 때문에 어떤 특정한 작업, 마일스톤 등은 절대로 지연해서는 안 된다는 의미로 처음부터 고정시켜 버리는 경우도 있다. 이것을 Constraints라고 부른다.
Constraints에는 여러 종류가 있는데 그 중에서 가장 잘 활용되는 유형은 날짜에 constraints를 걸것이다.그리고 이건 deadline과 delivery date를 포함한다.예를 들어 보자.플랜트 내 주기기가 특정 날짜까지 넘겨져야 Critical path가 지연되지 않는 것이 있다.이 경우 주기기의 인도일에 constraints를 걸고 만다.그러면 인도 날짜는 고정되며 변경되지 않는다.그러나 주기기의 인도 날은 당연히 앞서task와 logic으로 연결되고 있으며(주로 FS), 선행 작업(predecessors)가 지연되면 당연히 인도가 지연될 수밖에 없다.그러나 인도 날이 constraints에서 고정되어 있으면 일정상에 인도일은 변경되지 않는다.그래서는 선행 작업이 지연되어 선행 작업과 해당 이정표는 연결되어 있기 때문에 이는 스케줄 위에서 어떻게 표현되는가?스케줄 프로그램을 어떻게 설정하느냐에 의해서 다르지만 이 경우 프로그램은 신호를 보낸다.아래에서 다시 설명하지만 날짜는 변함 없이 고정되어 있지만 float가 0이하로 떨어지기 때문이다.이런 신호를 통해서 스케줄을 체계적으로 관리할 수 있는 포인트로 할 수 있고, 이것이 스케줄링 과정에서 constraints를 활용하는 이유다.Float

위에서 조금 언급한 Float는 스케줄링에 있어서 매우 중요한 개념이다. 한국어로 표현하면 ‘여유기간’이라고 할 수 있는데, 이런 float이 CPM의 핵심이라고 할 수 있다.(일반적으로, critical path = float가 0인 경로라고 할 수 있다. 그러나 이 또한 각 프로젝트에서 어떻게 정의하느냐에 따라 다르며, 어쨌든 float는 critical path를 결정짓는 요소라고 할 수 있다)
존재하지 않는 이미지입니다.플로트의 기본 개념

Float는 크게 Total float과 Free float로 나눌 수 있는데, Total float은 각 경로가 가지고 있는 모든 float의 합으로 볼 수 있고, Free float은 각 task가 가지고 있는 float이라고 할 수 있다. (결국, Total float가 0인 경로상에 놓여 있는 task가 critical path라고 할 수 있다) 이러한 float는 Project Manager 혹은 스케줄 매니저가 자신의 스케줄을 어떤 방법으로 어떻게 수립할지를 결정하는 기준이 된다. 특정 작업의 순서를 바꾸거나 나중에 일정을 미루거나 앞당기는 등의 의사결정을 할 때 합리적인 매니저는 float을 기준으로 이러한 의사결정을 한다.
