What made you create the SEPTA Instant App?
In 2011, I was living in Philadelphia and commuting two-or-three times a week to my job in NYC. My day would start super early and would involve me taking either a Megabus or occasionally, an Amtrak or NJT train from 30th Street.
At the time, Android was in its infancy and had only been out a year or two. I’ve always been a bit of a transit-nerd but was constantly frustrated about an official SEPTA app not existing then. I’ve always had a keen (albeit amateurish) interest in simplicity & design, and had previously thrown around a few different side-project ideas. Shortly after, I came across the developer API (app SEPTA programming interface) that they published as part of a Philadelphia city Hackathon. When I looked further into it and saw what was possible, I knew that I wanted to learn this Android thing, and used many months of that commute to work on the first release.
What software and/or language did you use to create this app?
There are a few unique things, but for the most part, it’s almost all native Java and Android SDK. There had to be a lot of work done on the internal SQL database queries(shout out to the advice from Reed Lauber, who had previously created the NextSEPTA website) to which wasn’t the most pleasant learning experience.
Another big problem was that in 2011, Android apps only allowed a maximum size of 10 megabytes for assets, which include any database file. The full, downloadable SEPTA schedules, are over 100 megabytes and that doesn’t even account for database indexes. That was a tricky problem for sure. Another big part of it, though, is the route alert push notifications. SEPTA publishes a feed of disruption, advisory, weather, etc route alerts that are updated multiple times a day from the SEPTA control center. This stuff is really valuable information, and I wanted the app to support these updates – and have the user notified – when something on route changes.
One of the early decisions I made, was for these notifications to be sent “or pushed” from a dedicated server directly to devices, as opposed to being manually polled multiple times an hour, where an app would have to wake from sleep, check for alerts (which it may have missed anyway), and then idle until the device eventually goes back to sleep.
Using push notifications saves huge amounts of battery for every device, but it comes with two downsides: the need for a dedicated server, and the sheer development complexity – basically a whole other app running in the cloud that maintains a list installed apps and their associated subscribed routes (this is all that’s sent), and calculating the differences in alerts for every user, for every SEPTA published route update. This remains one of the most challenging parts of the whole development cycle.
Nerds: I recently open-sourced the push-notification module that powers the alerts server on GitHub.
Do you realize SEPTA does not have a dedicated app like this? Have anyone from SEPTA reached out to you?
Well, of course, the recently launched their own official SEPTA Android application, but that wasn’t around back then. They both do things differently and have really different designs and ways of performing something. I had two immovable requirements that I kept in my mind when developing the app. 1) It had to be lightning fast. (hence the name), and 2) It must be able to be operated with easily with one hand, preferably one thumb (hence the button size and color).
As an organization, SEPTA has generally been incredibly helpful to me over the last few years, and have a few good friends that work there. I’m grateful for their support few years and have a few good friends that work there. I’m grateful for their support regarding various technical things in the last few years. I’m particularly thankful for the original SEPTA API, and that their contributions to technical Hackathons resulted in it. The app really wouldn’t have been possible without it, so thanks, SEPTA!
Do you make money with this app or do you just do it for fun?
I don’t make any money from the app, although there used to be a way for people to “buy a beer” – a kind of donation – from within the app via an In-App Purchase to help cover server-costs. It didn’t do anything but change a menu item to a heart. Google recently made a change to the Play Store, where apps with these In-App purchases had the subtitle “Contains In-App Purchases”. The Buy Me a Beer function only resulted in a few bucks a month, and so I really didn’t think it was worth the trade-off for the off-putting subtitle in the Google Play listing, so removed it earlier this year. I don’t want to be in the business of nickel-and-diming. I’m not Candy Crush or Angry Birds and have always been adamant that SEPTA Instant remains a free application. On a personal level, I’m a big supporter of public transit, and wouldn’t be able to justify charging something for such a crucial service that affects so many in the city daily.
How much do you spend keeping this SEPTA Instant running?
At the moment, enough work has gone into it where costs are low. Honestly, it’s mostly the time. I don’t think I could begin to calculate the amount of time I’ve spent developing the app throughout the last five years. While changes to the app appear small, it’s been rewritten from scratch a bunch of times, and a lot of development time has gone into the alert push notification server alone.
Indie developers know the kind of impending panic of having to rush out a bug-fix release. I think there have been something like 30 schedule updates since I started the project, which often means staying up way too late on a Sunday night. It’s a great thing to maintain, but due to it being a widely used transit app, it’s also an incredible responsibility. In the past when I’ve introduced bugs, or if there has been a scheduling error, I know about it.
I remember a few years ago, there was a giant winter storm around the Christmas period. There were a few days where dozens of alerts being published for all routes (which I push to tens of thousands of SEPTA Instant users). I think that month my web server hosting bill topped a thousand dollars. After that, I decided to write my own notification server that could be published on a cluster of cheaper servers, saving a massive amount of money – and my stress. Thankfully, now it costs me a nominal amount to keep it ticking.
Will you make another app in the future?
….haha. Follow me @splendidbits
Thanks, Daniel