Presentation Tips Learned From My (Many) Mistakes

code, tech, personal 0 comments suggest edit

One aspect of my job that I love is being able to go in front of other developers, my peers, and give presentations on the technologies that my team and I build. I’m very fortunate to be able to do so, especially given the intense stage fright I used to have.


But over time, through giving multiple presentations, the stage fright has subsided to mere abject horror levels. Even so, I’m still nowhere near the numbers of much more polished and experienced speakers such as my cohort, Scott Hanselman.

Always looking for the silver lining, I’ve found that my lack of raw talent in this area has one great benefit, I make a lot of mistakes. A crap ton of them. But as Byron Pulsifer says, every mistake is a an “opportunity to learn”, which means I’m still cramming for that final exam.

At this past Mix 11, I made several mistakeslearning opportunities in my first talk that I was able to capitalize on by the time my second talk came around.

I thought it might be helpful for my future self (and perhaps other budding presenters) if I jotted down some of the common mistakes I’ve made and how I attempt to mitigate them.

Have a Backup For Everything!

An alternative title for this point could be worry more! I tend to be a complete optimist when it comes to preparing for a talk. I assume things will just work and it’ll generally work itself out and this attitude drives Mr. Hanselman crazy when we give a talk together. This attitude is also a setup for disaster when it comes to giving a talk.

During my talk, there were several occasions where I fat-fingered the code I was attempting to write on stage in front of a live audience. For most of my demos, I had snippets prepared in advance. But there were a couple of cases where I thought the code was simple enough that I could hack it out live.

Bad mistake!

You never know when nervousness combined with navigating a method that takes a Func-y lambda expression of a generic type can get you so lost in angle brackets you think you’re writing XML. I had to delete the method I was writing and start from scratch because I didn’t create a snippet for it, which was my backup for other code samples. This did not create a smooth experience for people attending the talk.

Another example of having a backup in place is to always have a finished version of your demo you can switch to and explain in case things get out of control with your fat fingers.

For every demo you give, think about how it could go wrong and what your backup plan will be when it does go wrong.

Minimize Dependencies Not Under Your Control

In my ASP.NET MVC 3 talk at Mix, I tried to publish a web application to the web that I had built during the session. This was meant to be the finale for the talk and would allow the attendees to visit the site and give it a spin.

It’s a risky move for sure, made all the more risky in that I was publishing over a wireless network that could be a bit creaky at times.

Prior to the talk, I successfully published multiple times in preparation. But I hadn’t set up a backup site (see previous mistake). Sure enough, when the time came to do it live with a room full of people watching, the publishing failed. The network inside the room was different than the one outside the room.

If I had a backup in place, I could have apologized for the failure and sent the attendees to visit the backup site in order for them to play with the finished demo. Instead, I sat there, mouth agape, promising attendees that it worked just before the talk. I swear!

Your audience will forgive the occasional demo failure that’s not in your control as long as the failure doesn’t distract from the overall flow of the presentation too much and as long as you can continue and still drive home the point you were trying to make.

Mock Your Dependencies

This tip is closely related to and follows up on the last tip. While at Mix, I learned how big keynotes, such as the one at Mix, are produced. These folks are Paranoid with a capital “P”! I listened intently to them about the level of fail safes they put in place for a conference keynote.

For example, they often re-create local instances of all aspects of the Internet and networking they might need on their machine through the use of local web servers, HOST files, local fake instances of web services, etc.

Not only that, but there is typically a backup person shadowing what the presenter is doing on another machine. But this person is following along the demo script carefully. If something goes wrong with the presenter’s demo, they are able to switch a KVM script so that the main presenter is now displaying and controlling the backup machine, while the shadow presenter now has the presenter’s original machine and can hopefully fix it and continue shadowing. Update:Scott Hanselman posted a video of behind-the-scenes footage from Mix11 where he and Jonathan Carter discuss keynote preparations and how the mirroring works.

It’s generally a single get-out-of jail free card for a keynote presenter.

I’m not suggesting you go that far for a standard break-out session. But faking some of your tricky dependencies (and having backups) is a very smart option.

Sometimes, a little smoke and mirrors is a good backup

In our following NuGet talk the next day, Scott and I prepared a demo in which I would create a website to serve up NuGet packages, and he would going visit the site to install a package.

We realized that publishing the site on stage was too risky and was tangential to the point of our talk, so we did something very simple. I created the site online in advance at a known location, This site would be an exact duplicate of the one I would create on stage.

During the presentation, I built the site on my local machine and casually mentioned that I had made the site available to him at that URL. We switched to his computer, he added that URL to his list of package sources, and installed the package.

The point here is that while we didn’t technically lie, we also didn’t tell the full story because it wasn’t relevant to our demo. A few people asked me afterwards how we did that, and this is how.

I would advise against using smoke and mirrors for your primary demo though! Your audience is very smart and they probably wouldn’t like it the key technology you’re demoing is fake.

Prepare and Practice, Practice, Practice

This goes without saying, but is sometimes easier said than done. I highly recommend at least one end-to-end walkthrough of your talk and practice each demo multiple times.

