Don’t forget to replace your placeholder bitmaps with real bitmaps


The story We Burned the Poop reminded me of an embarrassing story a colleague of mine related from earlier in his programming career.

During the development of the product he was working on, the programmers needed an image for a comparatively rarely-used piece of the user interface. Since programmers aren't graphic designers, they inserted a placeholder bitmap which would be used until a real image arrived. And since programmers are nerds, they used a picture of a television character who was popular at the time.

The testers naturally ran the program through its paces, and when that piece of the user interface appeared with the placeholder bitmap, the testers smiled a little.

Time passed, and people became quite accustomed to seeing that television character's face appear when they exercised that little corner of the program. An oddly appropriate face to alert you of an unusual condition.

And then the project reached its completion, and the master CD was sent off to the factory for mass duplication.

Wait, what about that picture of the television character?

When asked why they signed off on testing with a placeholder bitmap, the testers explained, "Oh, we thought that was an artistic decision. The character's personality sort of made sense in that part of the program." Since the image appeared in a comparatively rarely-used corner of the program, it never appeared during product demonstrations.

Project management contacted the producers of the television program to see whether they could just license the character's face and avoid having to destroy all of the CDs that had been pressed so far.

The producers responded politely, "Thank you for your interest in our television character. Our licensing fees begin at $big-number, plus an additional royalty which varies depending on the nature of the usage, but it begins at $another-big-number per unit."

That amount was far too much, and management had to choose the cheaper of two expensive options: Delivering a new master CD to the factory and telling them to destroy all the copies they had already pressed.

