Presenting Successful Demos
I was watching a presentation yesterday, half way through which the presenters fired up a demo of their application. To their horror, the demos failed spectacularly. After what seemed like an eternity trying to recover, the presenters were forced to move on, leaving the presenters visibly annoyed and the audience disappointed.
Although I’m not immune to this (I had an epic demo fail at JavaOne last year), in this post, I wanted to share a few things that I’ve found successful in preparing for and presenting technical demos.
All About State
I’ve lost count of how many demos I’ve seen that have failed on stage. One of the most common post-demo excuses is “That’s strange… it worked OK in my hotel room”. What these presenters don’t realize is that it’s all about state – and how two types of state changes can affect demos.
Predictable State. When you boot your machine, it starts in a particular state (let’s call it S1). When you test your demo in your hotel room, at the end of the demo your machine is in a different state (let’s call it S2). The demo was successful, and you assume that everything is going to be great for your talk. However, when you walk up to the podium, your machine is no longer in it’s original S1 state, it’s in S2 (because you’ve just run the demo previously). What many presenters fail to realize – until they have 250 people staring at them – is that the demo doesn’t work if the machine is in state S2. Maybe temporary files weren’t cleaned up, or the database connection was left open, etc.
Timeout State. Another case I see frequently is with time lag. I’ve also heard this referred to as “your machine being baked on stage”. In your hotel room, you boot your laptop (which is in state S1) and run the demo – and it works. What many presenters face however is a time lag between starting their talk and presenting their demo. For example, your machine could be sitting on stage for 50 minutes before you actually get to the part where you need to show your demo. By that time your machine is in a different state (maybe some kind of power saving / indexing / virus scanning has kicked in – or maybe your application has a memory leak / has closed database connection) and as a result fails.
How do you mitigate these two changes of state? There are a couple of things that I’ve found really help.
Firstly in your hotel room – either before the presentation or the night before – run the demo as you would, and then re-run it directly afterwards. At the time I’m often thinking “of course this is going to work”, but I’ve been amazed at how many times the demo actually fails on the 2nd attempt. For my more complex demos, one of the things that I’ve been considering is using some TDD approaches to help setup. For example, having a build script that will clean, compile, and run my demo together with a set of unit tests that will check the output. I can run this multiple times in the hotel room previously, and also again when I reach the podium before my talk begins.
Secondly, the only way to deal with the lag issue is to recreate the conditions that you’ll face. A full rehearsal in the hotel room the night before is often the only way to get around this. Many times I’ve been amazed to see that demos that normally need a few seconds to complete take much longer once the machine has been sitting there idle for half the presentation. There are a few things that I normally set by default to help mitigate this (e.g. ensure the machine is in high power mode, turn off unwanted settings etc.)
Scripts
To help recreate a successful state, for each demo I always use two scripts, in printed format. One is my “pre-req” script, another is my “run-through” script.
My pre-req script lists all of the things I need to do in order to get the demo in to a known state for presentation. This can include pre-opening the IDE, setting fonts correctly, minimizing windows, resetting config values, deleting output files, etc. I also have a master “pre-req” list that includes many things that I don’t need every time (switch off IM client, close Outlook, etc.)
My run-through script is exactly as it sounds – a script that I use during the presentation to run through the steps of the demo. I know many people feel uncomfortable reading from a script during a presentation – and for the slides, I completely agree – but for the demo, everyone in the audience tends to be looking at the screen and not at you directly, so while reading from a script might not feel natural, you’ll see that the audience won’t actually notice.
One thing I will say about the run-through script is that it needs to a set of mental prompts, not a set of instructions. For example, if the first part of your demo is to open a new browser window to your demo page, a mental reminder like this would work:
* IE –> http://myapp
Whereas this would not:
* Click on start, select Internet Explorer. Wait for browser to start. Go to address bar, enter demo address and click on OK.
In the heat of the moment, you won’t have time to process everything and you’ll end up ditching the script half way through.
Video Recording
You face your worst nightmare and your demo spectacularly fails. What’s your backup plan? For me, it’s a video recording of the demo produced the night before and made accessible before the presentation.
Many people dislike creating video recordings because they think the audience won’t like the format – or worry that it will take too much time to prepare. I disagree. The audience would prefer to see something in context of your presentation, even if it’s a recording. For example, let’s imagine that your demo doesn’t work during your presentation. It’s perfectly acceptable to spend a few seconds to try and recover before saying “Well, I seem to be having some trouble with the demo – let me switch to a recording instead and walk you through what I was going to show”. I open the video and within seconds the audience is able to keep context with the main flow of the presentation – and they’ll forgive me more for using a video than if they couldn’t see the original intended version.
In addition, if you are doing a full rehearsal the night before, it’s little effort to start some screen capturing software and record your demos. The video doesn’t have to be a Hollywood masterpiece – remember, this is for backup purposes only – and you don’t need to worry about audio (as you’ll be talking over the top of this).
When you record the videos, always set your machine to the resolution of the projector that you’ll be using (this is good advice for running through any demo prep). If you don’t know the resolution of the projector beforehand, I would recommend 1024×768. Your audience will prefer to see a demo with additional screen real estate vs. a demo that’s looks crammed because the resolution was too high.
After you’ve created the videos, I recommend copying a version of them to a folder on your desktop for quick access, and to either a USB stick or online storage where you can access them from another machine if need be. Many conferences that I’ve presented at often have a second presenter machine than I can use in case my demo machine dies.
As a final note, if all of this sounds way over the top, I like to remind myself of the time investment from the audience. If I have 100 people show up to a talk and I have a 15 minute demo, the audience is investing 25 man hours co
llectively just for that demo (100 people x 15 minutes). I feel that adding a few more minutes of my prep time to ensure the demo runs flawlessly is worth justifying the investment of everyone in the room.
Nice discussion of demos and problems related to state. One additional strategy that you don’t mention is the use of virtualized environments for demos. They can be guaranteed to begin at a certain state, and undo disk features can be used to guarantee that they revert to that state when the demo is done.
I realize that virtualized environments aren’t always appropriate for demos — performance considerations may dictate other approaches — but for many situations they are the way to go.
@Wayne – it’s a good point and I did deliberate whether to mention this in the post. I tend to be on the fence when it comes to virtualization for demos. I love the ability to reset/use undo disks after the demo – this is very powerful. With that said, keeping multiple virtualized environments current can be difficult (e.g. patches, system updates) especially if it’s an infrequently used demo – and I remember the case where a colleague of mine found that his VHD file had become corrupted 10 minutes before his session start…
@Simon – There are easy answers to these issues. I freeze my virtualized environments — I don’t allow them to update themselves automatically, and I only explicitly update them if I want to demo a new version of the product or demo on top of a new version of the platform. Otherwise I don’t allow them to change, so this isn’t a worry.
As for corrupted VHD files, I always carry at least two copies — one on my demo laptop, and one on a USB pocket drive, so replacing a corrupted copy is easy. Plus I always keep a master copy on a RAID drive back in the office, although in a pinch it’s always possible to rebuild the image if necessary.
I agree with Wayne. Virtualized environments is the way to go. Before that, I would inevitably screw up something from a carefully rehearsed “setup script” … however, now, with the cloud, I would like to have not just a “snapshot” of my desktop, but, the entire environment as well which is harder.
Simon, you nicely recovered from the JavaOne demo.