Skip to main content

We are using Enhanced Scheduling and Optimization and are trying to make customer appointments schedule earlier within their respective arrival windows, ahead of most non-customer work when feasible.  

 

Our customer appointment windows are generally: 

  • 8:00 AM to 12:00 PM
  • 12:30 PM to 5:00 PM
  • 8:00 AM to 5:00 PM

 

For example, if a customer has an 8:00 AM to 12:00 PM window, we would prefer the optimizer to schedule the appointment closer to 8:00 AM rather than 12:00 PM, provided the earlier placement is feasible. 

  

The business reason is that non-customer work is generally more flexible. If an emergency such as a gas leak or damaged gas line occurs later in the day, we would like more customer appointments to have already been completed, allowing non-customer work to move later or remain unscheduled. 

  

It would also improve customer satisfaction because customers would be less likely to wait until the end of their appointment windows while technicians perform non-customer-facing work, such as reading meters or disconnecting service. 

  

We understand that prioritizing customer appointments in this way will probably increase overall travel, may cause technicians to backtrack when returning to non-customer work, and could reduce the total amount of work scheduled. Management understands and accepts those potential tradeoffs. We are specifically looking for technical solutions that will favor earlier customer appointments, even when the resulting schedule is not the most travel-efficient option. 

  

What we have tried

 

We created a customer-specific ASAP objective using a Service Appointment relevance group based on IsCustomerAppointment__c = TRUE. 

  

Our current pilot policy includes approximately: 

 

  • Customer Appointment ASAP: 90
  • General ASAP: 10
  • Same Site: 15
  • Preferred Resource: 10
  • Minimize Travel: 5

 

We have significantly increased the customer-specific ASAP weight and reduced Minimize Travel, but customer appointments are still frequently scheduled near the end of their arrival windows, after several non-customer appointments. 

  

In a sandbox, we also created an additional Boolean formula field named IsNotCustomerAppointment__c, which identifies non-customer appointments. We then created a separate ASAP objective using that field in a relevance group and assigned the non-customer ASAP objective a much lower weight than the customer-specific ASAP objective. The intention was to give customer appointments a much stronger ASAP preference while still giving non-customer work some scheduling importance. We did not see significant improvement from that configuration either. 

  

Our understanding is that when multiple appointments are evaluated during optimization, the ASAP objective scores candidate times across a range of up to 30 days. On that scale, the scoring difference between scheduling an appointment at 8:00 AM and 12:00 PM is extremely small. Even a low-weight objective such as Minimize Travel can outweigh several hours of earlier placement. 

  

We are also testing a Match Time rule that prevents a customer appointment’s Scheduled End (SchedEndTime) from being later than 30 minutes before ArrivalWindowEndTime. This eliminates some very late placements, but because it is a rule, it is a hard constraint rather than a preference. We are concerned that tightening it further could cause otherwise schedulable customer appointments to remain unscheduled. 

  

Dynamic Priority appears useful for determining which appointments are included when capacity is limited, but we have not found evidence that it controls where an appointment is placed within its arrival window. Based on our understanding and testing, it primarily influences which Service Appointments make it onto the Gantt, not the chronological order in which the scheduled appointments are placed. 

  

Questions

 

  1. Has anyone successfully configured Global or In-Day Optimization to prefer customer appointments earlier within their individual arrival windows?
  2. Is there an out-of-the-box objective, work rule, scheduling-policy configuration, or ESO setting that we may have overlooked?
  3. Can the ASAP objective’s 30-day scoring range be shortened or customized, perhaps through Salesforce Support?
  4. Has anyone successfully used multiple customer-specific ASAP objectives to amplify the ASAP score beyond the normal maximum weight of 100?
  5. Is the FSL__Service_Goal__c Custom Objective record type supported for customer configuration? When we attempt to create one, Salesforce requires FSL__Custom_Logic_Data__c and FSL__Custom_Type__c, but we cannot find documentation explaining the supported format or authoring process.
  6. If Custom Objectives are supported, can they evaluate each hypothetical candidate’s scheduled start time? We would like to calculate something similar to:

 

WindowPosition = (CandidateStart - ArrivalWindowStartTime) / (ArrivalWindowEndTime - ArrivalWindowStartTime)

  

A candidate at the beginning of the window would receive the best score, while a candidate at the end would receive the worst score. The important requirement is access to the optimizer’s hypothetical CandidateStart, not the Service Appointment’s currently persisted SchedStartTime. 

 

  1. Are there other successful approaches, such as staged optimization, separate policies, tighter preferred subwindows, or another method that favors an earlier placement while still allowing a later placement when no reasonable early option is available?

 

We would appreciate hearing from anyone who has solved a similar requirement, especially with Enhanced Scheduling and Optimization. We are open to an out-of-the-box configuration, a Salesforce-supported custom objective, or another practical design. 

  

We recognize the travel and productivity tradeoffs, so our primary question is not whether customer-first sequencing is the most efficient routing strategy. We are looking for ways to configure or extend the optimizer to accomplish this stated business requirement. 

답변 2개
  1. 8월 13일 오전 5:35

    Hey @Mark Pennel lot of questions and I mean there is not that one option, rule or objective. You have to combine, play a bit and test. You could also think about the option to book over lower priority  "Prioritize Field Service Appointments for Optimization" details you find here

     

     

0/9000