Measuring On Time Delivery (OTD) - Help!



I just started tracking OTD for our Marketing Team, measuring only work that comes through our Marketing Request Form.

To track this, I have set up a formula custom field called "OTD" -- [Due Date] - [Completed Date].

I then set up a report so that I can filter the OTD column to see all negative outcomes (these are overdue).

THEN, I set up another checkbox custom field called "OTD - Overdue" and manually check the ones that are negative, this way I can use the checkbox custom field in the New Dashboards to generate a visual pie chart showing our 99% OTD.

The problem with this process is:

1. it is manual!

2. not all requests are ACTUALLY overdue, sometimes they sit in the "IN REVIEW" workflow longer than expected and end up getting marked "completed" after the requested due date, resulting in a Negative number that looks overdue. This is manual to review.

3. we have a date custom field called "Requested Final Due Date", this is filled out automatically based on what the requester inputs on the request form. Marketing needs to approve this requested date before working on it, we then set the ACTUAL due date a week before it to allow 1 week of review time. Sometimes the due date doesnt get updated to the actual requested due date when marked complete, so it then looks overdue.

Is anyone else tracking this metric or have any tips or advice to eliminate the manual work and help make this data more accurate?

👍 Spot On 💡 Innovative Approach 💪 Stellar Advice ✅ Solved 🪄 Remove Kudos

Katie Johnson would automation not solve your problem? 

The automation I can think of (I did not try but I hope it works)

- When "OTD" Changes

- and if "OTD" < 0

- then set "OTD - Overdue" to checked

I think that should work.

👍 Spot On 💡 Innovative Approach 💪 Stellar Advice ✅ Solved 🪄 Remove Kudos

Sven Passinger I don't think there is currently a way to set up an automation based off a Formula Custom Field, because its not showing up as an option to use when I try setting the trigger/condition within my automation rules. I have the Custom field set to the Entire Account too.

👍 Spot On 💡 Innovative Approach 💪 Stellar Advice ✅ Solved 🪄 Remove Kudos

Katie Johnson you are right. I just checked. I can also not see our calculated fields. 

Then it would be possible via API. For all the restrictions Wrike has we use a Jenkins Server which goes into Wrike via API and makes al lot of caluclations, checks and settings. E.g. we calculate some values via API because the calculations are too complex for the simple metric in Wrike and also checking if somebody uses wrong status or workflow we do via this.

👍 Spot On 💡 Innovative Approach 💪 Stellar Advice ✅ Solved 🪄 Remove Kudos

Even with the automation, I'd be curious what system you have in place to resolve the issue of requested due date not being updated. With all the other elements automated I still see this as a significant hurdle. I do know you can do automations based on custom fields so is there a separate automation that could be made to remind project leaders or those responsible to update the Actual Due Date based on another element? e.g., if the Requested field doesn't change in a certain time frame.

👍 Spot On 💡 Innovative Approach 💪 Stellar Advice ✅ Solved 🪄 Remove Kudos

Agreed with the custom fields (calculated CFs) and automations - a good suggestion for a product feedback post!  I like the combination of Eric and Sven's answer - not only can you apply an automation rule to remind a user to update the dates after X# of days the due date has passed - you could also change the workflow status to "pending" or something like that, which would filter out those tasks that are not "actually" overdue... so you can rely a little more on the data being accurate.  Also Wrike Analyze may offer the calculation as you can create more formulas within the Analyze Formulas

👍 Spot On 💡 Innovative Approach 💪 Stellar Advice ✅ Solved 🪄 Remove Kudos

Hi Katie Johnson,
you need to use an external system or API to achieve your goal.

The costless options are:

1- Use Zapier
2- Use Wrike Sync
3- Use API

With Zapier, if the frequences of ODT task are not so much can be totally free.

You need to setup 2 workflows in Zapier:

1- Every time ODT is filled write the Task ID into Google Sheet
2- Every time in Google Sheet appears a new row, take Task ID from Google Sheet to retrieve task in Wrike and change "OTD - Overdue" as checked

The same you can do with Wrike Sync, the logic is the same.

For API you need only to write some code raws, something like this. I've not tested but I can help you if you can use API.


$clientId = 'YOUR_CLIENT_ID';
$clientSecret = 'YOUR_CLIENT_SECRET';
$accessToken = 'YOUR_ACCESS_TOKEN'; // Obtain this via OAuth2

