All posts by Brian Cantoni

Best Practices for Leading Online Meetings

Team Meeting Fist Bump

Online meetings continue to rise in popularity, in particular for companies with remote workers or distributed teams. The effectiveness of online meetings can be improved significantly by following a few simple techniques and habits.

First of all, what kind and size of meetings are we talking about?

  1. One-on-one (2 people)
  2. Smaller team meetings (2-10 people)
  3. Medium team meetings, internal training or demo (10-20)
  4. Larger team meetings, company “all hands” (20+)
  5. Public facing webinar (marketing, sales, training)

This guide is targeting categories 3 & 4 – these meetings are big enough that you want to run them effectively but are still internal and less formal compared to public webinars or training. These types of meetings are often recorded for those not able to attend, so creating a good quality recording is important.

The advice here should be general enough to apply to most online meeting software, even though the exact features may vary and the apps themselves are constantly changing. Over time I’ve used Skype, GoToMeeting, Google Hangouts, WebEx, and most recently BlueJeans. In some cases I’ll reference particular options in certain software which are helpful.

With the intro out of the way, let’s dive in to the list of best practices. What follows here is opinionated based on my own experiences and needs, so make sure to tailor the advice here to fit your own situations.

Preparing

  • If you’re using a presentation, make sure to have a shareable version of it. Google Docs is good for sharing; PowerPoint/Keynote can be shared as PDF for those who might not have those apps.
  • On the title slide make sure to include the presenter’s name and date (this helps puts the meeting in the proper context for anyone watching the recording later)
  • If applicable, post the slides and share the link ahead of the meeting
  • Configure your computer for effective visibility for meeting participants:
    • When showing a presentation, use slide show mode
    • In other apps, use full screen mode if available
    • Zoom in (increase font size) as needed, especially for anything involving code
    • Turn off 2nd monitor if needed (some older apps like WebEx had a real problem with this)
    • Quit or snooze any apps which may show notifications or reminders
  • Practice with your online meeting software if you’ve never presented before

Scheduling

  • Schedule a unique meeting in your system and include the pertinent details in the calendar invite:
    • Instructions for joining the meeting
    • Agenda
    • Where will chat/Q&A happen
    • Will recording be posted afterwards
  • Configure your meeting with settings to help minimize distractions:
    • Entry/exit tones: off (to avoid annoying beeps)
    • Mute on entry (not everyone will remember to automatically mute themselves)
    • If using a separate system like HipChat or Slack for chat and Q&A, disable the built-in chat
  • For bigger meetings with moderators/presenters in multiple locations, consider using a back-channel for coordinating hand-offs and so on. Using a mobile app like WhatsApp, GroupMe or SMS has the added benefit of being available even if some participants’ internet connections have problems.

Running

  • Have a separate moderator who is not presenting; this lets the presenter focus on their content while the moderator focuses on the meeting itself (mute/unmute, watching for questions, etc.).
  • Join the meeting from a second device like a tablet or phone and leave it on your desk. This makes it easier to confirm and monitor what the attendee view looks like. (Make sure to mute and silence the 2nd device to avoid audio feedback.)
  • Start and join the meeting 10 minutes early and arrange for all presenters to do the same; check all the controls and screensharing before everyone joins. (For first-time presenters, you could do a separate dry-run meeting earlier to ensure their software is working correctly.)
  • When joining the meeting, make sure all presenters are identifiable by their names (as opposed to something like “guest_1” or a dial-in phone number)
  • If your software has the option, turn off entry/exit tones and select mute on entry
  • At the start of the meeting, make announcements a couple times while waiting for people to join:
    • Where the chat or Q&A will be happening
    • Please mute yourself
    • We’ll be starting soon
    • This will be recorded and posted afterwards

Recording

Recordings are helpful for anythings that may have value later, especially internal product demos or training. They can also be useful for regular project/staff meetings for the benefit of people unable to attend.

  • If your meeting software has a built-in recording feature, use it. If not (or even in addition to) you can use a desktop application like Screenflow or Camtasia. (For higher-quality recordings, I always use an external recording application.) Make sure to record the presented video screen, the meeting audio, and your local audio device.
  • If the meeting is important (e.g. you have a guest speaker), have a second person also record from their computer as a backup.
  • Don’t start the recording until the presentation is about to start (i.e. don’t record your announcements mentioned above).
  • When you’re ready to start, hit record, wait a moment, then give a good introduction before passing off to the first presenter. That gives your recording a clean starting point with the subject mentioned right away (and avoids all the pre-meeting dead time).

Q&A

  • For questions and discussion during or after the presentation, encourage everyone to unmute and ask their question live; this helps with those watching the recording later.
  • For questions read from chat or other sources, make sure to read the questions out loug before answering (again, for the benefit of the recording).

After

  • Clean up and edit the video as needed (depending on how polished you need it). (I like to at least run through the whole video and edit out obvious dead time, coughing, and “ums”.)
  • Upload/post the video and slides
  • Send an email to everyone with links to both

Photo by rawpixel on Unsplash

Running LinkChecker on a Mac

