As an engineering and product management team tasked with designing license enforcement into your products, you have many decisions around how your products will interact with the licensing code.  Here’s a proven technique that will help you control how licensing gets implemented across your product lines while making the product teams’ lives easier at the same time: build an abstraction layer.

What is an abstraction layer and what does it do?

Your abstraction layer will sit between your products and the licensing technology like Sentinel RMS or Sentinel HASP. We will use HASP as an example from here on out.  You would develop your abstraction layer centrally so all your product teams can use it. The layer serves as a broker between your products and HASP. The layer contains common licensing services that can be used across your products and exposes licensing APIs to the products.  The illustration below shows how your products will be engineered to only talk to the abstraction layer and not with HASP directly.

Why is this good?

The abstraction layer should only expose necessary APIs to your product teams. This makes it easy for the product teams to integrate licensing into their products because they do not need to know about anything about HASP.

The abstraction layer can contain standard licensing messages and interfaces. This ensures a consistent customer licensing experience across product lines. For example, if a customer is using Product A and Product B and neither can find a valid license, the user should get the same error for both products.  By having a clean error messaging as part of the abstraction, the product teams can simply call the message and they do not have to engineer their own messaging.

The abstraction layer approach allows you to make centralized licensing changes that affect all your products. For example, if you wanted a new version of the product to lock to a disk id as well as the MAC address, only the abstraction layer would need to change and the product teams would build with an updated layer. In this case the product teams would be completely insulated from the change.