Sunsetting a Live Service

“People think focus means saying yes to the thing you’ve got to focus on. But that’s not what it means at all. It means saying no to the hundred other good ideas that there are. You have to pick carefully.”

-Steve Jobs

As a developer who’s started more projects than I can count, it’s good to take a look at one’s portfolio from time to time and do a bit of a spring cleaning.

What

BaDumChh was a daily joke texting service that I launched a few years ago. You can read about its inception here. TL;DR I was really excited about this idea for a long time and even ended up doing a relaunch after it was running for a while already.

Why

This decision was not easy. BaDumChh was close to my heart and not only was I a user of it, but I originally built this service for myself. So why did I decide to sunset it? A few reasons:

Not Curated Content

I always strived for BaDumChh to be a self-sustaining service that could run on its own. And it was that. But without moderation of jokes, there were some days where the joke that was sent out was inappropriate, offensive, or just not funny. This wasn’t the type of quality that I wanted tied to my name.

Growth

Growth was non-existent. I had only a small handful of people on the service and that number hadn’t changed in years.

Business Model

While payments were implemented and could run without intervention from myself, there were no paying users. And since this was a texting service, I was actually paying for this out of my pocket.

Needless to say, when I found myself looking ahead to the future and trying to focus on quality projects that I’d be proud to put my name on, BaDumChh didn’t make the cut.

How

Because BaDumChh was a live service and had many moving pieces, I had to make sure to come up with a graceful exit plan.

Using a feature I had built into the service a while back, I was able to schedule a message to all users on a certain Friday.

Once this message was sent out, I pushed up changes to the site that I had made ahead of time that would alert incoming users of the discontinuation of the service. These changes included:

  • Invalidating the API
  • Invalidating webhooks
  • Invalidating cron scripts
  • Updating the home page to say that the service has been discontinued
  • Updating the Twilio endpoints to have a proper response

After these were pushed up, I still had to make some updates to the environment itself. That included:

  • Removing the cron jobs entirely
  • Deleting environment variables for live services
  • Deleting the test environment
  • Emptying the database with user’s information. I value my user’s privacy.
  • Deleting the subscription plans in Stripe

I also have a scheduled calendar notification in 1 month to release the Twilio phone numbers I used. I wanted to keep these around for a transitionary period in case someone were to reach these.

Lessons/Ode

Some things that I experienced first hand from running BaDumChh:

  • ‘If you build it, they will come’ is not real.
  • If you want consistent and good quality, you cannot rely purely on an algorithm. You must either curate the content, or have some sort of democratic system (a la Reddit upvotes).
  • Know when to say ‘good bye’.

I don’t regret creating BaDumChh. I am a big believer in learning from one’s failures and moving forward. Otherwise, I wouldn’t be where I am today, and I’d like to think I’m in a pretty good place. I absolutely love the system I created for this service, even if it will no longer see the light of day. The only personally identifiable information I kept on my servers were user’s phone numbers. The whole system ran on its own without administration (though this was eventually part of its downfall). The login process was smooth as butter. And it even ended up putting a smile on some people’s faces. But alas, the time has come to focus.

Anything That Can Go Wrong…

…will go wrong. I used to think that this Murphy guy was just a pessimist who didn’t know how to see the cup as half full. And then, as one might see where this is going, I encountered the infamous law first hand.

That one client of yours that accounts for 80% of your income? They’re actively looking for a more economical solution.

The tickets that you were supposed to print for the upcoming event that you’re already late for? Too bad everyone was too busy to replace the ink in the office printer.

Your partner in the project who was supposed to lead the presentation? She might’ve forgotten to mention that she gets really bad allergies this time of the year.

Whether intentional or not, these things happen, and probably at the worst possible time. The examples above are all real. Yet, as the author of a blog post about Murphy’s law, somehow I was still surprised and unprepared when these times came around.

It’s important for us to constantly challenge the assumptions we make and to have a plan B for when the one constant you thought was always going to be there shifts from under you without a care in the world.

Budget for what would happen if this client disappeared off the face of the earth tomorrow.

Print the tickets ahead of time, not on your way to the event, or be proactive in replacing the ink for the printer and be everyone’s new favorite office mate.

Prepare with your partner and be ready to take the mic when the big presentation comes around.

What are the major assumptions you’re making, and what can you do right now to prepare for the day when those assumptions are pulled out from under you?