58
47 Comments

Friends, come warm yourselves by the flaming wreckage of my micro-SaaS

Gather round friends for a true and epic tale of glorious Indie Hacking. How I built and launched a micro-SaaS product in 26 weeks. How I discovered the quiet joy of incremental progress. How I weathered a Hacker News ban and a barrage of sniping comments and landed the first paying customer, only to come undone at the last moment, defeat snatched from the jaws of victory. 26 weeks of work gurgling down the internet's drain hole. And finally dear reader, what I will salvage from the wreckage that may help us in future ventures.

Wednesday morning I was up with the cock. 6am bright and early. The kids were still asleep and my wife too making this the perfect time to GTD. I creaked my way through the house into my office, opened up my XPS 13 and sat in the glow of Gvim, code sparkling from my fingertips.

This day I would be a veritable @jdnoc. I would put in those Deep Work hours, chipping away at the product, posting new articles for SEO, reading feedback, testing and triaging bugs. And so it went.

For 25 weeks I had done this. Half a year of one-day-per-week stone cold indie software development. Writing code, building in public on Twitter. I had sat down on days like this when I was pumped to work and code flowed freely, and also on days when I was grinding all day long sweating out every line from a creased forehead. I ignored my feelings, hot and cold, and incremented away on the feature set week by week. Today was no different.

By 2pm I looked at my GitHub project board. Tickets had whipped by like restaurant napkins in a New York harbour bluster. The "TODO MVP" column was empty. I had moved every ticket into "Done". A strange feeling came over me. This was it. This was launch day. An excitement grew in my belly as I began to plan the launch on Twitter, PH, IH, HN. This ship was set to sail.

The launch

I set the Product Hunt launch to start one hour later at 3pm my time. I posted a link on Hacker News with the title "Show HN: Download Twitter data without API keys". I drafted an Indie Hackers launch post with the links to give everything a boost. Then I shared the Hacker News link around with a few friends and on my Twitter account.

Then came the first sign. The first warning that fate was not to smile upon the little micro-SaaS that could.

A warning tweet

Hmm that's odd. It became apparent my Show HN post had been shadow-banned. I could see it when logged in but none of my friends were able to load the page. What was going on? I was overcome with confusion. For what possible reason would the link to my site be banned? I emailed the mods that evening without much hope of receiving a reply and went to sleep.

The next morning I woke to an email from a very nice Hacker News moderator. It was super polite and informative which I am grateful for. Here is a summary of what they told me. I'm sharing in case it is useful for your own HN posting:

  • The HN software thought I was violating the rule against using the site mainly for "self promotion".
  • The software starts filtering posts once the percentage of posts about your own stuff is too high.
  • It's best to have a track record of interesting links from other sources and occasionally post your own stuff - the software is adaptive so you can start doing that and you'll stop getting filtered.
  • The best posts for HN are ones that can't be predicted from an existing sequence of posts ("out-of-the-way topics that rarely get any attention").

The Hacker News moderator said my submission history did not look too bad and I should be able to get it back on track. They kindly offered to unblock my post and push it back onto the front page and finally gave the following tip about posting Show HN projects:

Add a comment to the thread giving the backstory of how you came to work on this, and explaining what's different about it. That tends to seed discussion in a good direction.

The bit about seeding discussion in a good direction turned out to be wrong, but I think this is on the whole good advice. A good rule of thumb is "be human" and "don't spam".

I had a busy day on Friday and in the evening I did as the moderator suggested and added a comment with the development story. I emailed the moderator back gratefully to let them know and went to sleep.

The first customer

The next morning I woke to an awesome surprise. The first paying customer! It's happening! They had paid $5 for the 24 hour access tier so they could download their Twitter favourites to a CSV file. They seemed to be having trouble downloading the data but I thought it must be some user interface issue and decided to check out how the Hacker News post had fared overnight before looking into it.

a chart of post performance

A fantastic result. 1.5hrs on the front page and 25 comments! My server registered around 7,000 individual visitors to the site when normally there are 30 per day. I dived in to see what people were writing in the HN comments.

a mean hacker news comment

a mean hacker news comment

a mean hacker news comment

a mean hacker news comment

a mean hacker news comment

a mean hacker news comment

Uh oh.

The fall

Like a fool I ignored the noble sages of Hacker News. I was Prometheus to their Zeus. They watched in horror as I made off with the stolen fire of their secret Twitter API access codes, and brought it to all humanity in the form of an easy to use one-click interface. I had driven them mad with my barefaced democratic liberation of the Twitter API.

Alas they were right. I should have taken heed.

access revoked by twitter

Very soon Hephaestus the god of Twitter API Authentication shackled me to the Mountain of Access Revocation. Just like that, the TweetFeast account was permanently suspended. All API requests broke instantly and my appeals to the Twitter API team went unheeded. Without Twitter API access there is no hope for my app and it was done for. Which brings us to today.

I refunded the one paying user. I updated the home page and closed the sign ups. My app now lies burning in the water, gurgling, bobbing gently downwards. A moment of silence, friends. Soon she will be subsumed by the waves of obscurity and the internet will know her no more. Alack, alas, so long little SaaS.

