Friday, November 18, 2011

Lesson 1: Licensing is part of Software Engineering

For the better part of this year, 2011, I was involved in the commercial release of a novel 2D to 3D conversion software, FlexiDesign. During the development, test and release to manufacturing (RTM) of FlexiDesign I picked up a few nuggets of knowledge and experience that I don't hear being discussed often, especially in this cloud-centric world. Perhaps it was discussed fervently a decade or two ago when desktop technologies were cool, but still relevant today since not all technologies are ready for the cloud (just yet).

One of the lessons I learned during the final development sprint was how important it is to incorporate the requirements of a License Manager early in the development cycle.

Briefly (for the impatient):

  1. The License Manager requirements should be considered as part of the rest of your Software Engineering tasks
  2. The License Manager should support Network Licenses
  3. The License Manager must be customizable (preferably through API)
  4. The License Manager should support DLLs in addition to EXEs
  5. The License Manager should preferably be the same as the host CAD system
In Detail (for those of you who are still reading):
  1. The License Manager is part of Software Engineering
    While most desktop applications can incorporate an off-the-shelf License Manager, the requirement has to be dealt with more carefully when you are developing CAD Add-Ins. While you can simply bolt on many License Managers on to a regular non-add-in product, it may not be possible to do so with CAD add-in products, since the CAD system may need to talk some parts of your product without any limitations and you want to protect/lock other parts of you product. For example to register an add-in with  SolidWorks, you need to make sure that the ConnectToSW(), DisconnectFromSW(), RegisterFunction() and UnregisterFunction() are not locked away by your License Manager. Else your add-in may not load at all.
  2. The License Manager should support Network Licenses
    Another requirement that has high priority is the availability of Network Licenses. CAD Administrators don't want to maintain separate licenses per PC, since that is very inefficient and time consuming. So the License Manager you select must be available over the network for your add-in to connect to validate the license. This also limits the potential candidates of License Managers leaving you with even fewer choices.
  3. Customizable License Manager (preferably through API) AND
  4. License Manager should support DLLs
    With FlexiDesign, we realized that the default behavior of most License Managers is to prevent the licensed software from running. With CAD systems, add-ins are loaded on startup and preventing the DLL from loading (e.g. if the license for your product has expired) might prevent the CAD system from starting up - which most people may agree is not a good thing.
  5. Same License Manager as the host CAD
    If at all possible, your License Manager should be the same as the the one your CAD system uses. This is not normally possible, but if you build for Pro/Engineer then I believe they use FlexLM License Manager ( SolidWorks seems to use an in-house build License Manager - SolidNetWork License Administrator (if I got the name right). 
So after all those details, the License Manager we selected for FlexiDesign is ........ for me to know and you to find out. Sorry. Can't reveal company information.

If you are interested in cracking software licenses, then I found a nice starter article at, though I don't personally recommend such possibly illegal activities.

Monday, September 05, 2011

Back after a long break

If you have been following my blog I apologize for not posting for so long. My last post was in Nov 2010. If you were wondering where I disappeared to, rest assured I have a valid reason.

I have never spoken about my day job and I finally am able to. I work for Imagecom Inc. a company in Arlington TX that has spent the last few years developing an absolutely unique, radical CAD solution. While the  product (which I will talk of soon, hold on to your hats), is not a new idea, the solution that we have come up with is one that is not available anywhere else.

The product is called FlexiDesign. It is a semi-automated 2D drawing to 3D model conversion tool that fits in the CAD system of your choice. The resulting 3D model is fully parametric and feature-based.

If you have worked in the CAD domain, either modeling or developing CAD apps or add-ins, you have definitely heard of automated, semi-automated or manual 2D to 3D conversion tools. Some are:

There may be others, but these are the more well known ones and are from the big boys, each part of the oligopoly that is the CAD industry.

In the next few posts I will be talking about some of my experiences developing a CAD Add-in product/solution. While my plans are not finalized, I hope to discuss topics like licensing, CAD API (the good and the bad), development practices, and my favorite topic - testing. A lot of the tools that I have uploaded as part of this blog were instrumental in developing and deploying FlexiDesign.

So keep an eye on this blog and I will keep it updated as often as possible.