Calculating the duration between specific project milestones in a standard report

abbasshaik4
Tera Sage

Hi Everyone,

Below is the requirement:

Requesting ability to report on Turn Around Time between Milestones on a Project. The ideal design would be to run by Project and calculate duration between any and all Milestones that exist.

For example, if a Project had milestones for Start, Plan, Build, Test, Train, and Go-Live, the report would return the duration between each Planned End Date for the respective Project Tasks. Note: The capability in the Demand module to report on turnaround times for HCL phases on PRO Status may provide direction, but not sure.

 

can you please assist on this , how to proceed further?

 

Thanks & Regards,

Abbas Shaik

6 REPLIES 6

Matthew_13
Mega Sage

Hi Buddy,

Yes, this can be done, but it’s not something ServiceNow gives you out of the box in a single report.

The main thing to understand is that milestones are just project tasks with dates. Reporting can show those dates, but it won’t automatically calculate the time between milestones unless you give it some structure.

The way I've done it to handle this is by standardizing how milestones are defined and then calculating the durations ahead of time.

A common approach is:

  • Make sure milestones are consistently identified (for example by name, a milestone flag, or a “milestone type” field).

  • Use the Planned End Date of each milestone task.

  • Add logic (via a Business Rule or Flow) that, when milestones are updated, calculates the time between them (Start → Plan, Plan → Build, Build → Test, etc.).

  • Store those turnaround times on the Project record.

  • Report on those fields by Project, Program, or Portfolio.

This is very similar to how turnaround reporting works in the Demand module — those phases are fixed and modeled, which makes reporting easy.

If your milestone names vary a lot and you need something fully dynamic, you can do it with a scripted solution that:

  • Pulls all milestone tasks for a project

  • Sorts them by Planned End Date

  • Calculates the duration between each one

That works, but it’s heavier and harder to maintain, especially for dashboards.

In practice, the best next step is to decide:

  • Are milestones consistent across projects?

  • Do you need simple reporting, or historical trending?

@abbasshaik4 - Please mark Accepted Solution or Thumbs Up if you find Helpful! 🙂

MJG

Hello @Matthew_13 , Iam new to this requirement, can you please mention the detailed steps that would be helpful for me.

 

Thanks,

Abbas

Step 1: Standardize how milestones are identified

First, make sure ServiceNow can reliably tell which tasks are milestones and what phase they represent.
The easiest way is to add a field to Project Task like Milestone Type (Start, Plan, Build, Test, Train, Go-Live).
This avoids relying on task names, which tend to vary.

Step 2: Pick the date you’ll measure from

Decide which date drives turnaround. Most teams use Planned End Date so reporting is consistent.
(You can always add actual dates later if needed.)

Step 3: Add turnaround fields to the Project

On the Project record, add fields to store the results, for example:

  • Start → Plan (days)

  • Plan → Build (days)

  • Build → Test (days)

  • Test → Go-Live (days)

These are simple number or duration fields.

Step 4: Calculate the durations automatically

Create a Business Rule or Flow that runs when a milestone task is updated:

  • When a milestone’s Planned End Date changes

  • Look up the previous milestone for that project

  • Subtract the dates

  • Store the result on the Project record

Once saved, the Project always has the latest turnaround values.

Step 5: Report and dashboard

Now reporting is easy:

  • Project reports show milestone turnaround

  • Portfolio or Program reports show averages

  • Dashboards work without scripts or complex logic

This is very similar to how the Demand module reports phase turnaround — the phases are fixed, and the system just reports on stored durations.

 

@Abbas_5 - Please mark Accepted Solution or Thumbs Up if you find Helpful!

MJG

Ankur Bawiskar
Tera Patron

@abbasshaik4 

I think you can use Performance Analytics with Scripted Indicator for this.

Breakdown by Project

I am not very sure, but you can explore that

Another Option

-> use custom table to store each milestone duration

-> populate that using BR or scheduled job

-> then report on that table

💡 If my response helped, please mark it as correct and close the thread 🔒— this helps future readers find the solution faster! 🙏

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader