How We Finally Tackled the Massive Project We Were Putting Off (and How You Can, Too)

For years, recurring events have been a thorn in our side at The Events Calendar.

Not because we don’t love recurring events—they’re fantastic and convenient. But for several years, we’ve known that eventually we would need to smooth out kinks in our system for managing recurring events, which is one of the most popular features we offer with Events Calendar Pro.

We’ll get into detail later about exactly why we needed to overhaul our own system; this wasn’t one of those problems we could fix with a quick patch. Instead, this was one of those massive, daunting projects that loomed over us for a long time. We knew we needed a comprehensive solution for recurring events eventually, but in the interim, we’d tinker and implement quick fixes. We couldn’t wrap our heads around the amount of work and humanpower that we would need to solve the problem once and for all.

Why are we sharing this? Because we know we’re not the first company to face this kind of quagmire. Businesses of all types and sizes run into the same issue: How do you finally sink your teeth into a problem that’s been plaguing your business for months, years, or even decades—without hurting your bottom line? 

We don’t claim to be gurus or life coaches, but we do know a thing or two about conquering big challenges after finally hitting a breakthrough on our recurring events solution. While it’s still fresh in our minds, here’s a look at how we did it, along with some pointers that you might find helpful for overcoming your own business’s next major obstacle.

First, some background on the problem.

Recurring events is one of our most beloved features in Events Calendar Pro. It allows calendar owners to easily create a recurring event that occurs daily, weekly, monthly, or any other recurrence pattern. It saves tons of busywork by reducing the number of events users need to create manually.

But in the last decade or so, we ran into a few snags with the way we originally set up recurring events:

  • Recurring events were hard to scale. For every event post created, there are about 11 meta records that also get created. For a recurring event that happens daily over an entire year, that’s a lot of data—and a nightmare for scaling and load times. When a calendar has a significant number of recurring events, it creates a subpar experience for website owners who wait too long for events to be created. It’s also a pain for calendar users dealing with slow load times.
  • Changing one event in a series divorced it from the rest. You know how in Google Calendar or Outlook, you can make changes to a single event within a recurring series and it won’t impact the rest of the events? Unfortunately, in our system, editing a single recurring event would completely divorce it from the other events in that series. Not only was this frustrating for users, but it created a lot of data churn on the back end. Every time a recurring event was deleted, additional event records were created for the “new,” edited event.
  • Exports to external calendars could get messy. One cool feature of our recurring events is that they allowed users to make intricate rules. For example, you could have a recurring event that includes a Monday morning meeting and a Wednesday afternoon meeting in the same series. But this feature didn’t play nicely with the infrastructure of other popular calendars like iCal, Google Calendar, and Outlook. We knew we needed to find a way to continue offering users flexibility while also making the exports seamless.
  • We couldn’t confidently support recurring tickets. Given how destructive it was to edit a single event in a recurring series, we haven’t been able to offer recurring tickets. This is hands-down the most requested feature from our users. We knew that we needed to completely reimagine the way we run recurring events in order to give our customers the functionality they want and need.

If at first you don’t succeed…

It took us several years (and a bit of a Goldilocks approach) to comprehensively address these issues with recurring events. Our first couple of attempts didn’t get us where we needed to be. By the third time around, we were able to develop a solution that was just right.

The first approach

We found an unlikely sandbox for our first attempts to shore up recurring events in one of our other tools.

In addition to The Events Calendar plugins for WordPress, we offer a software-as-a-service tool called Loxi: It’s a web-based calendar that users can embed on any website. It’s built on the same foundation as The Events Calendar, but it’s website agnostic, so you can use Loxi whether you’re on Squarespace, Wix, Duda, WordPress, or somewhere else.

We launched Loxi in 2018, and that was when we made our first attempt at resolving the recurring events issues in a way that could also translate Events Calendar Pro.

Our early work at Loxi addressed just about all of the problems with the old recurring events back end—except for scaling. When we added lots of events to a Loxi calendar, load times were atrocious. We realized this wasn’t going to solve our problems at The Events Calendar, and it created problems at Loxi, too. So we went back to the drawing board.

