28

I'm a bit of a jester so the idea of an easter egg still appeals to me. I have added them in my code before but my group of friends has a running joke of using CTRL-FU to trigger the egg.

Now I'm also a bit paranoid about performance so I like removing excess whenever possible. This heavily contradicts with easter eggs as they are 100% superfluous code.

What arguments are there against easter eggs? Also, are there any arguments to even support easter eggs?

  • 5
    IMHO this question doesn't deserve a down vote at all, certainly not a non motivated one. I'm myself very interested by the subject. Especially knowing how it is perceived by the end users, the real bosses. –  Jan 23 '11 at 18:13
  • This is prime for a classic @Mark Trapp "we're here to solve real problems you might be facing." – Gratzy Jan 23 '11 at 18:15
  • @Gratzy - this is a "real problem". Some people want to include them in their code regardless of whether they're appropriate or not. There was a flight simulator embedded into Excel 97 - http://vsbabu.org/software/fsxls.html - fun but not really appropriate for a business application. – ChrisF Jan 23 '11 at 18:16
  • 1
    @ChrisF wow if my question http://programmers.stackexchange.com/questions/38810/can-there-be-too-much-uniformity-in-coding-standards gets the "real question" response and your telling me this doesn't then I really am quite confused as to the purpose of this site. – Gratzy Jan 23 '11 at 18:19
  • @Gratzy - I have to admit I haven't looked at your question. – ChrisF Jan 23 '11 at 18:19
  • @Pierre: Agreed, +1. – Josh K Jan 23 '11 at 18:47
  • 1
    Great question, IMHO. – Uri Jan 23 '11 at 20:49
  • Glenn, you said you are "paranoid about performance" so this "contradicts...easter eggs". I would like to point out that an "Easter Egg" should have absolutely no effect on the performance of the software, unless its code is being run in the background. The eggs only add to the size of the program, and even then it is usually an insignificant amount, even if you are planning to embed "NBA Jam"® in your spreadsheet application. – Mark C Jan 24 '11 at 03:19
  • @Mark C At some point the code will run and that worries me for some reason. I mean the first system I programmed for was the NES and that had something like 1.77MHz processor and 2K RAM. I'm running ~3GHz Quad w/ 4GB DDR3 RAM so that may give you an idea of just how paranoid I can be. –  Jan 24 '11 at 03:29
  • @GlennNelson (I was writing this last night but lost it.) Yes, the code will run when the user accesses the hidden feature. If you don't want your Easter Egg to run, then you shouldn't include one! Otherwise, extra code should only run in the case that some checking has to go on (e.g. onMouseEvent()). – Mark C Jan 24 '11 at 16:39
  • 1
    @Mark C Aye, I am just over-the-top paranoid about wasting resources. –  Jan 24 '11 at 20:03

7 Answers7

11

As always the answer is "it depends".

Easter eggs are one way of encouraging exploration of the program "world". In a game it's rather obvious - you climb to the top of the highest mountain and you find it (for example), but for other applications you have to use hidden options as your Easter Egg. However, they are seen as frivolous by some people so if you are writing an ultra serious business application you don't want to upset your users by presenting them with a screen of singing hamsters (or what ever) when they find the magical key combination.

Having an Easter Egg in an application shouldn't have a detrimental impact on performance. So unless you are parsing keyboard input for the normal operation of your application having Ctrl+FU as the trigger is a bad idea. As long as the code is only be executed if found so there's no runtime penalty. The only penalty is the increase in program size - which may or may not be a problem. If the program size is an issue then definitely leave it out.

However, having the extra code there is a support issue. You still need to support the code and make sure that it works and doesn't cause problems when executed. The last thing you want is for your application to crash just as the user finds the Easter Egg!

ChrisF
  • 38,878
  • 11
  • 125
  • 168
  • "Having an Easter Egg in an application shouldn't have a detrimental impact on performance. It will only be executed if found so there's no runtime penalty." Really? If its triggered by a CTRL-FU as the OP states then aren't your trapping every key stroke? – Gratzy Jan 23 '11 at 18:21
  • 2
    @Gratzy - Actually that's a good point - unless you are trapping keystrokes for the normal operation then that is an example of a bad Easter egg. – ChrisF Jan 23 '11 at 18:23
7

I'd say that highly depends on the type of software you're developing.

Imho easter eggs are more likely to be accepted (or even appreciated) in games than in business software. Even Microsoft had put some Easter Eggs into their products, but pretty much completely stopped that now. The reason why Microsoft stopped putting Easter Eggs in is closely connected to the possible reasons against Easter Eggs: security concerns. As outlined in the relevant Wikipedia article, Easter Eggs are usually (at least for the user/client) undocumented parts of the code which may lead him to believe that the product was more open to attacks or in other ways untrustworthy. Further, not all Easter Egg code is tested and audited to the same degree "mission critical" code is. That may lead to undiscovered flaws or loop holes in the code base which may be the origin of a later attack or malware exploit.

