This gets talked about from time to time; I'm surprised it's not a more popular feature request on the idea exchange. This is the one with most votes I could find:
https://experience.workfront.com/s/idea/0870z000000PSBEAA4/detail I refer to it as "status duration," if you want to do more searching in the community.
We've settled on adding a section at the bottom of our issue form called SLA AUDIT - TIMESTAMPS. It contains a calculated field for every issue status we have, which gets stamped with the date and time an issue entered that status. This is a calculation for one such field called "Timestamp Validating" that captures the point in time an issue entered the "Validating" status:
IF(Status='VAL',IF(ISBLANK(Timestamp Validating),$$NOW,Timestamp Validating),Timestamp Validating)
Repeat the above for every issue status. The second part of this is having calculated fields that determine the difference in time between one timestamp and another. We put all these in a separate section called "SLA AUDIT - STATUS DURATIONS"
These calculations check to see if timestamps have been logged in the first section. If they have, then they display the difference in time between the two relevant timestamps. If one has, (for example "New"), but the next hasn't (for example "Validating"), then it displays the difference in time between the "New" timestamp and $$NOW.
This solution is flawed in a few ways, the most notable being that for it to work reliably, statuses must consistently follow the same pattern. As soon as something goes on Hold, or backwards in the pattern, or anything that doesn't follow the pattern correctly, it stops capturing reliable data.
I think Doug Den Hoed may have a product in the AtAppStore that speaks to this; and I believe Narayan Raum has made relevant suggestions that involve Notes reports, if you want to do some deeper digging here in the community site.
William English T-Mobile
If you like my content, please take a moment to view and vote on my Idea Requests: https://tinyurl.com/4rbpr7hf