📆 A Tale of Two Calendars

📆 A Tale of Two Calendars

Lately, I've been scheduling a ton of meetings with folk. However, in the last couple of weeks, I remarked that some people use RSVP systems that lack quite a bit of love in terms of user-experience design: seamless calendar integrations.

The best modern RSVP systems will have some kind of nice front-office system for guests to sign-up for an availability that is open on one's calendar.

Even without that convenience, there's usually going to be at least a back-office system that lets calendar owners (or their assistants) setup meetings, register the attendees, let the attendees RSVP, etc. Despite decades of all these simple best practices being built-up in the likes of Microsoft Outlook, Google Calendar, and various other powerhouse tools, some enterprises end up with a vendor that has a completely lackluster calendaring system.

Most of the time, I'd receive event invitations from enterprises having decent RSVP systems by e-mail. My various calendar systems (Google Calendar, Windows Calendar, Thunderbird, etc) would just automatically recognize that I'm a invitee to an event and even add that new event to my calendar.

However, sometimes, I get e-mails having contents like:

Hi Victor,

You're invited to meet with <Host> at <date/time>

Here's a meeting link: <some_hyperlink>

Here are some phone numbers as a fallback: <fallback_numbers>


Cheers,
– Your Host

<event.ics> (attachment)

They look perfectly complete, telling me when, and where, and with whom I will be meeting. Unfortunately, the ".ics" files they provide are incomplete and the hosts run the risk of be never noticing their invitation, never confirming attendance with them, and just looking crazy for missing a meeting!

Let's analyze what's going on under the hood here. See "Exhibit A" and "Exhibit B" further below.

The "<—" marks in the first sample highlight the most important bits to include in ".ics" files – the invitees and their RSVPs. The producer of the file: "calendso/ics" did a good job, and events like this are automatically integrated into calendars upon receipt via e-mail.

The second sample file, made by "icalendar-ruby", and very likely some unidentified RSVP system around that module, is lacking the "ORGANIZER" and "ATTENDEE" fields. The result – lack of automated integration into calendar systems upon receipt via e-mail.

Exhibit A (good, concise, has "invitees" listed, does the job):

BEGIN:VCALENDAR
VERSION:2.0
CALSCALE:GREGORIAN
PRODID:calendso/ics
METHOD:PUBLISH
X-PUBLISHED-TTL:PT1H
BEGIN:VEVENT
UID:jXFTXZYUdP8ad59p218Fy
SUMMARY:45 Minute Meeting with Bob Alice
DTSTAMP:20220412T190400Z
DTSTART:20220419T190000Z
DESCRIPTION:A new event has been scheduled.
STATUS:CONFIRMED
ORGANIZER;CN=Victor Yap:mailto:[email protected]                 <---
ATTENDEE;RSVP=FALSE;CN=Bob Alice:mailto:[email protected]  <---
DURATION:PT45M
END:VEVENT
END:VCALENDAR

Exhibit B (bad, overly complex, lacks "invitees"):

BEGIN:VCALENDAR
VERSION:2.0
PRODID:icalendar-ruby
CALSCALE:GREGORIAN
BEGIN:VTIMEZONE
TZID:America/Denver
BEGIN:DAYLIGHT
DTSTART:20220313T030000
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
TZNAME:MDT
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:20221106T010000
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
TZNAME:MST
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
DTSTAMP:20220420T015052Z
UID:7662b73d-268a-404d-8e72-03f088ae34da
DTSTART;TZID=America/Denver:20220420T100000
DTEND;TZID=America/Denver:20220420T104500
DESCRIPTION:A new meeting has appeared!
LOCATION:
SUMMARY:Meeting with Bob Alice
END:VEVENT
END:VCALENDAR

So there you have it. A tale of two calendars and their vastly different ".ics" outputs resulting in extremely different user experiences.