Expand my Community achievements bar.

Don’t miss the Workfront AMA: System Smarts & Strategic Starts! Ask your questions about keeping Workfront running smoothly, planning enhancements, reporting, or adoption, and get practical insights from Adobe experts.

Sharing my Advanced Scheduling Coach view for Task Constraints

Avatar

Community Advisor

As a Workfront admin and consultant, I've lost count of how many times I've had to explain the intricacies of Task Constraints and how each one behaves in Workfront. Chances are, so have you.

Over the years, I've made a few attempts to create a task view that can coach users on which date-related fields they should edit to get predictable results in their task dates.  Those attempts were inevitably not always correct due to the number of variables that can impact task scheduling.

Last week I was asked to produce yet another lesson on task scheduling for a new group. I decided one more time to again try making my "dream view." This time, I did not give up. I think it paid off, and personally am really happy with the results. Knowing it can be a challenge in every instance, I've decided to share it here in hopes that it will help some of you with your own user support.

William_0-1760380918776.png

 

The view includes Predecessor, Start, Duration, End, and Task Constraint columns that each use conditional formatting to highlight cells the cells in which the user is expected to provide input (yellow for "pencil" vs. aqua for "auto/robot".) Cells that appear in grey indicate cells in which the user cannot input, or that their input will be ignored. The real value comes in the Constraint Rules column. This is a calculated column that displays the rules that Workfront follows when setting task dates, based on the selected Task Constraint. As you update the task constraint, you will see not only the cell colors change, but also the a breakdown of rules that will now govern the task dates. It informs when a date is tied to connected dependencies, or is manually set by the user, or is simply calculated. Each constraint explains rules for Start, Duration, and Due Date in that order, with additional rules that may apply to that specific constraint. There's also some helper text in the column descriptions. 


Sadly, the logic cannot account for whether or not a predecessor or successor has been set for a task and therefore also cannot account for enhanced dependencies like SS, SF, FF, or E. My belief is that if a PM is knowledgeable enough to leverage enhanced dependencies, they understand their intended behavior and don't need the benefit of this view to know what they're doing. 

To simplify installation, I've attached a kickstart that you can use to import the view. For users without kiskstart access, you can copy/paste the below text mode to create the Constraint Rules column, which is the most complex part of the view. Keep in mind that upon saving the view, Workfront will strip the leading \ character from the unicode that enables line breaks. If for any reason you decide to update that column, you will need to re-add the leading \ character to every occurrence of the unicode. I handle this by having a locally stored version of the text that I edit and can copy/paste into the valueexpression.

IF( {numberOfChildren} > 0, CONCAT( "🤖 Fully Automatic - This is a rollup of nested tasks", "\\u000a", "⚠️ Ignores dependencies and constraints ⚠️" ), SWITCH( {taskConstraint}, "FIXT", CONCAT( "✏️ Manual Start Date ⤵️", "\\u000a", "🤖 Auto Duration", "\\u000a", "✏️ Manual Due Date ⤴️", "\\u000a", "⚠️ Ignores dependencies" ), "MSO", CONCAT( "✏️ Manual Start Date", "\\u000a", "✏️ Manual Duration ⤵️", "\\u000a", "🤖 Auto Due Date", "\\u000a", "⚠️ Ignores dependencies" ), "MFO", CONCAT( "🤖 Auto Start Date", "\\u000a", "✏️ Manual Duration ⤴️", "\\u000a", "✏️ Manual Due Date", "\\u000a", "⚠️ Ignores dependencies" ), "ASAP", CONCAT( "⬅️ Assign Predecessors to push task start away from project start", "\\u000a", "🤖 Auto Start Date 🔀 Predecessor(s)", "\\u000a", "✏️ Manual Duration ⤵️", "\\u000a", "🤖 Auto Due Date" ), "ALAP", CONCAT( "➡️ Use Successors to pull the task due date away from project end", "\\u000a", "🤖 Auto Start Date", "\\u000a", "✏️ Manual Duration ⤴️", "\\u000a", "🤖 Auto Due Date 🔀 Successor(s)" ), "SNLT", CONCAT( "⏰ Enhanced ASAP", "\\u000a", "⬅️ Assign Predecessors to push task start away from project start", "\\u000a", "🤖 Auto Start Date 🔀 Predecessor(s)", "\\u000a", "✏️ Manual Duration ⤵️", "\\u000a", "🤖 Auto Due Date", "\\u000a", "📅 Constraint Date enforces latest allowable Start" ), "SNET", CONCAT( "⏰ Enhanced ASAP", "\\u000a", "⬅️ Assign Predecessors to push task start away from project start", "\\u000a", "🤖 Auto Start Date 🔀 Predecessor(s)", "\\u000a", "✏️ Manual Duration ⤵️", "\\u000a", "🤖 Auto Due Date ", "\\u000a", "📅 Constraint Date enforces earliest allowable Start" ), "FNLT", CONCAT( "⏰ Enhanced ALAP", "\\u000a", "➡️ Use successors to pull the task due date away from project end", "\\u000a", "🤖 Auto Start Date",  "\\u000a", "✏️ Manual Duration ⤴️", "\\u000a", "🤖 Auto Due Date 🔀 Successor(s)", "\\u000a", "📅 Constraint Date enforces latest allowable Due Date" ), "FNET", CONCAT( "⏰ Enhanced ALAP", "\\u000a", "➡️ Use Successors to pull the task due date away from project end", "\\u000a", "🤖 Auto Start Date", "\\u000a", "✏️ Manual Duration ⤴️", "\\u000a", "🤖 Auto Due Date 🔀 Successor(s)", "\\u000a", "📅 Constraint Date enforces earliest allowable Due Date" ), "EAT", IF( {project}.{scheduleMode} = "S", CONCAT( "🛑 Requires project Schedule from Completion. Behaves like ASAP", "\\u000a", "⬅️ Predecessors push task start away from project start", "\\u000a", "🤖 Auto Start Date 🔀 Predecessor(s)", "\\u000a", "✏️ Manual Duration ⤵️", "\\u000a", "🤖 Auto Due Date" ), CONCAT( "⏰ Enhanced ASAP", "\\u000a", "⬅️ Predecessors push task start away from project start", "\\u000a", "🤖 Auto Start Date 🔀 Predecessor(s)", "\\u000a", "✏️ Manual Duration ⤵️", "\\u000a", "🤖 Auto Due Date" ) ), "LAT", IF( {project}.{scheduleMode} = "S", CONCAT( "⏰ Enhanced ALAP", "\\u000a", "➡️ Use Successors to pull the task due date away from project end", "\\u000a", "🤖 Auto Start Date", "\\u000a", "✏️ Manual Duration ⤴️", "\\u000a", "🤖 Auto Due Date 🔀 Successor(s)" ), CONCAT( "🛑 Requires project Schedule from Start. Behaves like ALAP", "➡️ Use successors to pull the task due date away from project end", "\\u000a", "🤖 Auto Start Date", "\\u000a", "✏️ Manual Duration ⤴️", "\\u000a", "🤖 Auto Due Date 🔀 Successor(s)" ) ), "" ))


Open to feedback and suggestions and am eager to see if people can further modify this to be even more informative. I hope this makes life a little easier for us and the users we each support!

If you like my content, please take a moment to view and vote on my Idea Requests: https://tinyurl.com/4rbpr7hf
Topics

Topics help categorize Community content and increase your ability to discover relevant content.

0 Replies