I need to be able to demo our production application to prospective clients. The way I have it setup today is simple. The demo application is an exact duplicate of the production system, except that the data in the database is obfuscated to protect our current clients' data. This works great because it doesn't require any application changes.
Boss dropped a potential BOMBSHELL today and said that the demo system needs to contain a special link and that ONLY shows up on demo. He went on to explain that in the future there may be much bigger differences between the demo and production apps (e.g. an entire area of functionality). What do I do now?
Some things I have thought about doing:
- Maintain a different branch in subversion specific to the demo system
- Create an installation package that has the changes for demo, then revert and build a production installation package
- Modularize the application (no idea how)
- Say: "Screw you! I will not do it!" (LOL)
- Use some sort of conditional logic in the app to determine if it is a demo or a production app. E.g. (if the URL contains 'demo' then show else hide).
If you haven't guessed by now, this is a web application
Anyways, I have no experience in this scenario as to which one is better or if none of these are any good. Anyone have an answer, strategy, something!?
Best Answer
Maintain a different branch in subversion specific to the demo system
Create an installation package that has the changes for demo, then revert and build a production installation package
When you think of a Demo product (unless you are talking about trail versions) - don't think like a 'separate product' but think of it as a 'separate environment'. If you and me both install word-press engine in our respective sites, we will have same product but different data. You must architect your product such that installation (and usage) specific stuff - can be created like how one create different content sources. Similarly, for example - you are making a native .Net or JAVA application, the functionality remains the same - but where it get's visuals (including splash screens and buttons) from can be different folders to show them in different form. Later on - the demand will come to even alter the layouts - that's when you know you need more template stuff!
Don't jump for the modularization in one-shot. As and when requirement comes, first begin a separate branch (line of development) and give the demo! (Because all demos are typically next day morning 10:30 AM). The deviation you now created tells you what modularized should have been there to be picked up from external resources. Apply that and merge it back- next time same demo would be your standard version (with different URL).
Almost always if you end up making "separate product" as a demo - you are inviting trouble or pain or both!
Dipan.