22 Jul 2020
Josh

What I've learned building an indie SaaS business

This was originally published on my personal blog.

I wouldn't say I'm an expert, but Belle and I have made a SaaS product with web, Android, and iOS apps, starting from scratch, and over the years built it to the point where it pays us both to work on it full-time. That's my idea of success. I'm not interested in being wealthy, or taking venture capital, or scaling beyond the two of us.

Here are some things I've learned along the way. If you think you might like to do something along the lines of what I've described, perhaps you'll find these opinions useful, although I imagine most are not very novel. Many are related so forgive me for repeating myself.

All of these are based on my own experience and values and may be totally the wrong advice for you.

It's okay to start with the technologies you know. In fact, I strongly recommend it. If you're good at JavaScript, write your backend in Node. If you make iOS apps, start with an app and use something like Firebase if you need server-side bits. Don't start by learning something new, you'll just make something that's already difficult that much harder. (Learn new stuff later, though. That's fine and keeps it fun.)

Things really will go better if you build something you'll use yourself. Dogfood it. It'll also help you maintain an interest in building it once the novelty of having users and income wears off.

YAGNI (You Ain't Gonna Need It) is a good aphorism but don't take it to mean you can only build what you need today and no more. I think it's fine to build things in a generic way you can extend. I feel fortunate that Exist's core is still fundamentally the same today, seven years later, because I tried to design a generic data model and integrations architecture that could account for the things we might add. Don't over-architect it, sure, but don't be short-sighted either.

You don't need to go through an incubator or accelerator. You don't need external funding. These things are undoubtedly useful in some circumstances but they are marketed as a necessity, and even glamorous, because they make other people money. Don't chase status symbols for their own sake. Why give up equity? Why give your investors the means to make decisions for you? Their interests are not necessarily aligned with yours. I'm not saying never do it, just consider your needs instead of taking it as a given.

You don't need to be a "startup". Your end goal doesn't have to be "CEO of a big tech company with lots of employees". There are viable alternatives and being an indie-sized business is quite a comfortable way to do things.

Mentors are good for support when things are hard, but remember that the person who best understands what you want to do is you. If they give you conflicting advice, try to understand their viewpoint, and if you still think you know better, ignore it.

If you can make it fit into your life, bootstrapping works fine. You might move a lot more slowly because you're only working on your product when you're not at your day job, but this doesn't have to be a huge disadvantage.

More generally, you can do it your own way. We took a lot of actions contrary to the prevailing view of the time, partly just because I like to be contrary, and it worked out. That might just be a combination of luck and privilege, but it's evidence you can point to if someone says things like "you can't get by without an incubator", or "you can't compete with a venture-backed startup as a bootstrapped company of two people who do no marketing", for example.

Don't underestimate persistence. I don't have a lot of time for PG these days but I do think there's a lot of truth to his saying, "Startups die of suicide, not homicide." We're still here because we kept going even when we weren't making enough money and it wasn't clear that we ever would. We've outlived many competitors, even some who appeared years later. If you just keep going you may eventually get where you want to be. If we'd "failed fast" because one year in we were making hardly any money, we'd probably both still work for other people.

Be authentic. Be yourself, a human being with flaws who has likes and dislikes and bad days. Don't act like you're a big faceless entity. It won't make people trust you more. Just be you, and be honest if you fucked up, or if you're never going to add that feature, or if you added it because you personally wanted it and you don't care if anyone else did. Paradoxically, it can be better to be open with your users about making mistakes and breaking things than to appear to never break things.

Be open. Share whatever you can. Be transparent about what you're working on, what you want to do next, how much you're making, and how you're feeling about it. A lot of the goodwill users have towards us is because we have an open roadmap and we publish user and income stats.

Be empathetic. Try to relate to your users as one human to another. Make the effort to understand why they are angry, or rude, or just don't care about your thing. You will fail a lot, and they won't always deserve it, but a lot of good will come of it. Acknowledge their point of view. When we first opened our pre-launch waiting list for Exist, we got some pretty rude feedback about trying to vacuum up everyone's data to sell, or that our idea was dumb, or that we shouldn't be trying to charge for something nobody would pay for. In each case I tried to understand why someone would feel that way and honestly address their concerns. In nearly every case I succeeded in turning the interaction into a positive one and many of those people signed up. I don't always have the energy to do that any more, and you get better at knowing when to just let it go, but I still believe it's something to strive for.

Be good at support. Man, the bar for support is just so low, especially for indie software. You've probably experienced emailing the developer of an app you use about a bug and just never getting a reply, right? Replying to support tickets alone probably puts you in the top 50% straight off the bat. Replying quickly, even better, and then caring about the issue and fixing it, would seriously push you into the top 10%. Unless you get a lot of support, it's not even that hard to do, and it's such a good way to make your users think well of you. Again, you'll probably lose the motivation to be prompt and kind over time, but it's always something to strive for.

Listen to user feedback. User suggestions are useful, and if you track what's popular you'll definitely identify trends worth pursuing. Still, temper them with your own strong ideas about what you're making. Don't just add stuff because one person made a big fuss about your product being useless without it. Get comfortable telling people you are not adding their thing just because they asked for it. As a related point, the loudest users are usually not indicative of the whole.

Get to know your users. If you are friendly, they will be friendly to you and care about you and your thing, and maybe you will care about them and their things too and you can be friends. Be generous if you can afford to, and probably even if you can't.

Be open to your role changing. This is a pretty obvious one but you'll have to wear a lot of hats and it might turn out that someone needs to write lots of docs, or do a lot of regular support, and you thought you were just here to code the backend. Things can change and there'll probably be plenty of tasks where there's just nobody else to handle it.

On the other hand, you probably can get away with not doing stuff you really don't want to do. For example, we don't really do much explicit marketing now because it was Belle's role and she stopped wanting to do it and switched to iOS development. As a compromise we recorded a podcast together irregularly but because I never enjoyed doing it we stopped that too. Would we be better off with more marketing? Almost certainly. But we can get away with not doing it because we hate it and we're established enough now from having been around for years and having done the work earlier. This probably won't translate to everything, for example you can't just not write docs if you make a developer tool, but perhaps you can find a compromise that's tolerable for you.

If you do think you need marketing but you don't like the regular methods, you can try just boosting your personal profile. Write blog posts, go to your local meetups (when those are a thing again), share screenshots of what you're working on to social media. If that still feels too much like selling yourself (and I sympathise), you could try just doing regular release notes posts for your product, or highlighting technical stuff you're doing, or even just sharing user stats. It doesn't need to be "here's why this is so great", it's just a chance for your thing to be more visible.

Being visible gives you more chances at being visible, for example people might want to interview you about your work. I like this approach because you can just answer questions honestly and it counts as marketing.

Don't waste time on collaborations, opportunities to work together, or deals with big companies. Because that's all you'll get out of it — wasted time. In general, anyone you don't know who wants to "hop on a call" with you will only waste your time. Even if there's, like, so much synergy.

I strongly recommend you charge everyone who uses your product. Free plans only get you freeloaders.

If you get a chargeback, just accept it — you will never win your dispute. We initially disputed every chargeback and went to the effort to prove that the user had knowingly paid for and used our product. We never won. Just accept the chargeback and then cancel that user's subscription. If someone is going to take that route rather than contacting support or asking for a refund, it's easier just to let them go as a customer.

Offer refunds gladly. It means more to the user to get a refund than it's worth to you to keep the payment.

Keep your accounting simple. Don't take payments through multiple platforms if you can avoid it.

Don't pay attention to your competitors. Do what you think is worth doing. If you're lucky, they'll just copy the stuff you do with a year or two delay because they have no good ideas of their own.

People will compare you to your competitors. Often incorrectly. They'll recommend your product but describe it terribly. They will ask you to build features your competitors have that you don't. They will switch to your competitors and tell you so. Sometimes they will come back, full of regret. People will talk about building a competitor to you and how they could do it in one weekend, it'd be so simple. Your competitors will talk shit about you on social media. Don't take it personally. Just keep doing your thing.

Dedicated servers are a lot cheaper than cloud computing so you can get a lot more bang for your buck. If we could afford cloud-everything, Database-as-a-Service, etc., I'd be so glad to make that switch and remove a lot of devops stress, but we'd be spending so much more money. When you're still small, you have more time than money, so this is a trade-off worth considering.

If you somehow find yourself in charge of design without any design background, you can get a long way with a few rules. 1) Copy the current trends. Look at places like Dribbble for inspiration. 2) Try to keep things consistent. Use the same font weights, spacing, button styles, and a limited set of consistent colours. Pay attention to the details. It should be enough. Do not use the default Bootstrap or Wordpress theme.

Make sure you have other hobbies and sources of self-worth. You don't want to wake up five years later, totally sick of your work, and have nothing else to do with yourself and only doubt about your worth to society.