A Conference On Microsoft Teams Series – Part 7 – The Agenda

Now that we had settled on the format of our content options it is time to talk about the agenda. Not specifically the content, but the important logistical elements around it.

Gapping & Concurrency

We got a bit over-excited with our agenda, mainly because in the time limits we had it was more about JFDI than sitting back and having reasoned discussion about the practicalities of everything.

We planned for running up to four sessions concurrently, each with a maximum duration of 45-minutes. Having independent meeting spaces for each session enabled us to keep the agenda to time as if sessions did overrun, they didn’t impact the timing of the following session.

Independent meetings also allowed us to reduce the gap between sessions to a comfortable 15-minutes for Attendees. It also meant that we could begin staging of the next session independently and 30-minutes before time so that both Producer and Speaker where well prepared to being on time.

How independent meetings allowed us to keep on time

Doing it in this way also allowed us to somewhat simplify the timing for everyone. By keeping sessions to 45-minutes and independent allowed us to start each session block on the hour. This is important for attendees who may be joining from other timezones to easily convert them.

When we set the agenda, we thought allowing 15-minutes between sessions would be ample time. We didn’t want it too long because we approached it with a philosophy that an Attendee will not sit and watch back to back sessions. They are more likely to choose a few key sessions to join and in-between either network, or get back to the day job.

Our feedback from Attendees was that they would have liked more time in-between to use the breakout meetings more.

Estimating Session Attendance

With running multiple sessions at the same time of course you are splitting your audience between them. It was pretty hard to estimate how many ‘active’ attendees we would have each hour because of the time zones people where in. Our rough calculations were:

65% of our attendees where European, 25% American and 10% Rest of the World. 2,200 people registered which made the numbers 1,430 from Europe, 550 from America and 220 from RoW.

Out of each geography we expected 50% of those not to turn up. Of the 50% that did, we expected that over a 7 hour conference ‘day’ they would tune in for a maximum of 2-3 hours.

Europe: 715/ 7 = 102 Attendees per hour per day. Based on a 7 hour conference schedule with 5 sessions running simultaneously, that put our average session attendance at an estimated 20 people.

America: 225 / 7 = 32 Attendees per hour per day with 4 simultaneous sessions average estimate 8 people.

RoW: 110 / 7 = 16 Attendees per hour with 4 sessions simultaneously = 4 people per session.

The above of course is our calculations using actual numbers. At the time we didn’t know what they where going to be. We had hoped for as many as 5,000 registrations, but achieved 48% of that target in the end. We always knew that APAC region we where going to struggle as it was a completely new market for us and no time to really generate awareness. We had hoped to be stronger in the USA than we turned out to be.

In the end, our calculation estimates turned out to be somewhat accurate. There were more popular sessions that drew more than the average whilst others dropped below the average for the region.

Our learnings of this experience has changed how we would deliver an agenda in the future as well as the geography we would operate in.


With online conferences you have to decide which time zone(s) your agenda is going to operate in. It is important to get this right in line with your intended audience otherwise this will impact attendance severely.

In hindsight, we probably made a few errors here that probably alienated some of our missing 50%. We were ambitious, running 3 timezones concurrently and the achievement on doing that is huge.

Learning from it, we would run an agenda in the following times for maximum coverage:

  • Europe – UK time (if larger UK following than continental Europe) or Central European time if more european attendance
  • America – Central Time (Chicago) as this will give both East and West coast more opportunities
  • APAC – Probably Sydney time since most of our APAC following came from East Australia and New Zealand.

ICS Files Dilemma

The best way to get Attendees to show up for a session online is getting the session in their calendar.

ICS/iCAL files that can be downloaded for each session is the best way to do that and certainly something that Attendees expect.

However, beware.. ICS files give you as an organiser a very large headache that leaves you in a dilemma between what is considered easy for an Attendee vs the cost of management of these.

Before we even get into technology of being able to display the agenda in a readable and searchable manner, the problem with ICS files is that they are only point in time.

As an organiser you need to promote your agenda as soon as possible. That is how you generate interest in your event. Attendees will expect that they will be able to book sessions from the point of registration and doing so add to their calendar. Your agenda will be set weeks in advance, you will have spent time constructing your ICS files to include the right date, time and most of all the join link to the session.

Whether you manually create these files, or have an agenda platform that dynamically creates them on download, your going to find yourself in a situation whereby you need to change a session.

You may need to move the session date, time or even swap a speaker or replace it entirely. In this situation any Attendee who has previously added the affected session to their calendar is not going to pick up that change.

They may find out by other means, but even then they have to manually update / manage their calendar. Invariably, they won’t and will end up wondering why the session is not what they were expecting, which will lead to negative feedback.

For our conference we began with “add to calendar” functionality but our chosen technology platform for the agenda didn’t work out so well. If you ever consider Modern Events Calendar for WordPress as a platform for your event, please, please think again.

In our opinion and experience the best way to present an agenda to your attendees is by using the following combination of features:

  • Stay away from ICS files if you can when you are running multiple, independent sessions.
  • Provide a session builder that allows each attendee a way to shortlist the sessions they want to attend in date/time order
  • Make sure you use short / vanity URLs for your join links, because this gives you the ability to change the back end schedule without affecting attendees
  • Provide a mechanism within Teams so that people can easily keep track of sessions

Handling Expired / Past Events

Our conference was free to watch online live. If attendees wanted to catch up on a previous session, they could using the on-demand service. Therefore, we had to find a way to prevent catch-up on Teams Live Events for attendees.