The second approach

Our next iteration of recurring events also debuted on Loxi with the hopes that it could work for The Events Calendar. On Loxi, it solved the problem of scaling, but it required rolling back some of the new features from the first version in order to address issues with speed. It leaned into the quirks of our existing system instead of smoothing them out in a way that would accomplish all our goals at Events Calendar Pro.

It was a good fix for Loxi, but it wasn’t going to cut it for The Events Calendar. We went back to the drawing board.

The solution

Our general manager likes to say he doesn’t believe in the sunk cost fallacy, which is a good guiding principle when you’re attempting to fix anything that requires more than a quick patch. Why stay married to an old system that isn’t working anymore? Why not rebuild it from the ground up?

Instead of struggling with the baggage of our old system, we realized it was time to focus on what our customers needed and find new ways to meet their expectations. In late 2020, we had our eureka moment: We took everything we learned from the first two iterations at Loxi, began imagining what a brand new recurring events back engine could look like, then we made significant commitments internally to build a new system and get the project done.

Those investments included:

  • Taking two of our strongest developers and putting them full-time on the recurring events project. No more chipping away at this while juggling all our other product maintenance and bug fixes.
  • Allowing our product owner to exclusively dedicate her time to recurring events as the project got further along.

By making a significant commitment to the project with these staffing decisions, we were able to finally have the strategic breakthrough we needed in order to create a brand new system for recurring events. 

Instead of spending several more years tackling it on an ad-hoc basis, we completed most of the work in about six months. The key was allowing a subset of our team to be solely dedicated to the project. It sounds simple, but it’s a scary move for any company that’s also trying to keep other projects and initiatives moving and protect the bottom line. This was a crucial investment that would pay off: We completed the project, did it right, and did right by our customers.

The future of recurring events

Now we have the framework for the next version of recurring events. Before we can implement it for all our users, we’ll be taking the next several months for thorough testing and working out bugs.

So what can you expect when the release arrives? For starters, we’ve improved load times for admins and users and we’ve sped up the process for event creation. We’re introducing more flexible save options for recurring events and more efficient event updates. Plus, we’ll have better compatibility for importing and exporting events—a feature we’ll continue to build on.

We’ll also be launching Event Series: A flexible, elegant way to create recurring and connected events.

Calendar owners will be able to create entire event series with a mix of single and recurring events that will appear in the calendar. Those events will also display on series landing pages that are sleek and easy to edit. Users can tweak and edit events in a series to their hearts’ content without fear of disconnecting those events from the other events in the series. 

With Event Series, we’ll be using the same standard system as other major players like iCal and Google, which will make event exports even easier.

This new system will also allow us to eventually add more flexible ticketing options. In the future, users could allow customers to purchase a single ticket for access to all events in a series, or they could sell tickets for each event individually within a series. (We’re still working on this capability, and it won’t be ready until a later release of Event Tickets.)

An icon in the calendar will denote events that are part of a series, which helps users quickly find what they’re looking for. From the series landing page, users will have the option to export every event to their own external calendars. And perhaps most importantly, this systemic change will allow us to finally tackle recurring tickets. We hope to offer this feature to our customers in the near future, with a target of early 2022.

Don’t be afraid to start from scratch.

That’s the most important takeaway we can offer you from our experience. You don’t have to tear everything to the ground right away—we learned a lot from our first attempts to tweak our old recurring events system. Those learnings took us to the ultimate solution, which required dismantling the foundation of a system we relied on for more than a decade. 

Was it scary? At times! But the process of rebuilding gave our team the freedom to think creatively and find a holistic solution to the problem, instead of just treating the symptoms. Temporarily shifting our team’s responsibilities was the last big push we needed to take the project home.

Ultimately, we conquered this massive project by stepping back and focusing on what our customers wanted to accomplish with recurring events. By solving for their needs, we came up with a better system than the one we started with. It’s a win for our team and for our customers—the best possible outcome.