So ends my misadventure in Twitter API development and so ends this story.

Salvage

Well not quite. I must be able to salvage something from the ruins of this experience. What can we rescue and what can we learn?

1. Sharing the source code

First off, I am open-sourcing TweetFeast. If you are into LISP or Clojure or server-side ClojureScript you might find the codebase useful. Here are some highlights:

Hopefully there is stuff in there that is useful to people building full-stack apps in ClojureScript. Get the TweetFeast source code on GitHub.

2. General advice

If you're going to build something on a Big Corp API, be careful. Read the terms. Ask around and see if anybody else has done what you are trying to do. When you launch pay attention to the way you word the capabilities of your product.

I once worked on an app that went into the App Store with no problem despite violating a whole section in the terms of service. That was because some people inside Apple liked the app and gave it the green light. Rules at these companies are not laws. They are subject to individual whims and a lot depends on signaling.

I suspect a major reason TweetFeast was shut down is because of the way I worded the launch post. There are multiple products which do a very similar thing to TweetFeast (download CSVs of Twitter data) and have been running for years, and I suspect it is because they did not position themselves as an "API workaround".

The final take away is about posting on Hacker News. First of all, remember to be a good citizen and don't only post "Show HN" links. Share stuff that is interesting if you want to keep your self-promotion score healthy. Secondly, don't worry about the haters. Yes, the app got banned, but it also got a customer within half an hour of posting. Before that first customer a lot of people found the beta useful. Hacker News commenters often overlook the value that other people see (especially non-technical people). So don't take it to heart. They are wrong famously often.

3. What I got out of it

It might seem like this experience was an epic fail, but I actually got a tremendous amount of value from building and shipping TweetFeast.

  1. I got to road test my full-stack ClojureScript library Sitefox and it worked great.
  2. I got to hone my self-hosted deployment skills some more with Piku.
  3. I managed to overcome Shiny Object Syndrome, stay focused for 26 weeks, and ship goddamn it.
  4. I now know how much effort it takes to build a minimal micro-SaaS MVP (one month of full time dev days).
  5. I wrote a bunch of code I can re-use again (Stripe integration, Twitter auth).
  6. I learned a bunch of new stuff about UX, UI, design, and SaaS app architecture.
  7. I learned an important lesson about building on 3rd party APIs.

Finally, the best part. I get my day back. I get back one day per week to work on something else. That's very exciting!

What's next

I think I will re-use most of this code to try and build another micro-SaaS, but not on Twitter. A straight up web app most likely. My music apps are doing ok, and so I'll probably try to do something in this space. Whatever I do, I'll post about it here and you can also follow along on Twitter.

Thank you very much for reading, I appreciate it!

Onward. 👉

