Rainy Day Ideas For Things You Can Build To Grow Your Business

Hiya guys! Patrick (patio11) here. You signed up for periodic emails from me about making and selling software, but it has been a few months since my last one. Sorry about that. [Edit: Alright, strictly speaking, you might not have ever gotten an email from me. Somebody might have just given you the link to this page, which is an online archive of an email that I sent to folks who had asked for it. If you'd like to get articles like this in your inbox, totally free, about once a week or two, give me your email address.]

I recently went to Microconf 2013, which was far and away the best conference of my life. (You can find detailed notes about it here.) It provided a burst of inspiration that I sorely needed. I highly recommend you come next year. Save that link to the notes, by the way, as they contain some of the best advice on running software businesses I've ever heard.

Candidly, the last few months I've been a bit burnt-out. Have you ever gotten that feeling where you're spinning your wheels doing things which just fundamentally Do Not Matter, and you need to get back on the happy, productive track, but you can't muster up the effort to land the Big Transformative Project which will get you there? Wanted something that you can just clear your afternoon and accomplish today?

I've done a few of those recently, so I thought I'd give you some examples. Feel free to steal them for your business.

Implement Better Dunning Emails

Many of you run SaaS businesses or otherwise charge people on a monthly/annual/etc basis. Occasionally, you will have customers whose cards can't be charged. One common reason is that they've expired. What do you do currently in that situation?

Candidly, I'd bet many of you either do absolutely nothing. The rest of you probably send an email reminder for them to update their credit cards (in trade parlance, these are "dunning emails"). Unfortunately, most dunning emails are written terribly.

Before I suggest a way to improve your dunning emails, here's ten minutes of programming worth thousands of dollars: Write a cron job which sends an email to the sales team (or founder) every time a customer either voluntarily cancels or gets their account cut off for non-payment, with the instructions "Bob Smith (bob@example.net) just canceled. Here's a link to his account details on our dashboard. Call Bob immediately and ask why he is cancelling."

This is very easy to do, and can result in great customer development opportunities. I know you might be slightly uncomfortable with doing it. Consider it great pro-active customer service for future customers like Bob. You can tell Bob, in as many words, that you are totally happy with him cancelling the service if it wasn't right for him but want to learn what you did wrong. Bob will generally be happy to talk your ear off.

You don't get Bob's phone number on sign-up? Oh come on, that's a weak excuse. You have his name, email address, and Google. You an almost certainly locate most customers in this circumstance if you cared to.

Often, Bob will tell you that he didn't really mean to cancel. He might try giving you his updated credit card right over the telephone. Make sure you are ready to take it, even if all you do is use your log-in-as-the-customer feature and type it into the computer yourself. (Many customers running businesses might not be able to get to their PC right away. Help them out.)

Anyhow, back to dunning emails. Sending them typically involves ten lines of code added to your application/billing system or less. Unfortunately, most businesses detail a junior engineer to write those ten lines, and they also get him to do the copywriting, and then you end up with gems like the following anonymized example:

Credit card charge failed. Try again.

The person receiving this email from your company has likely spent hundreds or thousands of dollars with you. They are at an inflection point in your relationship which will determine whether they spend hundreds/thousands with you in the future. For God's sake, put as much effort into this as you would any other sales channel.

I once had a credit card charge for Slicehost fail... and I was terribly embarassed about it. Why? I don't know, maybe it's a middle-class-upbringing thing, but I felt the strong sense like I had done something wrong. Slicehost naturally didn't -- they treated it as a minor hiccup in our relationship, and were a little weirded out when I called them to apologize. Many of your customers feel shame, embarrassment, or fear when they get a dunning email. We should do our utmost to not make them feel negative emotions.

So when I write a dunning email, I have three rules:

  • Succinctly describe what happened and how they can resolve it.
  • Go out of my way to avoid putting the customer at fault for the issue.
  • Demonstrate that I am a human, not like e.g. the phone company or bank in similar circumstances.

In fact, I feel so strongly that the phone company and banks are bad at customer communications, I actively score points off them with my copywriting. For example, here's a P.S. I use (P.S. the P.S. is the part of the email most likely to get read):

P.S. We're not the bank or the phone company. You're not in trouble. We're a small business, probably pretty similar to yours, and we understand that minor glitches like this happen. If you need any help straightening it out, drop me an email. We appreciate your business.

Speaking of resolving glitches without causing negative emotions: I would think long and hard about what happens when people don't pay. Cutting their account off immediately is rarely a good choice, particularly for services where usage might be passive from the customers' perspective. If they log into it every day, then throwing a big red message on log in might be appropriate. If your SaaS is something like analytics which you just set up and let go, then turning off parts of it might not be noticed by the customer for a while, which doesn't help you make the sale and increases the pain experienced by the customer.

Appointment Reminder, my SaaS business, is often used passively by customers: they put in all their appointments at the start of the week/month and then don't log in for a while. The app talks directly to their customers. Accordingly, I don't cut them off automatically: my dunning email notes that they get an automatic three day grace period while we retry their card daily. Honestly, it should probably say that but not actually shut them off after the grace period until I've manually reviewed things.

I also like using "the system" as the Bad Cop for the inevitable discussion of "Look, we're in business, if you don't pay for services then we don't provide you with services." "The billing system" controls whether accounts are active or not, but Patrick, CEO and the guy signing the dunning email, has told "the billing system" to extend you a three day grace period while we sort this out. On those occasions when a customer didn't get the email in time due to a holiday, they didn't blame me for shutting their account down, they praised me for being generous and blamed "computers." (n.b. The fact that this happened is a compelling reason to generally require manual review prior to shutting accounts down, since I would never have logged in on Christmas to freeze an account, for all the obvious reasons.)

Putting everything together, here is the copy I use for the dunning email in Appointment Reminder. Feel free to steal any notes from it for your own copy. This took me about two hours to implement and copywrite and has made me thousands of dollars. In addition, I have gotten actual letters from customers praising the dunning email. ("Thanks for being so understanding!") I'll guarantee you that doesn't happen to Verizon or Bank of America!

Improvements To Your Admin Dashboard

Founders love showing off two things when we meet up: photos of their children, and admin dashboards to their apps. This is so common, in fact, that I have a special testing mode which shows the dashboard without exposing actual customer data in it. (Implementation note: Since I'm generally doing this on my iPad, I have a link saved which cookies the device up with "fake data only until otherwise notified" and then I just log out when the conference/etc is over and I need to get back to productive work.)

Anyhow, I really like having a few things available when I log into mine:

  • A high-level health check of the business and application. (Generally usage stats for the last 24 hours and last week, plus monthly revenue and annual run rate.)
  • A list of customers currently on the free trial or who paid for the service recently, since they're overwhelmingly the most likely to need support.
  • The key metric I'm working on improving at the moment. (There's only four that really matter for SaaS: visits, conversion rate through the whole funnel, average revenue per account, and churn rate.)
  • An awesomebox.

What's the awesomebox? The awesomebox is your opportunity to take advantage of the fact that only expert users will ever use the dashboard, so it can feel free to break every rule of good UX in favor of supporting your wildest imagination. Some examples of what mine will do:

  • Given a Registration Key or Paypal/etc transaction ID, find the customer record, the associated account data, and bring up options for refunding, resending receipt, and other common CS tasks.
  • Given an email address or any arbitrary search string, find matching accounts. Search via names if we don't find anything in emails. Try common variations (bobsmith@gmail.com often has a similar hotmail in my business and forgets which one he signed up with).
  • Given a pre-defined prefix, run some common task.

This last item is mostly used as a stripped-down replacement for an SSH connection into my server. Some examples of the things it can do:

  • !reset: A soft reset of the application. This is often the easiest way to mitigate a server issue when I get an alert at 5 AM, prior to debugging it during the workday.
  • !mailme reportFoo Kicks off one of a few takes-a-while-to-calculate analytics tasks (like, say, calculating lifetime value for every account) and mails me the results as a CSV file in a few minutes.
  • !madagascar Puts the site into emergency maintenance mode. I've never had to use this one "in anger", but it makes me feel like I have a mitigation option if e.g. a major security issue gets found when I'm not physically located at a PC. (Why Madagascar? It's a video game/Internet meme reference: "Shut. Down. Everything.")
  • !inapp textTextText Drops a simple in-application message on the dashboard of all users. (There is a more complicated feature for messaging users individually, but it requires an actual UI.) This is useful for transient notifications like "Take a look at this new feature!" or "We're out of town at the moment, so replies to emails will be slightly delayed until Tuesday." which don't justify emailing everyone. (Sidenote: Intercom has this feature built into their SaaS.)

(Why not embed some sort of live Rails console or SSH widget into the page? Because you're asking for the Dark Gods of Application Security to smite you from on high if you do that. Seriously, that would be a bad call.)

I find that the awesomebox interface metaphor works particularly well on mobile devices, which I often find myself using for routine customer support while I'm traveling. Previously I'd just have a menu with 40 text links in it, but that gets a little unwieldy to hit the right item from an iPhone, and can't accept arguments quite so easily.

The nice part about admin dashboards is they take only an hour or so to get up and running and, if you build them in a modular fashion (such as via re-usable visual components if you do a lot of charts, or with the awesomebox architecture as described above), you can trivially add additional things to them every time you want to scratch an itch for 15 minutes. I find that a good way to establish "flow" in the mornings: knock one item off the list of CS tasks you had to do by hand, verify that it now works and will never trouble you again, and then dig back into a project that had a longer timeframe to see value from.

One SQL Query + One Email + 30 minutes = +N% Yearly Recurring Revenue

I have a past consulting client who runs a SaaS company. Like many SaaS companies, they have a four-column pricing grid, and one of their primary segmentation engines is numeric quota for something. Let's call it, I don't know, rabbits for the sake of amusement.

Their Professional plan lets you have up to 100 rabbits for $99 a month, and their Business plan lets you have 500 for $250 a month. (The numbers ultimately don't matter.)

Consider a hypothetical customer, Bob, who has 85 rabbits. Bob is clearly a happy and productive user of the software. He is getting a lot of value from it (85 rabbits worth!) and highly unlikely to cancel. But is Bob really as happy as he could be about the service?

Bob knows that rabbits have a distressing tendency to multiply, and some day in the future, Bob may find himself with 101 rabbits. Bob worries about this because Bob has previously dealt with many companies which screwed Bob horribly the second Bob was one unit over quota. Maybe they were like his phone company, which charged an extortionate unit rate on the over-quota allocation. Maybe they just cut off Bob's service immediately. Bob has been trained for a lifetime that hitting his quota has really bad consequences.

If you're on this mailing list, I rather suspect that the consequences of Bob running out of rabbits are rather mild at your business. You probably do something sane and just ask Bob to upgrade nicely, or perhaps upgrade him automatically. Heck, many of you are probably like me, and don't actually enforce your rabbit limits at all. (It's been on the todo list for, oh, two years now... it keeps getting beaten out by things customers actually care about, though.)

But Bob doesn't know this about your business! No customer, anywhere, is as expert about your internal processes as you are. So you should get in touch with Bob and put him at ease about what will happen.

How about this? Pitch Bob on upgrading to the Business plan using language like:

You're getting close to the maximum amount of rabbits supported by your plan. If you'd like additional headroom, you should upgrade to the Business plan. To make this a very easy decision for you, we'd like to cut you a 20% discount (from $250 a month to $200 a month) for being such a good customer. [Click here to upgrade].

If you want to do something a little more elaborate, you can do this with just a sample of customers and test different offers/copy against each other. Honestly, if your business has below $20 million a year in revenue, just write the one email and attach any offer that strikes you as fair. (n.b. You don't have to give a discount -- your customers will still appreciate the heads up! I guarantee you most weren't keeping track of their quota.) Options include:

  • A free month on us.
  • Your first month of the new plan at the old plan's cost.
  • A lifetime discount on the new plan.
  • A discount on the new plan for the next 12 or 24 months.

Honestly, I've been known to pick between these based purely on implementation difficulty. Customers don't see the set of options, so anything you pick sounds more generous than what they expected when they opened an email about their account quota. (Oh, subject line advice: "Get more rabbits before you run out" is perfectly viable and requires no copywriting genius at all to adapt to your circumstances.)

We actually did this at a consulting client of mine. We ran a SQL query to identify everyone within 20% of quota (totally arbitrary) and sent them a quick email offering an upsell to newly created discounted versions of the higher plans. The project started at 4:30 PM in the afternoon and ended at 4:55 PM. Net result: the business' yearly recurring revenue had an immediate uptick.

What Should I Write About Next Time?

I apologize again for the radio silence the last few months. Business got really busy in a good way, then really busy in a not-so-great way, and the emotional roller coaster stole my creative juices for a while. I'm sort of constrained on how much I can say about that. Anyhow, thanks for sticking it out. I hope to write more in the near future.

Two quick favors:

One, literally nothing makes me happier business-wise than hearing "That advice actually worked for us!", so after you implement one of the above suggestions, I'd really appreciate if you could drop me an email and mention how it went, even if it has to be off-the-record. I literally keep a file of these and re-read them when I'm feeling blue.

Two, drop me an email about topics you'd like to hear about. I'm busy building an editorial calendar to keep myself disciplined on keeping writing, and I'd love to hear from y'all what would be valuable.

As always, you can just hit reply to this email, or I'm patrick@kalzumeus.com . I read just about everything in my inbox and generally reply to most of it. If I missed something from you the last few months, sorry: feel free to write me again, even with just a "Did you get my email?" ping.

Until next time.


Patrick McKenzie