I have had the chance to talk at many conferences these past few years, and came up with a way to prepare them which works really well for me. Most importantly, it would make it quite easy to overcome an emergency (for example if my laptop would suddenly lose data). The whole code as well as the slides and other documents are in the cloud. I also use source control for my demos, so that I always have the latest and the greatest, but also a history of changes I made to my demos. Finally I have a system of code snippets which works great, and I often had very positive remarks from the audience regarding that.
Putting everything in the cloud
The one thing I used to be the most scared of was a sudden crash of my laptop, and being unable to restore in time for a conference. Most conferences ask speakers to send slides a few days (or weeks…) in advance, but let’s face it, we all have last minute changes to our talks and I always come in the conference with updated slides that I pass to the management team.
The answer to that dilemma used to be working off memory sticks, and that worked not bad. However last year I started putting all the documents relating to a conference in a DropBox folder, and that works great too.
Obviously DropBox works only if you have connectivity, so if I for instance update slides while on an international flight, I cannot save to the cloud. The obvious answer to that is to backup everything on a memory stick… but I have to admit, I have been trusting my luck and working off my laptop HD and then synching everything to the cloud after landing. Of course on some US national flights you get WiFi on board, so in that case it is even simpler :)
Usually after the conference is done, I remove the files from DropBox and copy them to their “final destination”. They are backed up from there to BackBlaze, the great online backup service I am using routinely (I currently have about 90GB of data in BackBlaze).
Outlining the presentations
I like to have a written outline of my presentations written somewhere. I keep it simple, just write the various sections of the presentation with timing. I guess it is a remnant of the time when I was a private pilot, and using checklists for flight preparation. For example:
Demo about designability 15′ (0:37)
- Switch to Blend
- Open MainPage.xaml
- Create a DataTemplate
Here I can immediately see during the presentation if I am taking too much time for my demo (0:37 is where I need to be when I am done with this section of the presentation, and 15′ is the time that this particular section takes). I keep these sections reasonable, I don’t detail every step of the preparation. Typically I have one such section for every 10-15 minutes of my talks.
Yes, I am timing my presentations. I keep adjusting these numbers when I rehearse, and this really helps to feel more confident during the presentations. This is especially important for presentations that are long, like my MIX11 demo which clocked at 57 minutes (I had a lot of stuff to show…). Such presentations are risky, because if anything goes wrong, you will have to cut stuff, so the answer to that is: Rehearse, rehearse and when you’re done rehearsing, rehearse a little more.
I also have a “Preparation” section where I outline what I need to do before a presentation. For instance:
- Reboot in VHD
- Make sure MSN and Twitter are not running.
- Open VS10 and load demo
- Open Blend and load demo
- Run the WP7 emulator
I typically start preparing my laptop an hour before the talk, starting everything I need to start and then putting my laptop to sleep.
Saving and printing the outline, Timing
Printing is a real problem because it is really hard to find a printer at most conference venues, and also quite hard in hotels. To solve that, I simply write everything in OneNote (synched to the cloud, now you start to know what I like ;) and then I print it to a PDF (I use CutePDFWriter) that I save to my Kindle. During the presentation, I read the outline off the Kindle (I mostly just need a quick check to see how I am timing).
For timing during the presentation, I use the free tool ChronoGPS on my Windows Phone 7, but of course any phone these days has a clock/chrono application. In some conferences, they even have timers that the presenters can see, but they tend to count down and I prefer to count up… so I just use my own :)
Source control for demos
For demos, I create a separate folder and use Mercurial as source control. Mercurial has the huge advantage (over SVN or TFS) to work offline too, so I can commit while on a plane, and all the history is saved. Then when I have connectivity I push everything to the cloud (I am using the fantastic Trunksapp.com for my private repositories).
Here too the obvious downside is the risk of losing my last changes if my laptop crashes before I can push to the cloud, and here too the obvious answer would be to work from a memory stick… though I have to admit I didn’t do that lately (except when I was writing Silverlight 4 Unleashed, where I was really paranoid…)
And code snippets?
I am one of these presenters who hates to type in front of an audience. I can type really fast (writing two books has this advantage, it really teaches you to touch type and be fast at it) but in the context of an audience, on a stage where it is often damn cold (an issue I had a lot in past conferences, air conditioning can freeze your fingers and make it really hard to type), it doesn’t work as well. I don’t know for you, but I really dislike seeing a presentation where the speaker uses the backspace key more often than others ;)
To solve that, I like to have my code ready in snippets, and drag them to the screen. Then I can spend time explaining each code snippet, while highlighting portions of the code (always highlight what you talk about, the audience often doesn’t even see the cursor and doesn’t know where you are on the screen!)
Over the years I have used various solutions for code snippets, and now I have one which works really well… if you take a few precautions! I use the Visual Studio Toolbox.
Preparing the code snippets
You can store code snippets in the Toolbox for anything, XAML, C# etc. I arrange the snippets in the order in which I need them, which is a great way to remember what comes next in the presentation. I also separate them by topic, to make it easier to find them, for example when I switch to the slides and then back to the code. Remember that no matter how experienced you are, you will feel more nervous on stage than while you are preparing, so any way to make it easier for you is going to be beneficial to the audience.
To store a code snippet, I do the following:
- Open the final demo that you want to show to the audience in Visual Studio.
- In your code, select a snippet of code that you want to explain in particular.
- Make sure that the Visual Studio Toolbox is open (menu View, Toolbox or Ctrl-Alt-X).
- Drag the selected snippet from the code window to the toolbox.
- (if needed) drag the snippet to the correct location (for example between two other code snippets so that you can access it as you speak through the demo).
- Right click on the snippet and select Rename Item from the context menu.
- Select a meaningful name. For me I use the following conventions:
- If it is a method, I use the method’s name.
- If it is not a whole method, I use a descriptive name.
- If it is the content of a method (i.e. the body only, without the method’s signature), I use “-> MethodName”. This reminds me during the presentation that this is only the body, and that I need to insert that into an existing signature. This is the case, for instance, when I use Visual Studio to automatically generate the members of an interface’s implementation; then I only need to insert my snippet inside the generated method body.
Saving the snippets
This is the most important!! It happened to me a few times that VS10 lost its settings. When that happens, the snippets are lost too! Yeah that really sucks, especially (as it happened once) when this is the case about an hour before a talk… Stress and sweat follows, not good conditions to start a talk in front of an audience believe me.
Thankfully, saving snippets is really easy with the following steps:
- Select the menu Tools, Import and Export Settings.
- Select Export selected environment settings and press Next.
- Uncheck All Settings. Then expand General Settings and select Toolbox (only!). Press Next.
- Select your source control folder and save under a meaningful name (for instance Snippets.vssettings).
- Commit to source control and push to the cloud.
By the way, this also has the advantage of applying source control to the snippets file (which is an XML file), so you get history for free on that file!
Reimporting the snippets
If VS loses its settings and you need to reimport the snippets, this can be done super easily and very fast.
- Make sure that the Toolbox is empty. When you import snippets, they are merged with existing ones, they do not replace the content of the Toolbox. Unless merging is really what you want, make sure that your Toolbox is clean before you import, it is really easier.
- Select the menu Tools, Import and Export Settings.
- Select Import selected environment settings and press Next.
- Select No, just import new settings and press Next.
- Press Browse and select the Snippets.vssettings file. Press Finish.
Et voila, all your snippets appear again in the Toolbox. Whew, the worst was averted and you can start your demo without sweating! (I had to do that once literally 5 minutes before the start of a demo, while my laptop was already hooked to the projector, and it went just fine).
What about special tools?
When using special tools (for example beta versions of tools you have an early access to), or a special configuration of your laptop, things can get tricky because you cannot really be sure that you will get a laptop with the same tools and the same configuration at the conference. To solve that, I use the following precautions:
- I make my demos from a Virtual Hard Disk. The great John Papa made a very easy-to-follow web page where he explains how to create a VHD and install Win7 to it. This gives you the full power of your laptop (as fast as booting from the metal). For me, I have a basic configuration that I saved on a USB harddrive (Win7 plus drivers, basic settings for desktop, folder options, taskbar etc) and Visual Studio 2010 SP1 on it.
- When preparing, I start by copying this “basis VHD” to my laptop.
- I install additional tools and configurations.
- I save the VHD back to the USB harddrive in a different folder.
This would allow me to reinstall my demo environment quite fast, for example in case of harddrive failure. Replace the harddrive, copy the VHD to it, configure the BCD and you can start.
Unfortunately this only works if the laptop itself still works. In the worst case of total failure, my security is to back all the installers up:
- The installers I use are synched on all my laptops and backed up to BackBlaze. If the worst happens and my laptop is absolutely broken, I can download the installer from BackBlaze and install on another laptop.
This of course takes some time, and if that happens 5 minutes before a presentation, well… I don’t have an answer to that, except of course crossing my fingers. Still, all that gives me additional security.
Remember folks, talking to an audience, large or small, will make you nervous. Just ask Scott Hanselman :) The goal here is to create the best possible conditions for you, and to create an environment where everything is saved and easy to restore, where everything is well known and provides you with additional confidence. The cooler you feel before the presentation (and during ;)), the better your presentation will be. Here too, the goal is to provide the best user experience you can have, which in turn will make it more enjoyable for your audience!
Happy presenting :)