Comments (23)
  1. Dan Bugglin says:

    Some placeholder images made it into my project's last delivery.  Nothing we didn't make ourselves, though THIS time I intentionally used popular forum smilies to be sure that we replace them.  I will make an explicit note on my to do list right now though, just to make sure we don't forget…

  2. Dave says:

    From our bug tracking DB:

    Defect #1315: A picture of a man in a bathing suit is diplayed during the <Product> install process

    The developer who wrote the installer needed a placeholder image.  David Hasselhoff seemed to be an amusing choice to him.  Others in the company…not so much.  :)

  3. Rick C says:

    At a previous company, we had a widely-used in-house app.  The original team had a splash screen using a piece of an Escher lithograph and "<product> v2.0 The scorched weasel edition" on it.

  4. blah says:

    Amateurs. I've spent quite a bit of time creating defensive constructs to avoid this very thing. For example, special TODO_* preprocessor defines which allow me to get on with my code, yet break in a production integration build. The same concept can be applied to imagery and any other resources one may want to stub out.

  5. Tony Cox says:

    I've seen worse than this. We managed to actually ship a product to store shelves with an, ahem, unfortunate bitmap buried in an error dialog. Since this was a game, it had an ESRB rating, which was invalidated by the presence of the offending item. We literally had to sticker every single box of the product with a new rating label.

    Part of the reason for this situation is that the error message was in a tool that was previously an internal only tool, but which we decided to ship along with the game. The lesson here is also to be careful what you use as placeholder content in the first place, even in things you think will never ship to the public – because one day they might.

  6. Joshua says:

    We placed a skull as an image control on a form at design time, knowing full well the skull would be replaced with either an individual image or a stock image if the individual image was missing.

    Due to an unhandled exception, the skull showed up at runtime and freaked a customer out.

  7. James Schend says:

    Back when I helped an elementary school with their computer labs, I put a cute little game on a bunch of the computers that kids could play as a reward or when it was too rainy to go outside for recess.

    The game was entirely kid-friendly, except for one little detail: all the error dialogs said, "what the F— happened!" Since the game wasn't buggy, I never saw the error dialog until one day when one of the computers happened to run out of disk space as the game was trying to save.

    I got chewed-out for a half-hour by the teacher in that classroom. If I ever find the developer of that cute freeware kid-friendly game who decided to put swear words in the error dialog, I'm going to throttle him.

  8. Brian says:

    Many moons ago we underwent a big project to move images around in a web app. Dozens of developers were involved, so it took a few builds to get the image paths right. In the meantime, those 'bad builds' had red-X's where the images used to be. Once we got the paths worked out, the images were good, but folks were pretty tired of that.

    I thought I was being funny by taking a screen-shot of a red-X and checking it in on top of all our images. Next build the red-X's reappeared. A few of us thought it was pretty funny. The rest, not so much. ROLLBACK!

  9. Timothy Byrd says:

    Once, I was upgrading our toolbars to be able to use true color bitmaps.  I wanted to test it but all the existing bitmaps were 16 color. So I went to our internal company directory and used the employee mug shots to make a sample true-color version of our main toolbar. The next morning, the other devs and our testers were amused at how I'd tried to pick the right person for each toolbar button, but I was mortified to hear that we were going to send out that day's build to a customer as a special beta.

  10. Grijan says:

    A few years ago, while developing a multimedia CD-ROM, a coworker challenged me to play the tune of a then-famous top-40 song in the Credits screen, just to annoy another coworker. I happily complied, fixed a new build, and went to his office. When I arrived, the customer was there, waiting for a demo of the latest version. I put the CD in the drive, and waited for the inevitable doom. Luckily, the customer had a good sense of humor :-) .

  11. steveg says:

    Similar, is the change introduced by marketing saying, "We've just spent $250,000 on advertising feature X".

    As I get older my error messages and test data get more and more boring. Sadly I realise what was hilarious when I was 20, is… uh 20 years later, just a distraction.

  12. Anonymous Coward says:

    So I guess the take-away message is: make sure the release build fails to compile as long as there are still placeholders in your project. Ideally, make sure they aren't even accessible to the people / process producing the release.

  13. Dan Bugglin says:

    This reminds me, our last delivery shipped in "development" mode.  Whoops. >_>

    Fortunately there wasn't much difference between development and "delivery" modes at the time… hence the reason we missed it.  I'd stick a big honkin' dialog box when you start up as a reminder but we would all start ignoring it after a bit…

  14. Drak says:

    There's one place in our CMS software that has a comment in the page source saying 'Soap-on-a-rope' where the program uses SOAP to transport data around. That of course came from Larry 3 :). In another place there's a slogan from my favourite commercial, and a client once actually found that and asked what it meant :)

  15. Dale says:

    I'm reminded of Raymond's other post "You even have to watch out for your placeholder bitmaps":

    blogs.msdn.com/…/6415714.aspx

  16. Danny says:

    Ok, here goes my story:

    I'm working on a product which is touchscreen driven, with the KIOSKS sitting all over the country in airports, water-parks, malls, sky resorts etc etc; it has one area that is for general public and it has a admin area where you get by inserting the admin code of course. Both areas have at the bottom a "Home" button that once is pressed it allows you to go to the start.

    In November 2009 my boss/friend, as a change request, wanted that when you are in admin area the button should display only the caption of "Go back to KIOSK" so that the person in charge to know where would go if is pressed. The normal Home button was only a picture with, well :), a house on it. Due to the nature of the control it was easy to just use another button that would become visible and over the existing one, and when you are in normal mode this button will be hidden.

    So the discussion when we copy/paste the button was:

    Me: "Here it is, I will make at runtime to hide/show over depending on which areas, admin or normal, we are"

    Him: "Great, now let's have a dummy caption that will get replaced at runtime by the resource we get depending on what language the customer has chosen"

    Mind you, the public area start with a bunch of buttons showing what language you wanna start to use and from there you go screen by screen.

    Me(laughing): "Here it is <GO Home ***>"

    Him(laughing too): "Good good. Now let's get on the next item in the bugs/requests list"

    And we moved along with the work.

    The program is shipped, is installed at KIOSKS, replacing the existing software there, works just fine. At start-up would create necessary structures to show messages in the language the customer would choose at beginning, all is just fine. Who would think a control with a "bad" caption that would not meant to be viewed outside the IDE would make any stir at all:). Oh boy, I was wrong.

    Time passes by, many delivers follow, it is an ongoing project, you know the type, like windows & Microsoft :P:P.

    Until one month ago, when at a venue one KIOSK, which was in a international airport, the button started to say "GO Home ***" when you were in admin area. The person in charge there was, what else?, a black person who was hired for the job trough the union. Boy, o boy, what a day was that.

    What happened? Nothing much, just a hardware error (HDD do have bad sectors) and the resource file was the lucky one to receive that bad sector. And my tough luck was that the entry inside the file was exactly the one with LB_HOME2 to receive it. Furthermore, my routine to replace captions is that if a entry is not defined would put the existing (design time) + <LB_XXX NOT DEFINED>. But in this case the length of the button was not allowing you to show the entire new caption so what was visible was, you guessed, "GO Home ***".

    Once the file was simply copied again over from the installer CD everything was fine. Except me whom I received from my boss a lesson in "never do that again" that took more then a hour. And he was at his turn received the same lesson form the one above him in chain of command, which in their turns received that lesson from the judge – I did said the local admin was in a union, didn't I? Well, he got also a nice lump of money too :)

  17. Danny says:

    @Fowl

    racial slur deleted

  18. Fowl says:

    @danny

    I don't get it. What's so funny about "GO home ***"?

  19. Bob says:

    Well, Windows 7 IS known for showing a picture of Hitler. (See XKCD.)

  20. Karellen says:

    @Danny: Uh, yeah. That makes it even *less* funny than "***". Seriously, you think that's funny? Wanker.

  21. thinkbeforecoding says:

    A journalist that was testing our newly released product phoned us to ask why the installer was displaying an "Old ***" dialog.

    No, the installer did not contain an old *** detector… a young developer had just chosen this subtle message instead of 'you need administrator access rights to install this software'.

    The article was still good with no mention of the incident.

  22. Godwin says:

    The lesson we should all learn from this: Yes, a placeholder image of Hitler will very much remind you to swap it for the real one. But it will not *make* you do that.

  23. John Muller says:

    Whew, the worst I was involved with was using 3 solid white .bmp files as placeholders for icons sized images. 1024×768 bitmaps.

    Also a MS product Easter Egg had my name, just as the 'No Easter Eggs' policy came into enforcement (shipped as part of a Windows Server release, so the egg got ripped out before shipping.

Comments are closed.

Skip to main content