posted to Icon for group Lessons learned
Lessons learned
on February 10, 2022
  1. 11

    You have a real talent for writing, I couldn't stop reading this. Thanks a lot for sharing!

    1. 3

      Thank you, I appreciate it. 🙏

  2. 7

    For every programmer who can use an API there are 100 people who can't and want data access.

    You can't use your own key, but a self service site teaching people how to create their key, plug it in and download data is a good tool. Then you find your audience and create more tools addressed to then. A product owner wants all tweets in the month about the product emailed to him. A marketing guy wants to watch daily tweets with some filtered words to address issues, and so on.

    Hell, even some normal users would like to build a feed with just the people they follow and no "algorithm help".

    Don't give up. Pivot. Pivot. Pivot.

    pivot

    1. 1

      These sound like good ideas. Twitter tools like the ones you mentioned seem to do well. Hopefully people can take inspiration and build some cool things like those you have mentioned.

    2. 1

      Definitely true. I see a huge need in a solution like the one described. However knowing the Twitter API a little bit, I understand the decision to not pivot, but use the remains of the project for something more fun.
      To the author, let me tell you, great writing style by the way - had fun reading the piece.

  3. 3

    This may be the greatest IH post of all time.

    Keep shipping and you'll eventually traverse into the promised land of PMF, my friend.

    1. 1

      I'm humbled, thank you Lachlan.

  4. 3

    F.

    My second post on HN with the same url (my own product) got shadowbanned. I didn't dig it further and gave up on HN completely. Now I know the reason and how to fix it. Thanks.

    The software starts filtering posts once the percentage of posts about your own stuff is too high.

    And those HN comments. LOL. Are those people using cell phones or meet with people face to face whenever they need to talk to them. I can see they can be triggering on the launch day but really ignoring them seems to be the key.

    I suspect a major reason TweetFeast was shut down is because of the way I worded the launch post.

    Curious if you are going to change the wording and release it again?

    1. 1

      Glad the HN tip was useful. It was news to me too.

      No, I am done with this particular idea, and probably done with building anything on the official Twitter API. It just feels too fragile and constrained. I'll move on to something more fun.

  5. 2

    Thanks for sharing your story, Chris. Did you have any idea beforehand that Twitter might not greenlight your use of their API, or did you think you were in the clear from the start?

    I'm working on small app reliant on the Gmail API and you've inspired me to take a deeper dive into their terms of use.

    1. 1

      I thought it would be fine from the start. You have to give a lot of detail when registering for API keys and I clearly explained what the app does. The application was reviewed and passed, so I thought that was a green light.

      The thing you have to remember is to Big Corp you are like a mosquito. If an innocent mosquito seems like it might bite you, it is simply cheaper to slap it than to engage in the detailed effort of finding out if it is genuinely a threat. I think this is why the guardians of API keys are trigger happy. They err on the side of shutting things down to save time and effort.

      If you want advice on the Gmail API specifically, I know that @dinkydani has built on it before. She can probably give you more details about the problems and considerations.

      1. 2

        @jeremychen My only advice if to make sure you're not using restricted scopes, otherwise you have to go through Google's expensive and lengthy audit process. There's no way around this.

        1. 1

          Unfortunately my product does require a restricted scope 😅 I saw that the audit could take several weeks so I'm prepared for that.

          Could you elaborate on why it's expensive as well?? Was not really anticipating that!

          1. 1

            Yes, you must pay for an audit from an independent company. They look at your code and determine if you are obeying Google's security policies.

            They estimate the cost at between $15k and $75k depending on the size of your code base.

            I essentially suggest that indiehackers do not build products with restricted scopes as Google are making it prohibitively expensive.

      2. 1

        For sure, that makes sense. Will definitely be mindful of playing nice with the API gatekeepers then. Appreciate the response!

  6. 2

    Love the deep work reference haha.

    Cool work, be careful out there!

    1. 1

      Great book, thanks for the recommendation.

  7. 1

    The story, the writing, this was such a great read!
    Thank you for sharing and good luck for the next project!

    1. 1

      Thank you and best of luck with your projects too.

  8. 1

    Really enjoyed reading this :) You have a great sense of humour

    1. 1

      Thanks I'm glad you enjoyed it!

  9. 1

    As others stated, it's beautifully written. Thank you for sharing!

  10. 1

    What an excellent article. Great information and what a talent for story telling.

    Great learning experience whatever the outcome. Onward and upward 🙂

  11. 1

    The content is good, but what makes it great it the delivery. Thanks for putting time into this post which made it a pleasure to read!

    1. 1

      Thanks Jake, it was fun to write so I am glad it was a pleasure to read as well.

  12. 1

    I think it was a premature decision to call this project a wreck. A "Sign in with Twitter" button will get you a lot of access to Twitter APIs, maybe there is some pivot hidden there?

    1. 1

      I think there is a lot of scope for products built on the Twitter API. There are a ton of successful businesses build on ti. I would only caution that people take care in doing so.

  13. 1

    Awesome man! All the best on your future endeavors

  14. 1

    @chr15, I actually read pieces of this post aloud to my husband because I enjoyed it THAT much. Impressive weaving of warmth, humor, and relevant info. So, so, so good! 😍

    1. 1

      That is kind of you to say so, thank you.

  15. 1

    I feel like I’ve read a whole book. Thank you, I feel like I almost experienced your story right near you. very intense. very interesting. :)

    1. 1

      Thanks I'm glad it was an interesting read!

  16. 1

    I always ask the sales guy if using their API and building a product is acceptable or not.

    1. 1

      Yes probably a good idea. I think the key with a company like Twitter is to read the terms of service carefully and ask around.

  17. 1

    This was a wild tale, tragic, but glad to see you took the positive from it. On to the next one!

  18. 1

    👏More posts like this!

    1. 1

      Agreed, I always like the stories from small scale founders the best.

  19. 1

    Great writing style, I like your humour and enthusiasm! It's fantastic you shipped and learned out of this experience.
    You open sourced the code too, that is absolutely great! Maybe you can write a technical breakdown as a blog post and post it on HN? I'm pretty sure there is interest in server side ClojureScript applications, before your post I had no idea it was possible! And you monetised it too!
    I wish you luck for your next ventures and projects Chris.

    1. 1

      Thanks, good idea, I'll have a think about the technical breakdown idea. Best of luck in your ventures too!

  20. 1

    Excellent post and love your optimism. I would not give up on the product so fast. Maybe rebrand ? Allow users to fetch data with their own keys through the slick UI? Market to the non technical folk i.e. not HN?

    At any rate, bravo and best of luck!

    1. 1

      I thought about some ways to make it work but none of them sound fun or compelling to me and I think I would run out of steam. I am sure more great products will be built on Twitter though.

      Best of luck to you too!

  21. 1

    Awesome post 👏 Very entertaining.
    Best of luck with the next product! Looking forward to reading about it.
    🍻

    1. 1

      Thanks, much appreciated!

Trending on Indie Hackers
Meme marketing for startups 🔥 User Avatar 11 comments Google Whisk - Generate images using images as prompts, not text prompts User Avatar 1 comment After 19,314 lines of code, i'm shutting down my project User Avatar 1 comment Need feedback for my product. User Avatar 1 comment 40 open-source gems to replace your SaaS subscriptions 🔥 🚀 User Avatar 1 comment We are live on Product Hunt User Avatar 1 comment