We knew that we weren’t going to be able to download all the recordings as soon as each session was over.

To prevent this, each Teams Live Event was scheduled with the setting “recording available to attendees” turned off

Prevent attendees from downloading the Teams Live Event Recording

Disabling this setting allowed attendees to rewind the session whilst the live event was in-progress, but once ended could not retrieve the download. Similarly, anyone who joined after the event was ended could not rewatch the session.

However, this was only part of the story for us. We wanted to give clear direction to late joiners that the session had finished. We created a generic webpage that we wanted people to be redirected to once the session was over that would have a link to session feedback.

Using Rebrandly and Power Automate we updated the join link destination URL once the session was over using a scheduled automated task.

The flow would look at our agenda excel table, get a row, learn the time of the session and then add a delay of 45 minutes to that time. Once the delay had expired, a post request to Rebrandly to update the URL behind the short link for the session was made to redirect to the expired web page we created.

Thinking about this further, subsequent to our event we found a way to pass URL strings to a WordPress hidden field that would allow feedback on a generic form very simple and straightforward. I will do a blog post on this in the future separately rather than going into detail here.

Posting Events in Teams

One of the most successful features of what we built where the automated adaptive cards we used to post the session titles, abstracts and join links to a dedicated channel based on track. Posting these 15-minutes before the start of the session allowed people an easy way to join based on what is happening in that moment.

Microsoft Teams Adaptive Cards using Flow

This was by far our most complex automation task, but a very necessary one. Without this people would have to rely on ICS files or Excel sheets and trust that they were correct. This method meant that if all else failed, they could easily join directly from Teams.

The hardest bit in this is the difference in behaviour of how Excel stores date and time vs how Power Automate understands. You would think that there would be some sort of understanding between these components, but Excel stores date and time as a decimal value and Power Automate uses ISO-8601. We had so much fun (and I really mean pain) with these…

In the end, I cobbled together a solution using a number of mathematical hacks because my knowledge of coding isn’t at that level. I am sure that there is a simpler way to do this for the more abled person. However, it worked flawlessly, so I am pleased with the outcome.

Step 1 – Excel Table

I created a table that will store the entire agenda in date / time order. The table included 3 columns labelled Date, Time and Hrs plus the session info

Sample of our Excel Table

The Date column was formatted as a Date, the Time as a Time and the Hrs as a Number.

Now we needed to convert a decimal value to a date value as Power Automate understands it. The problem I faced was if I had a date time value in the date column, Excel would store this as number of days since 1st Jan 1900 and a decimal value which represents the time as a percentage value of that day.

For the life of me could I work out how to convert this, so in the end it was quicker to separate the date from the time as different columns so that I could work with whole numbers.

The theory was once I could calculate the date from the number of days and concatenate the time, then that would give me the start date and time to work from. However, I still could not work out (personal limitation) how to convert decimal values to a time string. So opted for the Hrs column.

The Hrs column is just a number and I worked out that after converting days to an actual Gregorian date, that timestamp was always midnight of the calculated day in Power Automate e.g. 2020-07-06T00:00:00Z so simply adding the number of hours to it would give me a reliable date time e.g. +10 Hrs would be 2020-07-06T10:00Z (10am) and if I added 22 HRs would be 10pm at night. So that is what I based this on. I told you, messy, but it worked.

Step 2 – Power Automate – Date Conversion

Now we had a dataset to work from the Flow was a manual trigger that we would begin on the morning of the conference. The first step was to load to Excel table using “List rows in a table” action.

Getting the Agenda

Once into the “apply to each” loop we could then perform an action on each line. Before we continue, it is important that you understand flow does not multi-thread the loop. This means it must complete the entire action flow during each pass. Let’s say you introduce a delay action on loop 1 for 30 minutes, but need an action to perform on loop 2 in 15 minutes, then this will not work, because flow will not advance further until the 30 minute delay on loop 1 has finished.

The first item we had to manipulate is the conversion of the date from Excel to Power Automate. To do this we used an output method which allows us to manipulate an input and output something else calculated from it.

In this output we wanted to take the number from the date column in Excel and convert it to an actual date. This was trial and error but the expression that worked for us was


The total number of days added since 30th December 1899 where the days came from the Excel date column and the format we wanted the output.

Next to add the time to this day we added another output method to add the number of hours from the HRS column to the calculated date

Excel converting integers to date time

Then we needed to make sure it was properly formatted so we passed this into a Convert time zone action to set the time zone.

Getting the right format string for the time and date

The next item once we had calculated a date and time (the start of the session) we needed to subtract 15 minutes from that time because we wanted the adaptive card to be posted with 15 minutes to go before the session. To do this another output method to subtract time was added

Finally got the time for the post to fire

Now we added a delay action and chose the output from the SetPreSessionTime Output method. This would prevent the flow from going any further until this time was reached.

We then created a bunch of “If” conditions which looked at the track of the session.

If [track] is equal to collaboration post an adaptive card in the Collaboration Auditorium channel. The an If action in the “if no section” for the next track and so on.

For the purpose of this blog, we will concentrate on just the one track.

If the track was collaboration, then post an adaptive card we had made using the Adaptive Card designer from Microsoft.

Selecting the conference team and the channel and the message payload pasted with variables relating to the session.

Example of our Adaptive Card

In Part 8 we discuss the Exhibitor features

Skip to content