tags:

views:

89

answers:

2

Are there any standard or "best practice" ways of limiting feature functionality for a particular application?

Example: We have a product with a variety of features, and our customers can pick and choose which features they would like to use, and the cost of the product varies based on which features they are actually using.

In the past, we have distributed along with our software installer an encrypted license file that contains information about the customer, as well as the collection of features that they have enabled. In code, we read from the license file and enable the functionality according to the license file.

This seems to work fine, except there a few disadvantages:

  • Upgrading users with new functionality can be sort of a pain
  • If a particular feature shows up in multiple places throughout the application, a developer might not realize that this feature should be licensed, and forget to check the license file before granting functionality to the user
  • If the license file becomes corrupted, deleted, moved, renamed, etc. the application will not run

We're getting ready to roll out a new set of features, and I was just curious what others in the community have done to tackle this problem?

A: 

There are usually 3 common approaches to this:

  • using fixed program versions (each version just adds features, you can't customize which features you want or not). You can use also "subversion", like basic and pro edition for Software x.0. Windows uses this approach.
  • Having modules of functionality, which are a product as themselves. Matlab uses this approach.
  • Having a software with basic functionality, and then having plugins, or extra apps for sale. Eclipse uses this approach (though it's free)

You can mix those approaches also for a better customizability.

Samuel Carrijo
Thanks for your input, all of these are certainly "better" than what we currently have in place. Above all, I think the plug-in framework makes the most sense!
ph0enix
+1  A: 

Why not break down the product into modules like Matlab? Then charge for each module. The licensing can be kept online and the end user just needs to download the module to enable the feature.

Pyrolistical
I would need to do a little research to see how we might actually make this work for us (if it's even necessary), but I agree that some variation of this would likely be the best alternative.I also like the "plug-in" option, as noted by @Samuel_Carrijo below, but again, some research would be required to see how to actually make it work.Thanks for your input!
ph0enix