$wrikeUrl = '';
$tasksUrl = $wrikeUrl . '/tasks';

function fetchTasks($accessToken, $tasksUrl) {
    $ch = curl_init($tasksUrl);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Bearer ' . $accessToken));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $response = curl_exec($ch);

    if ($response) {
        return json_decode($response, true)['data'];
    } else {
        return [];

function updateOverdueTasks($accessToken, $tasksUrl, $tasks) {
    foreach ($tasks as $task) {
        $otdValue = $task['customFields']['OTD_FIELD_ID']; // Replace with your actual OTD field ID
        $isOverdue = $otdValue < 0;

        // Assuming 'OTD_OVERDUE_FIELD_ID' is the ID for "OTD - Overdue" custom field
        $updatePayload = [
            'customFields' => [
                'OTD_OVERDUE_FIELD_ID' => $isOverdue

        $updateUrl = $tasksUrl . '/' . $task['id'];
        $ch = curl_init($updateUrl);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Bearer ' . $accessToken, 'Content-Type: application/json'));
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($updatePayload));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        $response = curl_exec($ch);

        // Handle response here (e.g., check if update was successful)

$tasks = fetchTasks($accessToken, $tasksUrl);
updateOverdueTasks($accessToken, $tasksUrl, $tasks);
👍 Spot On 💡 Innovative Approach 💪 Stellar Advice ✅ Solved 🪄 Remove Kudos

Hi Katie

Is your requests located in a folder that is somehow seperate from other types of tasks or is the workflow exclusively used for this type of request? 

I'm thinking maybe automations could be an option if you can base it off of location and/or workflow, however, that depends on your processes revolving around the requests and delivery of the tasks 🤔


A few things that may be inspirational, though it does not directly solve the OTD tracking specifically

We use Wrike to project manage our deliverables to client's so not delivering on time is not really an option, and we are quite dependent on workload, so tasks can be rescheduled if needed, and accordingly (usually in collab with the client or we can shuffle other tasks without impact on any clients). 
To combat that tasks end up in the overdue tasks graveyard, when they're actually not really overdue, we've created an automation that tags the assignee as soon as an active task in a certain workflow becomes overdue by midnight, letting the assignee know they forgot to mark their task done or remind them that they need to reschedule ASAP in collaboration with the project manager in case others af dependent on the completion.

We also work with ad hoc requests that have a specific request-workflow, which includes a QA/review status, once the assignee changes status they must add approvers. We use the same concept on a Prebooked status.
In addition to this we have created automations reminding the approvers depending on different terms for each status.
This way we have seen that tasks rarely become overdue and approvals are also carried out within the deadline 🤓

👍 Spot On 💡 Innovative Approach 💪 Stellar Advice ✅ Solved 🪄 Remove Kudos

Katie Johnson,

Do you have Wrike Analyze? I would try this with Wrike Analyze. You could have a report that does this calculation.

👍 Spot On 💡 Innovative Approach 💪 Stellar Advice ✅ Solved 🪄 Remove Kudos

Hi, I think that if you don't have Wrike Analyse, a (still manual) way of presenting this data would be to use Dashboards. You can select all the card statuses that don't make sense for your calculation, for example the "review" status. 

This way, the field does the calculation and in the presentation dashboard you only bring up the data that makes sense to the team or manager. 
In addition, as other colleagues have suggested, you can use automation to remind someone to complete a card or keep the status up to date. 

In my team, we use various automations to simulate the "flow of conversations" in different teams, so when something goes to "Approval" in the execution team, the flow changes to "Decide approval" in the service team, so that in a "backlog" chart, the demands that are overdue and in "approval" status are not shown. 

Translated with (free version)

👍 Spot On 💡 Innovative Approach 💪 Stellar Advice ✅ Solved 🪄 Remove Kudos

we have a similar situation where in OTD of tasks is very important to use.  Whether with API or without, the key problem we came to face, is the lack of the admin's ability to lock a Custom Field for certain users.   Unless certain fields can be locked so they are not edited by anyone else except the manager, the data in reports comes up as incorrect.   there is an ongoing discussion regarding this : 

👍 Spot On 💡 Innovative Approach 💪 Stellar Advice ✅ Solved 🪄 Remove Kudos

Folllowing List for Post: Measuring On Time Delivery (OTD) - Help!
[this list is visible for admins and agents only]

Didn’t find what you were looking for? Write new post