However, not all Easter Eggs are "bad" and require tampering with the actual code of the product. There are lots of ways to present Easter Eggs, especially in games where the code is somewhat separated from the content (game/graphics/scripting engine vs. actual script or level files). These ways range from special textures/objects and audio comments of the protagonist (e.g. as used in DN3D: Doom, Terminator, Indiana Jones, Star Trek) to secret levels ("there is no cow level") to dialogs showing when a certain object/location in the user interface is clicked, and much more. Of course not each of these is suitable for every type of product.

A nice way of putting an Easter Egg into your product is to include yourself somehow (and not only in the credits section). Blizzard did this very nicely with StarCraft 2. One unit portrait is actually the face of one of the developers. Something not-so-obvious like that is usually appropriate for many different types of software because it doesn't rely on media knowledge or a certain kind of humor. For example, perhaps you could include yourself as a character in the product's context. Depending on the product, this may not even require a chance to the code or only a very simple one.

Easter Eggs are imho nice but not required. The implementation of an Easter Egg should never detract from the actual product and its presentation should be appropriate for the indented target audience of the final product. An Easter Egg in a "serious" application or a product targeted at non-adults should never include adult humor or sexual content, no matter how funny or harmless it appears to be. This could not only lead to legal consequences, but also affect the marketing range of the software (USK/PEGI/ESRB ratings, for example).

Baelnorn
  • 816
  • 5
  • 7
  • 1
    You really need to look at *why* Microsoft stopped putting easter eggs in their code. An easter egg is a code path that isn't fully tested (if you had the opportunity to do a full QA on an easter egg, why didn't you take the time to include a different, useful feature instead?), which means its a potential source of security vulnerabilities. – Anon. Jan 23 '11 at 20:46
  • @Anon: From the Wikipedia article I mentioned in my answer: *"Microsoft, who has in the past created some of the largest and most elaborate Easter eggs such as the ones in Microsoft Office, no longer allows Easter eggs in their software as part of their Trustworthy Computing initiative."* The source for that statement is the MSDN blog article linked in Charles' answer. I don't see any contradiction to my statement. Could you please explain where I got it wrong? :) – Baelnorn Jan 23 '11 at 21:25
  • The first part of answer reads like "hey, Microsoft used to do this, isn't it awesome", but then the actual reasons why they don't do it any more are buried halfway through the answer. A casual reader isn't going to see it, and it's disconnected from the relevant context. Ideally, I'd like a reshuffling of the paragraphs to place the cons paragraph a little more prominently. – Anon. Jan 23 '11 at 21:30
  • @Anon: Thanks for the heads up. I edited my answer and reordered the paragraphs, detailing the reasons against EE in the first part. – Baelnorn Jan 23 '11 at 21:48
5

Easter eggs are little secrets left by the builders. Does it hurt the end users? No.

Many well known and popular pieces of software have included hidden easter eggs. Easter eggs have also been used to display a developers feelings on a particular touchy subject in a rather elegant way.

As for code optimization, as long as the easter eggs are not too intensive (hello flight simulator) it should not hurt performance in a meaningful way.

Josh K
  • 23,019
  • 10
  • 65
  • 100
  • I disagree. An easter egg adds risk of an event occurring that can harm users. At best, these "added features" are tested and simply use up time of both developers and QA. At worst, no one other than the implementor knows about it. Implementor later leaves the company, and afterward an update to the software unintentionally cause the easter egg to turn malevolent with actions such as cutting off keyboard events, eating up all available RAM, or in an extreme case... erasing the contents of the user's hard drive. Over-the-top? Maybe. However I've seen each of these occur as normal bugs. – mummey Jan 24 '11 at 00:45
  • @mummey: I think that is a highly unlikely occurrence. – Josh K Jan 24 '11 at 01:01
  • Wouldn't you do your utmost to mitigate those risks? – StuperUser Jan 24 '11 at 11:58
  • @Stuper: Have you ever heard of an easter egg crashing the program? – Josh K Jan 24 '11 at 14:12
  • Not heard of any, but crashes during easter eggs aren't critical enough to warrant publication of issues in the most part. Users often don't send information back for most MS program crashes during *normal* operation. – StuperUser Jan 24 '11 at 14:23
  • @Stuper: So it's the users fault? I have never had an easter egg cause an application crash. – Josh K Jan 24 '11 at 14:27
  • What's the user's fault? My point is easter eggs make a piece of software riskier. – StuperUser Jan 24 '11 at 14:35
  • @Stuper: And my point is that it has never caused any known harm. You're saying that the users don't report bugs in general so it's their fault we don't know if it causes any issues. – Josh K Jan 24 '11 at 14:56
  • You've misunderstood me. It's a dev's responsibilty to ensure best quality of their work. Exhaustive testing is impossible, so defective software is released. My point about reporting is that just because you've never heard of an issue with an easter egg doesn't mean one doesn't exist. – StuperUser Jan 24 '11 at 15:15
