The hidden complexity of simplicity

Since day one, we’ve aimed for Witful to be fast, clean, and simple. These continue to be our guiding principles — allowing us to deliver a lightweight tool that keeps your busy day flowing smoothly. As an engineer at Witful who’s helped evolve the product from its days as a prototype, I continuously wrangle with the code to ensure the experience stays smooth and snappy. I must admit, I love it.

First, let’s take you on a short tour of Witful. You log in. The first thing you see is your day’s agenda — the names and times of meetings inside clean gray boxes on your left, and a list of unchecked boxes on your right as a reminder of action items to follow-up on.

The Witful Home / Agenda page

Throughout the day, you’ll repeat a fluid and minimal set of keystrokes (or clicks) as you go from one meeting to the next: ‘m’ key into your next meeting, ‘v’ to open the video conference — whether Zoom, Teams, Skype, or Google Meet. As you’re capturing meeting notes, you seamlessly add action items with ‘!!’ or follow-up questions using ‘??’ without ever lifting a hand from the keyboard. Finding notes from previous meetings is quick — whether collating by the recurring series or a meeting participant or using the tried-and-true search bar.

The reliability, speed, and simplicity of Witful is its superpower. But what have we done to ensure these qualities persist?

There are, of course, the standard best practices of modern software development which we abide by (this product was created by a team of cloud consultants after all). We run on managed Google Cloud Platform infrastructure for maximum uptime and security. This also frees up more developer hours to dedicate towards features. We run frequent backups to ensure your data is always safe.. We enforce strict data access policies and a thorough audit log to respect customer privacy.

Beyond these basics, we’ve spent thousands of hours architecting the application, developing open source libraries, and rewriting code only to rewrite it three more times, to ensure our guiding principles remain steadfast.

Our technology stack involves a heavy-duty client-side “single-page application” using the relatively niche Elm programming language and the offline-enabled, real-time-updating Google Firebase. This allows for an experience where you should never need to refresh the app to see the latest data, and if your internet happens to go down, say boarding a plane, you’re still able to freely navigate and use Witful, adding or editing notes as you please. Data is automatically synced the next time you’re back online.

Along the way, there have been a number of deceptively complex problems to solve. Things that, from the surface appear relatively straightforward, but ended up being tremendously involved. For example, integrating with Google Calendar. Every time your calendar is altered, we immediately update the Witful database, and push these changes to your browser. But what happens when a recurring series of events is edited, say a new attendee is added, and a potentially limitless number of meetings off into infinity are affected? Well, of course we don’t store meetings for centuries from now, but even with an upper time limit, we found recurring meeting updates a constant source of lagginess within Witful.

In comes ye olde RFC 5545, the Internet Calendaring and Scheduling Core Object Specification, or iCalendar spec. After thoroughly scouring this for days, we found a solution that allowed us to cut down roughly 90% of the calendar event data we sent across the wire and stored client-side. This massively improved sync times, storage use, and search speeds — but it involved supporting the incredible complexity of the recurring event metadata defined in the infamous RRULE. We are in the midst of rolling out the elm-rrule library, both to help speed up the processing of recurring events, and as a bonus, contribute to the beloved Elm ecosystem.

We’ve also developed another library — elm-firestore — which vastly improves the experience of Elm developers when interacting with Google Firestore.

In future posts, I look forward to diving deeper into the weeds on some of the other technical adventures we’ve encountered while working within Google Cloud, Elm-Lang, and all things time and calendars.

Meanwhile, stay brilliant with Witful.