Personally, I don’t try to memorize or plan out exactly what I will say in between demos (except for the first few minutes of the talk). But I do think it’s important to memorize and nail the demos and have a rough idea of the key points that I plan to say in between demos.

The following screenshot depicts a page of chicken scratch from Scott Hanselman’s notebook where we planned out the general outline of our talk.


I took these notes, typed them up into an orderly outline, and printed out a simple script that we referred to during the talk to make sure we were on the right pace. Scott also makes a point to mark certain milestones in the outline. For example, we knew that around the 45 minute mark, we had better be at the AddMvcToWebForms demo or we were falling behind.

Writing the script is my way of preparing as I end up doing the demos multiple times each when writing the script. But that’s definitely not enough.

For my first talk, I never had the opportunity to do a full dry-run. I can make a lot of excuses about being busy leading up to the conference, but in truth, there is no excuse for not practicing the talk end to end at least once.

When you do a dry run, you’ll find so many issues you’ll want to streamline or fix for the actual talk. Trust me, it’s a lot better to find them during a practice run than during a live talk.

Don’t change anything before the talk

Around the Around 24:40 mark in our joint NuGet in Depth session, you can see me searching for a menu option in the Solution Explorer. I’m looking for the “Open CMD Prompt Here” menu, but I can’t find it.

It turns out, this is a feature of the Power Commands for Visual Studio 2010 VSIX extension. An extension I had just uninstalled on the suggestion from my speaking partner, Mr. Hanselman. Just prior to our talk, he suggested I disable some Visual Studio extensions to “clean things up”

I had practiced my demos with that extension enabled so it threw me off a bit during the talk (Well played Mr. Hanselman!). The point of this story is you should practice your demo in the same state as you plan to give the demo and don’t change a single thing with your machine before giving the actual talk.

I know it’s tempting to install that last Window Update just before a talk because it keeps annoying you with its prompting and what could go wrong, right? But resist that temptation. Wait till after your talk to make changes to your machine.


This post isn’t meant to be an exhaustive list of presentation tips. These are merely tips I learned recently based on mistakes I’ve made that I hope and plan to never repeat.

For more great tips, check out Scott Hanselman’s Tips for a Successful MSFT Presentation and Venkatarangan’s Tips for doing effective Presentations.

Tags: mix11,mix,presentations,tips

Found a typo or error? Suggest an edit! If accepted, your contribution is listed automatically here.