5

Easter eggs were common even in major commercial software releases in the 80s and 90s. For the most part they were cute and relatively few people were bothered by them. I think they are less common today for three reasons:

  1. Like all practical jokes, they're funny until somebody gets an eye put out. If your easter egg has a bug that causes data loss or a performance problem then you may end up having to explain to a bunch of lawyers that you weren't actually distributing "malware".

  2. Humor is very, very, hard to do right, and if you do it wrong you'll offend paying customers who will then stop paying for your software and who will write many nasty letters to the press about what a terrible, immature company you work for. The example of an easter egg triggered by Ctrl-FU is a perfect example. This is probably hysterically funny for your 17 year old friends, but it's the 0th rule of marketing to never tell your customers "FU", even jokingly. Notice that the easter eggs in big commercial software NEVER made fun of the user, only the competitors.

  3. In the immortal words of Peter Tork of the Monkees in the movie Head: "Nobody loans money to a man with a sense of humor." If you are buying a critical piece of software infrastructure, a sense of humor in the author is not reassuring. Besides that, why were they spending time writing easter eggs when they could have been fixing their numerous security bugs?

Larry Osterman had a fairly famous blog post years ago discussing why the OS group at Microsoft no longer allows easter eggs.

Glorfindel
  • 3,137
  • 6
  • 25
  • 33
Charles E. Grant
  • 16,612
  • 1
  • 46
  • 73
  • 1
    Even today Google has an [easter egg](http://www.google.com/search?hl=en&source=hp&biw=1510&bih=867&q=recursion&aq=f&aqi=g10&aql=f&oq= "easter egg") - meaning that they're checking for the input to trigger the Easter Egg on each search. It's probably not much processing, but considering the hundreds of millions of searches they process each day... I don't know. – Charles Salvia Jan 23 '11 at 21:40
  • I must confess that I read CTRL-FU as a kind of KUNG-FU. – Christopher Creutzig Jan 25 '11 at 20:42
  • @Christopher that's a perfectly reasonable interpretation. Humor is often subject to multiple interpretations, which is part of why it's tricky to put in your software without running the risk of offending somebody. – Charles E. Grant Jan 27 '11 at 18:58
  • @CharlesSalvia Depending on how they process searches to determine the "Did you mean" results, it may not add any overhead at all on top of what's already there for that behavior. – JAB Sep 19 '16 at 19:23
2

While I like Easter Eggs in software, it is important to remember that the line between an egg left in a product for fun and a malicious backdoor can be very thin from a legal standpoint. For instance, is it needed to show harm? Does one need to prove intention to do harm?

Considering that the courts' understanding of computers and software is quite miserable (as evidenced by some software patents), debating such a case will buy several lawyers a nice vacation home in Aspen. When one considers the various legal environments (such as the DMCA) in which software is published and distributed around the world, it may also buy them vacation homes in the Alps.

As hired engineers, we vouch to do our company no harm. Litigation could become harm, and litigation is likely if we deliver software on contract to other clients, especially governments or large enterprises. Thus, I would personally choose to err on the safe side.

Remember, engineers exist to use logic to good ends, while lawyers exist to twist logic for evil. That's why they get paid so much more than us.

Uri
  • 4,836
  • 1
  • 18
  • 23
0

Many have stated Easter Eggs are more suited to games, but I think they have a use in business applications. Too many people just create a series of recipes for using a business app that they never look at other areas of the application. I mean there are whole sections of an application they never look at if it wasn't part of their training and it could have been some use to them. Currently I worked on an application with 75 reports and users were asking for information and they never even ran a single report. They need some incentive to make up for their lack of curiosity (In their defense, some users are afraid of breaking something.).

JeffO
  • 36,816
  • 2
  • 57
  • 124
-2

I use Easter eggs to help me for debug and coding. Therefore the Easter eggs I put in serve a purpose and are probably not considered to be Easter eggs.

Dave
  • 427
  • 3
  • 7
  • What exactly do you mean by 'easter egg' in your usage? Can you give me an example? –  Jan 23 '11 at 18:24
  • This is not an Easter egg but a backdoor then. We do someting special for GUI testing when the tool double-clicks a middle-mouse button at screen location (0,0), and then enters the correct password. This is done so that GUI automation tools can handle it. Users could do this as well in theory, but in practice they will not get there. Plus, there are warning signs all over the place. – Job Jan 23 '11 at 18:29
  • 1
    @Glenn, a good example would be ... if you are shipping a desktop GUI application. When the user clicks a button, they get a new dialog. When the user clicks that button while holding a shift key, they get an old one. This would be a good way to compare old and new functionality, when trying to fix bugs caused by the new widget. If you are cautious, you can leave the dual code in but comment out the backdoor. Then, as you need to debug things, uncomment, rebuild, and now you can compare two things side-by-side. Dave, sorry for trying to steal your thunder. – Job Jan 23 '11 at 18:33