The most-used function of the app is to pull location-centric data from the Literary Events Calendar on our Drupal-based website, pw.org. I wrote a little mini-API-like thing to grab the specific data and return it (leveraging Views, for you Drupal folk). The app handles the rest, including hooks into the respective native e-mail, voice, calendar, maps, and sharing features (Apple's Social Framework and Android Intents.)
Then Geoffrey Landis got in touch. He maintains a publicly accessible Google calendar of Cleveland literary events. Since I was already working on a way to import calendars through Google API, I jumped at the chance when he kindly asked about getting the Cleveland Poetics calendar into the P&W event calendar. It's a win-win situation. P&W gets more help feeding the calendar, and the Cleveland literary community gets to take advantage of the app. Now several other folks have asked us to import their calendars, as well, so the importer periodically checks Google's Calendar API for new and updated events and syncs the calendars.
Of course, that wasn't enough.
Now we're being contacted by folks who only have iCal files exposed. Some are Google-hosted, some aren't. So, now I'm working on doing the same thing for .ics files. Ugh. What a horrid little format is the iCal file. Honestly, it's almost as bad as parsing e-mail files, but with more chaos and (thankfully) fewer options. I must have tried half a dozen PHP iCal-parsing libraries before just giving up and writing my own. It helps that I'm a former PERL coder. I may not bleed regular expressions, but they're certainly detectable in a blood sample.
But, of course, that wasn't enough.
Up until now, they were all regional calendars, specific to a single city--and a single time zone. But what about the small press with events spread all over the countr(y|ies) [Canadian support is built into the calendar]? Yeah. Awesome idea. So now it needs to check where the event is taking place and adjust the date/time on a per-event basis, rather than on a per-calendar basis. Grumble grumble. Welcome to the wonderful world of feature creep.