kellykaufmann
Mega Guru

Kelly's 'Time' Implementation Blog Posting

We just rolled out our functionality for reporting time - in PPM and across the rest of ServiceNow (SN). I learned a lot about SN's Time functionality while rolling this out, especially how Time works in Project. We did a lot of configurations & code changes, especially in Project. I'm sharing this with you all in case you're looking for examples of how others are using Time in PPM or are getting ready to roll it out yourselves!

Thank you to rfedoruk, Anna Scheib, and Arun Vydianathan for helping me get this figured out!

Note: We had already decided to use 'Time Worked' with the timer auto-turned on and have it auto-create & update a Time Card whenever we save a form (see the Wiki for how this functions) (instead of entering time directly into Time Cards), and to use the OOTB optiono to have Time Worked & Time Cards will automatically be kept in sync (we're not allowing people to edit Time Card for SN time) so people can report off either Time Worked or Time Cards.

Some of our original PPM time needs:

For a Project, we wanted to be able to capture & report on time reported directly against the PRJ# (we were thinking people might report time at the PRJ level when we don't have an actual Project Manager to run the project and they don't have time to enter some standard PM tasks to report time against, for example in setting up the Project Schedule etc., and also for our resource who will be writing stories (remember we're using Agile within Project functionality that is available in Fuji, not the SDLC functionality)) as well as any records relating to the PRJ (e.g., the Project's: tasks, requirements, issues, defects, decisions, risks, and Story Tasks, etc.). We wanted time to roll up to parent tasks all the way up to the parent PRJ, so when you look at the parent PRJ time field, it will show all time reported against the PRJ as well as time reported against things that roll up to the PRJ.

Secondly, we needed to be able to report total time reported against a Project (again, including time reported against the Project's requirements, issues, defects, decisions, risks, etc. as well as Agile time). I felt stuck because prior to making all our Time changes, if I ran the report against the Time Worked table, I couldn't use Top Task to pull in all those areas with the same Top Task (which is the Project number). If I used the Project table, it just pulled time reported directly against the parent project (and not against requirements, issues, defects, decisions, risks, etc). And when you have a multi-level project schedule, many project task's parents are...project tasks, whose parents are...project tasks. That's the problem with reporting against Parent.

What we learned:

  • There is no OOTB functionality for 'Time Worked' of any related project form to roll up to the parent Project. However 'Actual Effort' does for some fields. So you can map Time Worked to populate the Actual Effort field for every table that extends the planned task table (Project Task, Decision, Defect, Requirement, Story, etc.), Issues and Risks behave differently as they do not extend planned task so don't have the work_effort field OOTB, so we would have to do custom work to get this to behave similarly. Risk wasn't a big deal, but for Issues we really wanted to be able to report time.   If you track 'Actual Effort' at the PRJ level, it won't include Actual Effort reported at the PRJ level because the PRJ has child tasks (the first level tasks in the project schedule). So if you want Actual Effort on the PRJ form to reflect Actual Effort reported at the PRJ level + at the project task/defect/decision etc time, you need to do coding (we didn't do this coding, because really it's not best practice to report time at the PRJ level anyway).
  • Since we're using Agile within Project (not the SDLC module), we obviously also wanted any time reported against Scrum Tasks to roll up eventually to the PRJ. Scrum Task time rolls up to it's parent Story, which rolls up to it's Sprint. Getting the time from the Sprint to the PRJ is tough because SN's principle is that one Project Team works on different Projects in the same Sprint,   so can't set Sprint's parent to be a single Project. This totally makes sense for larger organizations. Ours just happens to be small where we do have Sprints roll up into 1 project.

Our setup:

  • Again, 'Time Worked' will auto-populate & update 'Time Cards'.
  • We mapped Time Worked to populate Actual Effort on all the different Project forms (project tasks, defects, decisions, Requirements). Any changes to the Time Worked entry will also update the Actual Effort field. We did this mapping via coding...however per Arun, TIme Worked will go and update Time Cards, and Time Cards goes back and update the Actual Effort in Task, so you can achieve updating work_effort from time_worked without coding. We couldn't get this to work but maybe you can!)
  • For waterfall Projects, we're capturing time & rolling up time to the PRJ Actual Effort field (this took coding) for: (Non-parent) Project Tasks, Project Defects, Project Decisions, and Project Requirements (knowing it would be rare for someone to need to report time against a Project Decision or Requirement). We instructed the team that if they need to report general project management time, that they should just create & report time against a project management Project Task (remember to not create 'children' under this task). For Project Issues, we instructed the team to create a Project Issue & tie it to a generic Project Issues task or the specific project task that the issue is dealing with, and to record time in whichever task the Issue is tied to.
  • For Agile, we're currently planning by hours not points. So Time Worked will become the 'A' (Actual Time) for agile effort. People will only report time against the Scrum Task. In addition to using the OOTB functionality to have Scrum Task time roll up into the parent Story, which rolls up into it's Sprint (this took coding) - we also had the Sprint time roll up into the parent Phase task (again, coding). So in the end, our PRJ 'Actual Effort' field represents all time except for Agile time, for which we need to look at the Agile Phase's time.
  • We created a 'Sprint' and 'Stories' tab on the PRJ form (took coding to get Sprint, didn't take coding to get Stories). You can show the 'Actual Effort' column to see the total 'Actual Effort' rollup for each Sprint.
  • This setup left us a solution for reporting Waterfall portion work - just pull the 'Actual Effort' from the PRJ. For seeing the Agile portion, we need to look at the hours at the Agile phase. We haven't yet found a way to make this better.

Here is our Time training presentation which does include references to Time in other modules, but I think you'll still get benefits in understanding how we set up Time (remember, with a bunch of the configurations & code changes we made   - so when we say you can or cannot do something, it's because we set it up that way, not necessarily that that is how it functions OOTB).

Hope this helps some of you when it comes time for you to set up Time in SN, and particularly in PPM!

14 Comments