I’m going to beat the service scheduling horse one more time. That last time I posted on this topic I provided some information about the scheduling models that CRM’s service scheduling can handle. In that previous post I noted that service scheduling in CRM is a great fit for field service companies: it allows service managers to define resources and schedulers to locate resources with specific skills to satisfy a request but one of the things that’s missing for out-bound service scheduling is a sense of which resource is closest to a service location.
When we were building service scheduling for MS CRM 3.0 we designed it so that it could have pluggable scheduling objectives. That's how we designed it anyways. The truth of it is that we have only a few scheduling objectives that we ship with ("Random", "Least Busy", and "Most Busy") and because of schedule pressures we had to lock down the extensibility around this so it currently isn't possible to add new objectives. One of the objectives that we discussed most was a "Closest" objective where the scheduling engine would return a list of results to schedulers with the first items being the resources closest to a service location. While I still want to extend the scheduling engine to allow for pluggable objectives I've decided that a "Closest" objective isn't necessarily the best thing: you can do this today with a simple Virtual Earth mash-up and you can provide a much better end user experience.
Here's how you might do it:
- Using the CRM SDK query the scheduling engine for available resources.
- For each of the resources returned, retrieve their latitude and longitude coordinates from CRM (likely with updates from a GPS service).
- Write the results into a W3C Geo file.
- Using client programming point Virtual Earth to the W3C Geo file to map the resource locations.
This is embarrassingly simple to do and to prove it I'm posting some embarrassing code on the CRM Sand Box that shows how to do this.
The idea here is that once you've selected a resource, the link under their name will schedule the service appointment for them and then load the Service Activity form for the user.
So how is this a better user experience than a static list of available resources? Take a look:
It's a little quick and dirty on the presentation but you get the idea immediately.
Users of CRM need to see information in forms other than just lists and grids. Powerful visualizations like the one above allow users to make better decisions with the information that is being presented to them. Visualizations like this presume that users of the system are bringing some knowledge and skepticism to the system (in this case, a sense of which resource really is closest to the customer) as well as adding value to the process (e.g. "Okay Mr. Trefethen, Ilana Smith will be coming by to take care of your service request. She's in building 25 right now and should be over in less than 10 minutes").
So I started with a post on how to add geographic data to service scheduling and ended on a note about providing better customer and end-user experiences through better software. Given that the whole point of service scheduling was to empower business people with technology to help them better serve their customers that isn’t so surprising.