In a nutshell, the Service Catalog is a framework that was originally built to simplify creating and presenting products (whether a service or a physical product) from a catalog and attach an execution workflow behind the individual product.  The framework mimics the e-commerce "shopping cart" experience such as Amazon.  At a company that I used to work for, I was thrown into the aftermath of the initial installation projects that included the Service Catalog to organize and clean up the hurried installation as well as standardize and manage the growth over the ServiceNow service management solution.  I saw first hand how not to implement the Service Catalog.  So when should you leverage the Service Catalog or roll your own by extending the Task table?

The basic process flow of the Service Catalog is to select one or more items the client desires that are added to a "cart".  When the order is submitted, approvals are processed over the entire cart aka the "request".  After this initial approval, the "requested items" begin their respective workflows that handles the particulars for fulfillment of each item ordered. (SN has enhanced functionality a bit to include a "one step" submit process.  The same overall workflow is still performed, the customer just doesn't see the cart.)

This framework works well for physical products selectable from a catalog and placed in a shopping cart.  Where you have an intangible service offering, it isn't so straight forward.  At the heart of a service request, it is a task that has a workflow managing its fulfillment.  Approvals may or may not be needed.  A cart is probably not needed since the customer is only interested in a single service request to be performed.  From a developmental standpoint, the question here is whether you extend the Task table for another application or do you create another service catalog item to collect and process a service request?

Some other features to consider from the Service Catalog perspective is whether a service request is intended to be part of a broader process such as new employee provisioning.  Reporting is another consideration.  In a more recent version, variable reporting was introduced.  As of the Fuji release, reporting on variables required open and broad read access to the variables related tables.  There is no granularity over read access for reporting.  Reporting users would have to be all enabled or not.  Depending on the privacy of the information stored as a variable, you may not want to enable variable reporting.

From practical experience, reporting has traditionally driven whether I extend the Task table or simply configure another service catalog item.  I was not comfortable to open access on the variables table so that the basic "itil" roled user could report on variables.

Below are some lessons I learned from contending with a cleanup over the Service Catalog.

  • Do not modify the Service Catalog framework itself (namely the business rules) under the Request and Requested Items tables.  REPEAT: DO NOT MODIFY THE SERVICE CATALOG FRAMEWORK ITSELF.  Use it as it comes.  Service Catalog has matured and seems to continue to evolve.  Making mods to the SC framework will make it difficult to upgrade and enable new features as the baseline software is enhanced over time. 
  • Standardize approval workflows.  Consider making "template" workflows to get you started on a new workflow, or experiment with subflows to normalize approval workflows.
  • Maintain a separate product catalog appropriately for the type of product being offered (e.g. desktop workstations versus software packages versus service offerings).  You can create your own product catalog that will help to better organize presentation of catalog items by category or type.
  • Avoid "streamlining" by creating a single multi-value variable over a table in which the individual items each require its own fulfillment (e.g. the Configuration Item table for multiple software selection).  Approvals have to apply to all items selected and not related to individual items selected.  From the workflow automation perspective, it becomes more difficult to manage individual approvals related to each item selected.  Take a look here for some information over approval engines.
  • If the requirements of the Service Catalog Item doesn't fit the basic shopping cart experience (i.e. Request with one or more Request Items), each with it's own workflow process, consider extending the "task table" specifically for that purpose.

One regret I had for using the Service Catalog as the solution was a scenario where an intermediate group took a Requested Item and further defined detail requirements before passing on the request to one of a number of fulfillers depending on another (related) Catalog Item, each requiring a different workflow for fulfillment.  I was successful at being able to create another Request/Requested Item and relate the two Requested Items together into one Request out of the primary workflow of the first Requested Item, but was a bit of a mess in managing the two Requested Items in tandem due to one being subordinate to the other though peers.  If I had it to do over again, I would have extended the "task table" and rolled my own, possibly creating an independent Request/Requested item for fulfillment and maintain a related list to the custom task table extension.

One subject that needs mentioned is the Catalog Task.  As of Fuji, Catalog Tasks are a generic task that is subordinate to the Requested Item and initiated and maintained out of the workflow for the Requested Item.  There is only a single workflow (or set of workflows with conditions for execution) that can be defined generically for all Catalog Tasks as any other table (except the Catalog Item table) with no regard to any one Catalog/Requested Item.  This limits how you develop around the Catalog Task to better manage fulfillment tasks between departments.  I would like to see a future enhancement where a configuration table similar to the Catalog Item table that associates a named workflow that is automatically initiated that would provide a specific workflow under a Catalog Task as it would pertain to the related Request Item.  As it exists today, you'd have to add a custom attribute to the Catalog Task table for a "category" and condition all workflows based on that category for execution.  Since the Catalog Task is generic, more than a few conditional workflows would affect performance as well as become convoluted since its maintenance is over all Catalog Tasks. 

Tuesday 18th of February 2020 -  Copyright 2016 Allan Wolfe