Question

In a situation where you have something like a Lite, Normal, Ultimate tiers and overlapping feature sets that may have reduced functionality what would be the easiest way to keep things simple from a development standpoint?

I've only worked with applications that had either a monolithic license, a sub feature license where specific components/features were enabled/disabled, or a seat/resource license. I have a few ideas, but some fresh insights would be good.

Was it helpful?

Solution

I've worked on applications with service tiers. While this might not be the best way, here is how I've seen it done.

1) Figure out which features are common to all tiers. Common features don't need any logic to them as they are available to everyone.

2) Features that are not common should be broken out in a granular way. so they can be enabled/disabled one at a time.

3) Assign a matrix of features to tiers.

We had a licensing app that was basically a bunch of checkboxes of all the granular features. Choosing "Lite" would check the appropriate boxes so when the license code was generated, it would include those features.

On startup the license server was securely queried. (This was a server app, so it didn't start/stop very often, and internet was guaranteed) A list of allowed features would be returned to the application.

In the code you just check weather a feature is enabled and let the licensing server figure out what tier the user is on.


Another way i've seen in PC Games for demo disks is to have a compilation target for each tier.

#DEFINE TIER_NORMAL 1

#DEFINE TIER_LITE etc.

then

#ifdef TIER_NORMAL

do tier normal stuff

#endif

Note you have to keep track of 3 different binaries, which can be a pain. But the upshot is you have no code delivered the user didn't pay for. Might be easier in a smaller project than getting the licensing server right.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top