25 responses

  1. Avatar for Preetham Reddy
    Preetham Reddy April 18th, 2011

    Great Post!!! Enjoyed your NUGET presentation at Mix11....

  2. Avatar for lb
    lb April 18th, 2011

    very good advice.
    i hadn't thought about going so far as to mock out the internet using Hosts file. That's a great idea, as conference wifi is always patchy.
    For an upcoming talk i'm planning on using a nuget variant i call 'noget' which just copies from a local stash.

  3. Avatar for Mike
    Mike April 18th, 2011

    These are very good tips, even for small User Group meetings. I can't number the UG demos I have seen head south. The audience is visibly and audibly lost, as the presenter tries (unsuccessfully, at times) to recover.

    My own presentation safety measures include:
    - Don't lose your cool, when things go bad. Just concentrate of recovering fast. (Remember that iPhone4 thing?)
    - Relax. The audience is there to learn from you, not to judge you. They can sense anxiety. Show them you have the mad skills, by calmly resolving issues.
    - Don't say anything negative about the mistake -- if anything, make some sort of wisecrack (only one!). Don't express frustration or anger.
    - Become Julia Child -- have a finished dish already baked in advance, and in the other oven. This way, you can simply cut/copy a hunk of code, file, assembly, or the whole darn thing.
    - Close unneeded services on the your laptops. Don't risk having some application bog down your presentation, because it is updating itself or spouting Twitter toasts. (Or Scott Hanselman's phone number. )
    - Carry a fresh, backup laptop HDD, when travelling.
    - Use a good backup application on all HDDs, that allows you to fully restore the system to a new HDD. (See Sott Hanselman's story: )
    - Have the host machine and VMs running for no lees than 60 minutes prior to presenting. This combats rogue services and updates, and ensures the machine is warmed up.
    - Try out the projection system in advance. The projectors at the Utah DNUG meeting hall are notorious for displaying everything in magenta, when too high of a resolution is used.
    - Set the laptop external display to the native resolution of the projection system, to combat fuzzy text.
    - Carry extra, fully-charged batteries for everything.
    - Carry wired peripherals, in case there's too much RF interference from the audience. (Gadget geeks!)
    - Don't drink for 40 minutes before presenting. During presentation, don't drink a lot. You have to make it through the presentation and Q&A!
    - Mute your mobile devices.
    -- Don't drone on like a broken Ben Stein. Prectice using plenty of infection in your voice.
    - Don't babble on about irrelevant crap.
    - Become David Copperfield -- always keep the audience attention moving, especially when that KVM stunt comes into play.
    - Smile, and have fun.

  4. Avatar for Andrei Rînea
    Andrei Rînea April 18th, 2011

    Isn't it simpler to just have a presentation VM that you don't touch except for practicing and presenting? I mean you could disable all unnecessary services, windows update, etc. etc.

  5. Avatar for Cristóbal Galleguillos Katz
    Cristóbal Galleguillos Katz April 18th, 2011

    Many of these tips are comparable to any discipline where rehearsal is involved, for example, performing arts.
    A while ago I played in a band, and some of my band mates used to make a bit of fun about my habit of testing cables and amplifiers before the shows, carrying extra instruments and cables, and many other assorted tools. I have to say that all these preparation saved us a lot of times from disaster.
    Maybe there's some kind of knowledge that can be shared between programmers and musicians.

  6. Avatar for haacked
    haacked April 18th, 2011

    @secretgeek NuGet already supports that!!!

  7. Avatar for @andrebaltieri
    @andrebaltieri April 18th, 2011

    Thanks for sharing your experiences Phil, and glad to see you`re wearing the Brazil shirt =D
    See ya!

  8. Avatar for Nithin Mohan
    Nithin Mohan April 18th, 2011

    Thanks Phil!!!. It was really an informative post, some are common mistakes I also used to make. I always this having a backup plan is always better than end up wasting necessary time.. You are article is very much useful for beginners like me.. Great post!!

  9. Avatar for Allan Dahl
    Allan Dahl April 18th, 2011

    Great post, especially the tip about saving the parts of the internet locally that you intend to use in case everything blows up.
    I have seen many presentations (and done some myself), where I just want to display something on a website and then, "ooh, the internet's not working right now...", and it's such a pity and ruins the flow

  10. Avatar for DevMvc
    DevMvc April 18th, 2011

    Hi Phill, great tips, and remember a mistake is not a mistake if you learn from it.

  11. Avatar for Hyojung Kwon
    Hyojung Kwon April 18th, 2011

    I am a big fan of your presentation. Please do not blame yourself :)
    I am always expecting your presentation and new technology you give in every big events such as MIX, PDC, MVCconference...
    Expecting your next presentation from South Korea... :)

  12. Avatar for Claire
    Claire April 18th, 2011

    "Your audience will forgive the occasional demo failure that’s not in your control as long as the failure doesn’t distract from the overall flow of the presentation too much"--> so true. You have to be able to a)identify and b)abandon a sinking ship. There are always others you can jump on!

  13. Avatar for Jeff galton
    Jeff galton April 19th, 2011

    Great post! Thanks for sharing. One book I have found invaluable on this same subject is Scott Burken's book "Confessions of a Public Speaker"

  14. Avatar for tugberk
    tugberk April 19th, 2011

    hmm, great hand writing :) I thought my hand writing was very bad but it is nearly the same as scott's :)
    In my opinion, your first presentation was nearly awesome. there were some broken things and you have got lots of build errors but who doesn't get them? I don't know maybe I liked it because your way of explaining things fits me. great job you did there.
    I guess you will be on TechEd doing presentations on this May. will we be able to watch those sessions, too?

  15. Avatar for John Bristowe
    John Bristowe April 19th, 2011

    Great post. Lots of good stuff. But dude, seriously... I thought you did very well. Don't beat yourself up. :)

  16. Avatar for Michael Palermo
    Michael Palermo April 19th, 2011

    I suffer the "optimism" snare as well. Good reminders!

  17. Avatar for Michael Thelen
    Michael Thelen April 19th, 2011

    That was a great presentation! Was great meeting you at MIX. I get wary if I see a developer crank out 50 lines of mystical generic's without mistake, or magically inject and huge code snipit.
    Tips are great though! Almost all developers will end up giving a presentation at some point if only internally to our coworkers. And tips like these help us pull off professional level presentations that in the end, help everyone learn more.

  18. Avatar for haacked
    haacked April 20th, 2011

    Thanks folks! @Michael I am currently not planning to be at Tech-Ed.

  19. Avatar for Vanderlei Pereira
    Vanderlei Pereira April 20th, 2011

    Thanks for the tips! Just another tip: Always wear this t-shirt as you did in Brazil during Webcamps. :P

  20. Avatar for tugberk
    tugberk April 21st, 2011

    here how it looks like after $host thing on PMC;
    should I keep writing here or move this to discussions tab?

  21. Avatar for tugberk
    tugberk April 21st, 2011

    owww :s comment on wrong post :S I should hit the morning coffee harder or the coffee has not kicked yet :s sorry.

  22. Avatar for nachid
    nachid April 25th, 2011

    Do you know this law
    Anything that can go wrong, will certainly go wrong

  23. Avatar for Hajan Selmani
    Hajan Selmani April 28th, 2011

    Excellent post! Great advices and thank you for sharing all of these stuff! ;)

  24. Avatar for CodeDemo
    CodeDemo October 14th, 2013

    Try CodeDemo, if you need to use code snippets in your presentation:

  25. Avatar for peddy
    peddy March 8th, 2015

    Looks like there's a bug in the build of Subtext I happen to be using. This is an unreleased version so I'm testing in production.