LinkChecker is a utility written in Python for scanning and checking web page links, usually used for finding invalid or outdated pointers which need to be updated. The LinkChecker project is in a bit of flux right now because the original project (GitHub wummel/linkchecker) has gone completely quiet and presumably the original author is no longer interested in maintaining it. Luckily there is a new group of volunteers rallying around a new fork (GitHub linkcheck/linkchecker)

The project has a variety of packaged downloads, but they are not all updated yet from the newest source tree. On my Mac system I always had trouble making the old project work (usually getting an error like ImportError: No module named requests). Switching to the new LinkChecker source and using Virtualenv have solved my problems! These are my steps for making this work; it’s pretty straightforward if you have some experience with Python-based utilities.

Prerequisites

First Time Installation

The first step is to create a working directory for LinkChecker and set up the virtual Python environment:

mkdir ~/linkchecker
cd ~/linkchecker
virtualenv env
source env/bin/activate
python --version

Next we’ll clone the latest LinkChecker and install it in the virtual Python environment:

git clone https://github.com/linkcheck/linkchecker.git .
python setup.py sdist --manifest-only
python setup.py build
python setup.py install

Next, confirm that it’s installed and ready to run:

linkchecker
linkchecker --help

Finally, start using the tool and check some websites, for example:

linkchecker --timeout 5 --check-extern https://tweetfave.com/
linkchecker -r 1 --timeout 5 --check-extern http://www.cantoni.org/2017/07/27/podcast-update-feed-reader

Running LinkChecker

The above steps are just needed for the first time. After that, you just need to enter the Virtualenv first:

cd ~/linkchecker
source env/bin/activate
linkchecker --help

Tweetfave Passes 500K Tweets

My Tweetfave service has been running for just over 4 years now and just passed the 500K tweets mark! The usage has been pretty steady considering I haven’t done much to promote it. Over 270 users have tried the service, with about 100 still active. Luckily the service hasn’t required much maintenance over that time, just an occasional update to deal with webservice API changes or to fix minor bugs.

Here’s the growth chart covering the last 4 years:

Chart: Tweetfave Reaches 500K

If you use Twitter and use the “favorites” feature, give Tweetfave a try. The service will automatically email you (every couple of hours) all the tweets you liked.

Podcast Update and Return of Feed Readers

What podcasts am I listening to these days? (Hypothetical question; no one actually ever asks me that…) Similar to what I’ve done in the past years, here’s a quick update.

First of all I’m still using the Downcast podcast player and really like it. There are a few new non-Apple podcast players getting a lot of buzz, but I haven’t had a reason to switch yet.

Here’s my current podcast subscription list. It’s still mostly technical podcasts but I’ve picked up a few maker and woodworking shows in there as well:

Also thanks to episode #240 of The Changelog, I’m now using a feed reader again – Feedbin. Currently I’m using it to follow all my podcasts so I can read all the show notes. (Downcast’s OPML export feature makes this really easy.) I’m still not sure whether I’ll get back into feed reading like the glory days (AmphetaDesk, Bloglines, Google Reader), but for now this is really handy.

Feedbin screenshot

Feedbin home page with all my podcast feeds (click for larger image)
Feedbin feed setting screenshot

Feedbin has a nice feature showing the publishing timeline for each podcast (click for larger image)

Tweetfave Support for Longer Tweets

Tonight I spent a couple hours troubleshooting a problem with my Tweetfave service and handling of links. Luckily I discovered it was a simple matter of keeping up with Twitter’s API changes. This service has been running so smoothly and the API has actually been pretty stable. I needed to dust off my PHP skills and dig in to track down and adapt to an important change.

Background

Tweetfave is a free service which monitors the tweets you mark as favorites (now referred to as “likes”), then sends them to you by email. Currently the system stats show over 250 users have tried the service, recording just under 400,000 tweets!

One of the handy features in Tweetfave is the “un-shortening” of the short URLs embedded in the tweet. Rather than showing a generic “http://t.co/xyz” link, the software will reveal the original URL.

Problem

This has all been working fine, but recently I noticed something strange where the URL decoding resulted in a link back to the original tweet. Instead we should be seeing the the links within the tweet.

Here’s an example with the original tweet which doesn’t have any links, but does include an embedded image which should have a Twitter image URL:

Truebeck tweet screenshot
Example tweet with image

However when it’s processed by Tweetfave, the resulting email snippet shows a link back to https://twitter.com/i/web/status/831963043508596736 which is the original tweet:

Truebeck tweetfave email snippet
Incorrect Tweetfave email snippet

Solution

It took a bit of trial and error, debug logging, and Google searching to find the culprit: the support for more than 140 characters in tweets. When Twitter added that support, they wanted to retain compatibility. Any API call which returned tweet text was still limited to 140 characters, with the link back to the tweet to read the rest.

It looks like the announcements came out in May 2016:

They were a little fuzzy about when the actual changes would happen, but from my logs I think it was around October 2016.

In the end the change was quite simple:

  1. Include the parameters extended_tweet=true in the API requests
  2. Retrieve the original tweet text from the full_text rather than text response field

With those changes in place everything works again. For example this tweet from TheNextWeb includes both an article link and an image:

TNW tweet screenshot
Example tweet with image and link

Once decoded and sent by Tweetfave, the result included decoded links for both the article and the picture:

TNW Tweetfave email snippet
Corrected Tweetfave email snippet