I am sure, we are ALL familiar with the situation:
Morning… The sun is shining, the birds are chirping… You are sitting in front of your computer, sipping a delicious cup of coffee. Then, in the corner of your eye, you spot movement; your VP Marketing approaches you with a big smile on his face:
“Jonathan”, he says, “Just got important news, we have a big opportunity! We have been requested to demonstrate our super complex web analysis capabilities to a huge potential client. Could we build a quick demo?”You sigh and start coding…
You don't sleep neither eat; you copy and paste; you code; you build and execute and after stressful (but, yes, enjoyable) five days you provide a top-notch Demo.
The new “toy” becomes the hottest news in the office.
It’s cool, it's fast, it's colorful and it demonstrates an innovative functionality and thinking!
The VP Marketing is in heaven; he presents the demo to the client and gets an enthusiastic response.
“Jonathan”, his eyes are gleaming, “They are excited! They just need a small feature - export to excel, to evaluate it a little bit more.”You return to the operating table and add some “quick & dirty” code to export the analysis to excel.
“Jonathan”, your VP Marketing, “Great work! Could you also add a small feature of notification by email?”A few days later…
“Jonathan, Well done!, Could you also add…”A year later, you find yourself maintaining the demo and cursing that cheerful morning you had agreed to develop the goddamned application!
If you ask your VP Marketing what happened, he will honestly say: “Dude, I blew up the demo!” Remember the Honey, I blew up the kid!? Your VP Marketing, "accidentally", blew up your five days old “child” into a giant “monster”.
It’s common for a small-mid size companies to turn their “demo” applications into production ones. The “time to market” is crucial; once the demo was introduced successfully, the features are added patches over patches resulting in a House of Cards AntiPattern.
House of Cards AntiPattern – a continuous patch (card) over patch (card) which is done in order to correct a bug or to add a focused feature without design or refactoring considerations.
Even in a small demo application, there is a place for a careful examination of the developed features. You can make assumptions; you can speed-up the UI development, but you need to design the core features, as you develop the production code:
- Separate the Domain from the Presentation, using MVP pattern for example.
- Use Façades to shadow the BL.
- Provide a well organized BL. (Don’t try to address all the future possibilities and requirements. Just provide good object oriented basis).
- Don’t duplicate code, don’t provide lengthy and hard to read methods.
- Provide Unit Tests and test the BL as much as possible.
- Deal with “considerable”exceptional situations (It’s OK to decide not to deal with uncommon demo scenarios).
Undoubtedly, it will ease the development of any additional “demo” features for more potential clients.
As for the managers, try to remember; unless you want to make excuses for unmaintainable and hard to change code, you need to allow your development teams to work a little bit longer, just to produce a better demo!