I frequently get asked: What’s the difference between resolved and complete? Why do I have more than one version of “Done”?
On my workflows (when I’m running a team) I usually remove the Resolved status. I prefer to make sure the resolution field options are appropriate and use workflow transitions that go to a single Done status.
Now you may be thinking:
The Jira Default Workflow is a best practice based workflow that’s been in use for many years. What do you mean you remove the resolved status?
I’m used to running my projects a certain way. Your mileage may vary. If it’s useful for your team to use the Resolved status, please use it! This is why I usually remove it.
I remove any additional Done status to reinforce that my team has a single common understanding of what we mean by "Done." It’s much easier to commit to our work when everyone on the team has a common understanding of what "Done" means. Having multiple statuses that all communicate different aspects of Done, and being able to see these multiple Done states by viewing the workflow, either contradicts or fogs our understanding of what we mean by "Done."
This approach is very useful with other more complex workflows as well. For example, below is the Information Technology Services Management (ITSM) certified Service Request workflow that’s provided with the IT Support Jira Service Desk project configuration.
This workflow has three statuses that are considered Done:
To see what work we’ve completed this week I’d have to use this Jira Query Language (JQL) search:
status in (Cancelled, Resolved) AND updated >= -7d
You’ll notice that we need to move from Resolved or Cancelled to Closed, but Resolved, Cancelled and Closed all mean we’re Done. To avoid matching those updates, I do not match on the Closed status. It’s ironic that, in this example, the ultimate final Done state is not used to see what we’ve completed.
Here’s what that workflow looks like after I’ve applied my changes.
Let’s zoom in on how we get to Done and show the transition labels.
Now everything leads to one Done status. To see what work we’ve completed this week, we can create a filter (by saving a search) with this JQL search:
status = Done AND updated >= -7d
If I want to know why we’re done with that issue, that’s exactly what the Resolution Field is for.
To see all the issues that were marked Done because we really finished work, we just add the Resolution field parameter “resolution = Done” to that search.
status = Done AND resolution = Done AND updated >= -7d
To see work marked Done because those issues were cancelled, we just add the Resolution field parameter resolution = “Won’t Do” to that search.
status = Done AND resolution = "Won't Do" AND updated >= -7d
One last thing: To keep the resolutions data clean, I update the Transition Properties for the Resolve this Issue and Cancel Request transitions, so the resolutions that are appropriate for those events are the only ones available. If we follow the Resolve This Issue transition, we shouldn’t be able to set the resolution field as Cancelled, Duplicate or Won’t Do. For the same reason, if we follow the Cancel Request transition to Done we shouldn’t be able set the resolution field as Completed, Finished or Done.
To set the Transition Properties refer to these instructions. You add a Property to the Workflow called:
You set that property with a value of the resolution ID. This is because Jira is localized for over 20 languages so you don’t want to match the word used for a Resolution in just one language.
You can provide a comma separated list of Resolution IDs. To find the Resolution ID, I use a REST call in my browser to retrieve a JSON list of all the resolutions. The URL is: https://<YOUR Jira DOMAIN NAME GOES HERE>/rest/api/2/resolution.
The response has the ID listed for every resolution. For example here’s the first line of the results from our server:
"self":"https://<YOUR Jira Domain Name IS HERE>/rest/api/2/resolution/6","id":"6","description":"","name":"Done"
So the ID for the Resolution of Done is 6 because the second key value pair is:
This means on the Cancel Request Transition, I’d set the property jira.field.resolution.exclude to the value of 6.