6

I was recently reading Wikpedia's list of Anti-Patterns and noticed that this was included:

Smoke and mirrors: Demonstrating how unimplemented functions will appear

Why is this a bad thing to do? The only thing I can see is that if you never actually get around to implementing said function. And what if the function is in the formal spec, "guaranteed" to be completed? Would it still be bad to do in order to show potential clients what they'll be capable of?

Earlz
  • 62,085
  • 98
  • 303
  • 499
  • +1 it is a technique not to do, rather developing tecnique. I agree with you it is not infact anti-pattern. ıt is a anti-morale – nerkn Apr 06 '11 at 14:47

5 Answers5

10

To learn why smoke and mirrors would be an antipattern, take a look at the Smoke and Mirrors Wikipedia entry. From the article:

Smoke and mirrors is a metaphor for a deceptive, fraudulent or insubstantial explanation or description. The source of the name is based on magicians' illusions, where magicians make objects appear or disappear by extending or retracting mirrors amid a confusing burst of smoke. The expression may have a connotation of virtuosity or cleverness in carrying out such a deception.

In the field of computer programming, it is used to describe a program or functionality that does not yet exist, but appears as though it does (cf. vaporware). This is often done to demonstrate what a resulting project will function/look like after the code is complete — at a trade show, for example.

More generally, "smoke and mirrors" may refer to any sort of presentation by which the audience is intended to be deceived, such as an attempt to fool a prospective client into thinking that one has capabilities necessary to deliver a product in question.

Often times, smoke and mirrors are used to impress management or customers with a demo in order to get/keep funding, but there is no real code underneath. This works for a time, but, ultimately results in other anti-patterns (spaghetti code, the blob, etc) in order to try to get something real once it is actually asked for.

Projects that begin as Smoke and Mirrors tend to end horribly. Like a relationship, if you develop your code on lies, everything will fall apart in the end.

JasCav
  • 34,458
  • 20
  • 113
  • 170
  • 2
    +1 for comparing programming to relationships. Just don't think you can "start from a scratch re-write for the next release" in relationships, or your child processes well get forked. :( – corsiKa Feb 26 '11 at 06:34
  • 2
    +1 I think the first sentence covers it all: **Smoke and mirrors is a metaphor for a deceptive, fraudulent or insubstantial explanation or description.** Which is different than what a mock-up *should* be -- intended behavior/use-cases, perhaps a little ambitious at times, but not fraudulent or sold deceptively. –  Feb 26 '11 at 06:36
  • Smoke an mirrors at the least deceptive still requires that you develop what was shown by using paint.exe to draw screens. You may find that implementing the actual functions runs into problems... and the customer knows you've already got it working and it looks EXACTLY like the pictures they have. – Tim Williscroft Mar 16 '11 at 03:25
2

Smoke and mirrors seems different than a mock-up.

Smoke and mirrors would be if implementing something like a calculator you code all the methods for add, subtract, multiply and divide, but the more advanced functions all return random, appearing to do the job. Management oohs and aahs at the long string of digits.

Brandon Frohbieter
  • 17,563
  • 3
  • 40
  • 62
  • 1
    No, that's not an anti-pattern. What you describe is the infinte-bug mentality. See http://www.joelonsoftware.com/articles/fog0000000043.html section 5. – corsiKa Feb 26 '11 at 06:29
2

While a number of answers have hinted at (what seems to me) the real problem, none has really given it directly.

The real reason "smoke and mirrors" is an anti-pattern is that it's confusing the distinction between a prototype and a finished product. Creating a prototype is perfectly fine. One of the major problems that many (most?) of us have run into is managers saying something like "well, that seems to work well enough, let's ship it."

Creating a prototype is usually a good thing -- but you must always be extremely careful both internally and (especially) to the outside world to be clear about the fact that it is a prototype, not a finished product. Management generally wants to believe that the prototype is a finished product (or at least can form the basis of one) anyway. Encouraging such a belief is a really bad thing.

Jerry Coffin
  • 476,176
  • 80
  • 629
  • 1,111
1

Because all too often, it's 90% marketing, 10% management, and 0% development.

Under-promise, over-deliver. Not the other way around.

corsiKa
  • 81,495
  • 25
  • 153
  • 204
  • Unfortunately, in the real world, you can rarely do this all the time (unless your management understands software - which is not typical in non-software industries). In that case, if you do your suggestion, you will ultimately not receive funding so you can actually do what you want to do. The real trick is to show management what you are GETTING TO (let that be the "flash") and continue to do real work behind the scenes. Spell out the results for them so they understand. (This is good for any sales strategy.) – JasCav Feb 26 '11 at 06:33
  • 1
    It's only an anti-pattern because of how often it backfires. When you tell them what exists when it doesn't, and "the thing that blocks you" comes up, and it **will** come up, you're stuck with customers and management looking for someone to blame ... like the guy who said it existed when it really didn't... – corsiKa Feb 26 '11 at 06:36
1

If you follow the link for Smoke and Mirrors you'll see this snippet:

In the field of computer programming, it is used to describe a program or functionality that does not yet exist, but appears as though it does (cf. vaporware). This is often done to demonstrate what a resulting project will function/look like after the code is complete — at a trade show, for example.

This is dangerous because in our world, ANYTHING can change.

Bryan Downing
  • 15,194
  • 3
  • 39
  • 60
  • Change isn't bad. Not existing is. – corsiKa Feb 26 '11 at 06:34
  • +1 Because it takes a slightly different angle than the other answer I up-voted. However, I prefer the stronger terms "fraudulent and deceptive" :-) –  Feb 26 '11 at 06:39
  • In my experience, change is typically the cause of non-existence. When a mockup that has been marketed to hell and back as "the greatest thing ever" changes too much, "fraudulent and deceptive" can become the key adjectives to describe the project. – Bryan Downing Feb 26 '11 at 19:07