CRM

CRosa
Participant

Incurred hours management and reporting

SOLVE

We have products / line items that are associated with blocks of hours purchased for a 1x fee via a deal.  Eg: $5,000 for 100 hours.  When stage = closed/won, we copy those hours to deal property = Total Hours Purchased. The client then incurs time from it sporadically (via external ticketing vendor) which we must report on / get approval to do via email.  eg: You incurred 10 hours this week and have 90 remaining. 

 

What is the most efficient way for our employee user to input the newest hours incurred since the last batch/update  (eg: The following week, they might be entering 5 hour, not the total incurred of 15.) so that it feeds/updates a Total Hours Remaining property or similar?

0 Upvotes
1 Accepted solution
MoustafaPush
Solution
Participant | Platinum Partner
Participant | Platinum Partner

Incurred hours management and reporting

SOLVE

This is one of those things that seems like it should be super simple but it's not. Fortunately there's ways to get around this. 


First let's start with the obviou: If you wanted super simple you could just increment and decrement a "time utilized" field that's on the deal and just have sales do that manually and maybe just leave a record in the deal notes that they've done that and with timeblock info. Based on what you mentioned you don't want to do that though.  That also doesn't give you the ability to track when each block of time was utilized (without manually going into notes) so it's certainly not the most comprehensive solution.

 

Another way to do it is using custom objects (Enterprise needed). You can make a custom object known as "Time Blocks" that ties into the deals and then on each instance of the object you track the hours utilized for that time block. Then you have a workflow that updates the deal property "hours utilized" everytime a "Time Block" has hours known.


Unfortunately Hubspot doesn't allow you to increment a property by a property (you can't have the workflow add the new time block hours to the existing hours) so we can use yet another workaround

 

If the hours are typically integers (1, 2, 3) we can disable the ability to have decimal points on the fields for both time blocks and hours utilized (see below)

 

MoustafaPush_0-1673790196713.png

 

We can also set a maximum value on the time block so account for the maximum any individual time block is (maybe its 3 hours like in your example)

MoustafaPush_1-1673790305467.png

 

 

 

 

Then in the workflow we can have an if statement that goes through all the integer possibilities and updates accordingly. We also make a true/false field to mark if a given time block has been included in the calculation so that it's not double counted. If you rapid fire add time blocks in quick succession without the workflow fully running it might have adverse effects as well.  

 

MoustafaPush_2-1673790392168.png
Well that was an interesting workaround you might say...are we done workarounds though? Nope.

See, as you might have guessed, we need re-enrollment for this to work. Here's the problem though: yet you CANT re-enroll a workflow based on this very specific trigger. I believe the general rule is that Hubspot doesn't allow re-enrollment on conditions that happen on other (associated) objects.

MoustafaPush_4-1673791420370.png

Fortunately, there IS a way around that too -- so you can make a companion workflow which triggers based on time blocks and each time a timeblock is added it updates a property on the deal "new hours?" to "yes", then you use that property to trigger the workflow

MoustafaPush_5-1673791491512.png

That property WILL allow you to re-enroll the deal workflow (the workflow at the time block level does not need to have re-enrollment). You need to make sure that you set it to "no" at the end of every deal workflow so that it's eligible to be primed up again. 

 

 

There's still some points of failure here like you have to instruct your team not to change a time block after it's been loaded or delete it (otherwise they would have to go back and do everything manually), also the way the workflows are since it targets all time blocks you wouldn't want to load up two time blocks in super quick succession. Obviously the integer thing is a limitation as well and having to if/then multiple conditions isn't ideal.

 

 

Ops Hub Enhancements:
If you do have Operations Hub Pro or Enterprise you can get around some of these limitations and make this workflow cleaner through running the action via custom code (a workflow action option in Ops Hub). At that point you wouldn't need the integer limitations and you can work with any numbers since you can add it in the code up or down.  You could also potentially use API calls to pull property history and use that to decrement hours used if the number of hours gets modified on a Time Block object although I haven't tested this.  I believe there was a property history feature on the legacy API, not 100% sure if this is on the current API. Even if not though there would still be ways to decrement if you have ops Hub using another property that stores the previous value of the time block and using workflows to manage decrements through logic that way. 

 

Alternative Method: 
You can also have a custom report that's a pivot table to group up all the hours against an object and use that to check. See example below although here I am doing it against contacts not deals but I can easily do it against deals and possibly compared hours used to hours sold.

MoustafaPush_3-1673790806638.png

If you click on the hours you can see what comprises it as well which is cool. 

MoustafaPush_6-1673792520335.png

 

 

If you don't want to trigger anything off the number of hours and just want to know, you can use this report and not even have to do the workflow I mentioned above. 

 

Other Benefits:

Since you are using custom objects to track time blocks you can actually pack in additional information on the time blocks as well, this could be things like the following

  • Date: Date the customer used the timeblock 
  • Name: Maybe you give a nickname to the time block describing what happened, ex: "One hour marketing consultation session"
  • Contacts: You can tie contacts to know who requested or used that time block. You can do via a text field but more likely you would want to do this via associating a contact to a timeblock (or contacts) to have it really tie into the CRM 
    • This has other benefits as well because you can now do reporting (similar to what I have above) that shows contact usage in addition to deals

Hopefully that answers your questions! I know it's a bit of a complex workflow so if you have additional questions feel free to message me and I can discuss further.


