The hired contractor will write a C# library, which given a calendar provider and an access token, computes a set of aggregate statistics about the person’s calendar and their recent meetings. To compute these statistics, the application should iterate over the person’s calendar events from the last N weeks (for some parameter N), processing the meta-data about the meetings, including when the meeting is, and who is being met with.
Statistics should include:
Per week stats:
- Mean, median, mode, max, variance of number of meetings per week
- Mean, median, mode, max, variance of total number of hours spent in meetings per week.
- Mean, median, mode, max, variance of number of unique people met with per week
- Mean, median, mode, max, variance of number of unique companies (by email domain) met with per week
- Average busiest day of the week (by number of meetings)
Per meeting stats:
- (# of meetings where user is organizer) / (total # of meetings)
- Mean, median, mode, max, variance of number of attendees per meeting
- Company most often met with (by email domain)
- Mean, median, mode, max, variance of length of meetings
Your library should connect to the Google Calendar API (https://developers.google.com/google-apps/calendar/) and the Microsoft Graph API (https://graph.microsoft.io) to query the calendars of the user, and for each calendar service, your library should implement a getCalendarEvents() method on an ICalendar interface which we will provide.
You will also be responsible for developing and testing this library for various calendar scenarios and edge cases (e.g. empty calendar, very full calendars, etc.) for both Google and Microsoft calendar services. You should share a test application that allows us to plug in our tokens/providers and will perform a series of method calls using your library, and will output the requested statistics.