The Design of Software (CLOSED)

A public forum for discussing the design of software, from the user interface to the code architecture. Now closed.

The "Design of Software" discussion group has been merged with the main Joel on Software discussion group.

The archives will remain online indefinitely.

Software modules


I'm wanting to add more functionality to my software however I wish to add that extra functionality as a separate "module".

One of the main reasons for this is so that I can charge extra for that functionality - also to keep the original program as a KISS project.

I know how I am going to enable/disable it via my key generator software however I would like to know what is the best way of integrating it. Do I just include the additional coding, db etc as part of the one executable or is it better to have it as a separate dll etc. Or doesn't it really matter?

I would like peoples thoughts so that I don't waste precious time going down the wrong route to start with.

glen harvy Send private email
Wednesday, January 16, 2008
I'd put it in a separate DLL. Two reasons. First, it poses a slightly higher barrier to somebody who wants to crack the new feature. Second, it makes your customer feel like they're getting something new instead of like you've been denying them access to something they had on their machine all along.
Wednesday, January 16, 2008
Avoid the dll nightmare, and simple compile it into your executable. It will result in a larger exe but avoiding the version control and dll hell you may encounter in the future will save you a lot of time.

This will avoid mummy, or dada from draging the dll from the main folder or deleting it because "why is this file here". Resulting in customer support calls/emails asking why they purchased such functionality and now its no longer avaliable.
Entity Send private email
Wednesday, January 16, 2008
Separate EXE's would be a nightmare with more than a few add-ons. 6 add-ons = 36 possible EXE's.

A single EXE using an add-in framework is the best approach, both from your point of view and your customers.

That said I'd think seriously about Basic and Pro Versions and bundle the add-on's into Pro and make it double the price (or more) of Basic. Easier all round.
Neville Franks Send private email
Wednesday, January 16, 2008
I would say that it's a question of the environment/platform you use. More modern environments, e.g. .NET or Java, are more amicable to binary composition. Older environments, e.g. C/C++, are less. If your platform enables you to do binary composition without limiting the interfaces between the modules too much, or introducing problems such as versioning then go with binary composition. Otherwise go with a single executable module.
Dan Shappir Send private email
Thursday, January 17, 2008
> Avoid the dll nightmare

Your application is the only one that will use these dlls, so "dll nightmare" should not apply to you.

That said, distributing a single EXE with all libraries compiled in has its own benefits.
Thursday, January 17, 2008
Stick with the separate dll's and for the tangible reasons that clcr outlines above, but if you need database support structures in your apps database I reccomend that you include those tables, views and proc's at the outset.  It is easy for a customer to run an installer and add a dll to their system.  There are lots of extra risks when you are altering their data with a "feature" upgrade.
Steve Massing Send private email
Thursday, January 17, 2008
as was said the "dll nightmare" really isn't one if the dll's are specific to your app. put them in your program's directory and you're set. the huge advantage of a dll is that if you load it during program execution (with LoadLibrary, etc) you can update the dll from within the calling program. that lets your program update itself by downloading new dlls or versions of existing ones. depending on the app, that might be a big advantage.

best regards,

Tuesday, January 22, 2008

This topic is archived. No further replies will be accepted.

Other recent topics Other recent topics
Powered by FogBugz