Thanks! 

View solution in original post

3 Replies 3
MoustafaPush
Solution
Participant | Platinum Partner
Participant | Platinum Partner

Incurred hours management and reporting

SOLVE

This is one of those things that seems like it should be super simple but it's not. Fortunately there's ways to get around this. 


First let's start with the obviou: If you wanted super simple you could just increment and decrement a "time utilized" field that's on the deal and just have sales do that manually and maybe just leave a record in the deal notes that they've done that and with timeblock info. Based on what you mentioned you don't want to do that though.  That also doesn't give you the ability to track when each block of time was utilized (without manually going into notes) so it's certainly not the most comprehensive solution.

 

Another way to do it is using custom objects (Enterprise needed). You can make a custom object known as "Time Blocks" that ties into the deals and then on each instance of the object you track the hours utilized for that time block. Then you have a workflow that updates the deal property "hours utilized" everytime a "Time Block" has hours known.


Unfortunately Hubspot doesn't allow you to increment a property by a property (you can't have the workflow add the new time block hours to the existing hours) so we can use yet another workaround

 

If the hours are typically integers (1, 2, 3) we can disable the ability to have decimal points on the fields for both time blocks and hours utilized (see below)

 

MoustafaPush_0-1673790196713.png

 

We can also set a maximum value on the time block so account for the maximum any individual time block is (maybe its 3 hours like in your example)

MoustafaPush_1-1673790305467.png

 

 

 

 

Then in the workflow we can have an if statement that goes through all the integer possibilities and updates accordingly. We also make a true/false field to mark if a given time block has been included in the calculation so that it's not double counted. If you rapid fire add time blocks in quick succession without the workflow fully running it might have adverse effects as well.  

 

MoustafaPush_2-1673790392168.png
Well that was an interesting workaround you might say...are we done workarounds though? Nope.

See, as you might have guessed, we need re-enrollment for this to work. Here's the problem though: yet you CANT re-enroll a workflow based on this very specific trigger. I believe the general rule is that Hubspot doesn't allow re-enrollment on conditions that happen on other (associated) objects.

MoustafaPush_4-1673791420370.png

Fortunately, there IS a way around that too -- so you can make a companion workflow which triggers based on time blocks and each time a timeblock is added it updates a property on the deal "new hours?" to "yes", then you use that property to trigger the workflow

MoustafaPush_5-1673791491512.png

That property WILL allow you to re-enroll the deal workflow (the workflow at the time block level does not need to have re-enrollment). You need to make sure that you set it to "no" at the end of every deal workflow so that it's eligible to be primed up again. 

 

 

There's still some points of failure here like you have to instruct your team not to change a time block after it's been loaded or delete it (otherwise they would have to go back and do everything manually), also the way the workflows are since it targets all time blocks you wouldn't want to load up two time blocks in super quick succession. Obviously the integer thing is a limitation as well and having to if/then multiple conditions isn't ideal.

 

 

Ops Hub Enhancements:
If you do have Operations Hub Pro or Enterprise you can get around some of these limitations and make this workflow cleaner through running the action via custom code (a workflow action option in Ops Hub). At that point you wouldn't need the integer limitations and you can work with any numbers since you can add it in the code up or down.  You could also potentially use API calls to pull property history and use that to decrement hours used if the number of hours gets modified on a Time Block object although I haven't tested this.  I believe there was a property history feature on the legacy API, not 100% sure if this is on the current API. Even if not though there would still be ways to decrement if you have ops Hub using another property that stores the previous value of the time block and using workflows to manage decrements through logic that way. 

 

Alternative Method: 
You can also have a custom report that's a pivot table to group up all the hours against an object and use that to check. See example below although here I am doing it against contacts not deals but I can easily do it against deals and possibly compared hours used to hours sold.

MoustafaPush_3-1673790806638.png

If you click on the hours you can see what comprises it as well which is cool. 

MoustafaPush_6-1673792520335.png

 

 

If you don't want to trigger anything off the number of hours and just want to know, you can use this report and not even have to do the workflow I mentioned above. 

 

Other Benefits:

Since you are using custom objects to track time blocks you can actually pack in additional information on the time blocks as well, this could be things like the following

  • Date: Date the customer used the timeblock 
  • Name: Maybe you give a nickname to the time block describing what happened, ex: "One hour marketing consultation session"
  • Contacts: You can tie contacts to know who requested or used that time block. You can do via a text field but more likely you would want to do this via associating a contact to a timeblock (or contacts) to have it really tie into the CRM 
    • This has other benefits as well because you can now do reporting (similar to what I have above) that shows contact usage in addition to deals

Hopefully that answers your questions! I know it's a bit of a complex workflow so if you have additional questions feel free to message me and I can discuss further.


Thanks! 

CRosa
Participant

Incurred hours management and reporting

SOLVE

Thank you, Moustafa, for this very detailed and thoughtful set of recommendations! We are on Enterprise, so will be investigating those options you described asap and I will update the thread once I have some results to share.  

 

Thanks again - very much appreciated!

MoustafaPush
Participant | Platinum Partner
Participant | Platinum Partner

Incurred hours management and reporting

SOLVE

Definitely! Glad it helped! Let me know how it goes. Happy to take a look at your solution when you're done as well just message me.