- Master Fullstack Development and finally ship a product
3 years ago
Well, I finally have a story to tell. I finally launched the new version of Sizzy. It went from a simple web app to a full-fledged browser for designers and developers. I would say that it's been a very exciting month, but actually, it's been a bumpy ride for 2.5 years. I made a lot of mistakes and I learned a lot of lessons, so I wanted to share the entire story with you.
As everything that I have ever worked on, I was trying to solve my own problem. I was working as a freelancer at the time and previewing a website on multiple devices was a major pain in the ass for me. The client wanted the app to work perfectly on every device, in every orientation. So after every change in my app, I had to switch 20 device variations in Chrome and it was driving me crazy. I'm obsessed with automating things. I'd spend hours to automate a task that takes 3 seconds just so I don't have to repeat the steps ever again. Meanwhile, my sister was swapping the batteries between two remotes 10 times per day for almost a year without buying a second pair of batteries and she was absolutely fine. I guess everyone is different.
You can actually read the original article that I published when I launched the app.
Back to the story. After only a day of work, I already saved myself a lot of time while working for clients in the future. I published the app and I open-sourced it on GitHub so everyone can use it and contribute. People loved it. The project received 5k stars. The analytics were going crazy. I couldn't believe what was going on.
I started an Open Collective for it but it made 93$ in 2.5 years. After I tweeted about this, a couple of people said: "well maybe people aren't using it". I knew that they were just trying to bring me down, but the analytics were saying something else. 7 to 10 thousand people were using the app every month. The donation link was visible everywhere, so it wasn't possible to miss it.
Here's the catch: when you give away something completely for free, people aren't that motivated to pay for it. It's just how humans think, there's nothing new here. When was the last time you chose a value above 1$ on a "pay what you want" slider for an app? Exactly. (ok, one person who's reading the article, you're special and you're a saint for choosing 2.5$ that one time when you were drunk)
It didn't take long for me to realize that launching Sizzy as a web app was a big mistake. There were tons of limitations that prevented me from realizing the app's full potential. I had too many ideas but it wasn't possible to realize all of them in a web app. I wanted to make a real browser. So I dived into Electron. Shortly after getting the first 0.0.0.0.0.1 (not really semver) Electron version working, I published an article so other people don't have to go through what I went to make React and Electron work together. I was making progress.
I obviously wanted to make a paid version of the app because the donations weren't exactly working out for me. But I had no idea what approach to take.
I had a call with a friend to ask him about his journey with his startup and he was very helpful, but when a goal seems too far away and we can't envision a clear path to reach it, we always reach for the same old drawer:
I was born in Macedonia, and I was living in the Netherlands at the time, and both of those countries didn't have access to Stripe. I contacted Stripe and they told me that the Netherlands will have access soon (and it actually launched a few months later), but I was already clinging so hard to the excuse that I don't have a way to charge for this app.
I mean, every cool developer is using Stripe, right? They have a cool flashy website and a dashboard that everyone loves. I WANT TO SEE MY $$$ IN A PRETTY AND COLORFUL DASHBOARD WITH ROUNDED CORNERS AND NEAT SHADOWS GODDAMMIT. Screw the fact that there are literally 108351 other payment providers that I can use. No. Payments are hard. This is impossible. Also, I have to figure out a way to auto-update this app? How do I even do that? Where am I going to store all the installers? What if it costs a lot of money? How am I going to handle all of that mess? What about licenses, registrations, emails, newsletters, etc. etc. etc… You know what, I better forget about this "problem" and completely ignore it for 2 years.
Shortly after the initial launch I stopped freelancing, I launched React Academy and I was too busy doing workshops, so I didn't have the need to use Sizzy at all. I completely neglected the app and stopped caring about issues etc. The usage wall still high though, and the usage was even going up. The app was useful to people, even in its most basic form. I got a couple of offers from companies which wanted to buy it from me, but I didn't want to sell it. I knew that one day I'll be in the right mindset and go back to it.
Last summer I tried using the app again and my first reaction was "omfg why do people even use this thing, it can be so much better". But people didn't see it that way. When you tune your brain to this problem-solving mindset you start seeing problems in everything. When I was using the app, I didn't like it because I had this other potential version of the app in my head. So I decided that I want to work on it again. I decided to launch it when it's gonna look like something that I would use every day. That was the goal.
I was so busy doing workshops and conferences that I barely had the time to concentrate and work on any other project. I was traveling every week and I grabbed this one from the excuses drawer:
"Unless I'm in one place for a very long time I just can't push myself to focus and do proper work" - Kitze
But I didn't want to let that stop me, so I hired Praneet to work on the app a couple of hours per day. He helped me bring Sizzy back in shape from a technical standpoint. We updated a lot of old dependencies, cleaned up some code, switched a couple of libraries, etc.
The problem was, I had no idea how to move the project forward. There were so many things left to do that I didn't know where to start. The payment integration wasn't even started and there was no landing page. I started working on the landing page while he was working on fixing bugs and adding new features. Most of the new features didn't end in the current version because I wasn't thinking everything through. We were going one step forward and two steps back. I wouldn't say that it was completely lost time, but I wish I was better at prioritizing and estimating things. Unfortunately, I wasn't. I didn't set any time limits and weekly goals. We were just coding.
The other problem is I cannot focus on a goal for too long. I started working on the landing page, but ended up working on a React library for making landing pages 🤦 (maybe I'll release it one sunny day)
I wanted to solve that problem too, but I ended up with two half-ass solutions. There were so many things left to do, the launch seemed too far away, and I just burned out and lost interest again. Praneet decided that he doesn't want to join me full time and we parted ways.
I went back to my trips, conferences, and workshops. I started filming vlogs. I had a lot of fun, and I was using travel as an excuse that I don't have time to work on my apps.
Somewhere at the beginning of 2019, we started discussing with Praneet for his full-time employment again. After a lot of back and forth, we agreed on a contract for 1 year, and we went back to working on the app. Paying someone every month out of my own pocket before being profitable was a big motivational boost for me to get my shit together. I honestly think that if I tried to finish everything alone, the app wouldn't see the light of day.
The conference and workshop season was almost done for me, so I finally had a lot of time at home and I finally went back to my zone. Honestly, travel and all the hippie nomad shit might look fun to you, but trust me there's nothing better than working from the same old place and being focused for a long time. When you see people post pictures of working by the pool just think that they cannot see shit from all the glare, and there is a group of kids playing Marco Polo that's driving them bananas. It's all part of that fake Instagram life.
Anyway, I decided to finally sit down and ship this thing.
The landing page could've been done in a day if I used any of the drag and drop tools for building landing pages, but noooo, that wasn't good enough for the perfectionist in me. I had to do everything from scratch. Everything had to be optimized, animated, and thought out down to the last detail. I'm a believer in #YOLO #JUSTSHIPIT development but the right landing page can basically sell the app for you. I proved that with Twizzle and I wrote about Just ship it is not always the right mindset. With zero marketing people were sharing and buying the app just because of the unique landing page filled with easter eggs.
The landing page for Sizzy was done, and it was time to move on.
Even though Stripe was available in Poland, where I'm currently based, I still chose Paddle as a payment provider only because it automatically handles VAT for EU customers. I could've totally used Paddle back in the Netherlands but my hand was kinda stuck in the excuses drawer.
Because the app was in Electron, I couldn't use Paddle's SDK for licensing an app. "Add few lines of code" turned to "few weeks of figuring everything out manually". I had to write literally everything around the payment logic from scratch. From the backend to a separate app for managing licenses and subscriptions, and all the Electron code for activating, deactivating, and validating licenses. When you look only at the functionality of an app, you might think "hah I can write this myself in a few weeks", but actually packing it in something that can be distributed to users involves a lot of work. Don't get me started on the updates and release server.
I learned a lot during the process but I don't want anyone else to do this manually. I already have some plans about releasing the entire infrastructure as a service, so people can easily sell their Electron apps with Paddle. It will take me only 3 years to release it.
Honestly, it felt kind of shitty to delete the repository and unpin the project from my profile. I hated the feeling but I had to shrug it off. I had to convince myself that I'm not doing anything wrong. The app was serving a lot of people for 2.5 years, and I rarely got any contributions. It was time to get real and think about what matters.
Oh, here we go… I'm gonna mention the M word and lose a ton of readers at this point.
Most developers, hell, most people are in the mindset that money is something evil and that it doesn't matter. It's a taboo subject. Go ahead and complain to your friends that you're not making enough or cannot pay your bills this month. They will love the conversation and everyone will tell their own story. Now go ahead and tell your friends that you made a lot of money this month. You could cut the tension in the air with a knife. People don't want to hear that shit. Money doesn't matter. Go away with that conversation. I'm making enough. I can barely save anything, but I don't want to think about that right now. At least I'm learning. One day things will magically change, I know that. That guy is making money because his grandpa is rich. That girl is making money because she's lucky. Let's not discuss that and go back to complaining, please.
There are so many amazing developers creating amazing tools and they're not thinking about making them profitable, even for a second. A friend once called me "greedy" because I left a company for a better salary. What the actual fuck. That's a very high school mindset to have, and I'm doing my best to spread this message to every developer out there…
Open source, writing blog posts, and playing with tweaking lint settings and editor themes all day are completely fine until your landlord knocks on your door or you're at the checkout at the grocery store. You're doing a crazy 2-hour commute every day telling yourself "well at least I'm learning a lot about SVG". Fuck that. We don't know how long things will stay this way. No one can guarantee that we'll have our jobs and we'll be in the most profitable and spoiled industry in the next 10 years.
A factory lector - a person who was reading the newspaper to factory workers
The factory lector thought his job was secure until one day the factory owner walked in and replaced him with a radio. But the factory lector didn't have Medium and Hacker News to tell him every single day that the radio is coming to take his job. However, developers are constantly reading that AI and ML are taking a huge momentum and everything is becoming more and more automated. We completely ignore that fact and want to believe that we'll keep our highly paid job of moving rectangles with CSS forever. (People who know how to fix printers are an exception, you'll keep your job forever)
I learned a long time ago not to obsess with stars and likes. I still love open source and I'm still open-sourcing a lot of things, but not everything has to be open source. Please don't get defensive and don't get me wrong. If it wasn't for open source we wouldn't be able to ship anything, ever. There are a lot of amazing people in the community, there are people who do open source for living, there are highly funded open source projects like Babel, Webpack, etc.
However, most developers make zero money off open source. Zero.
I have a lot of friends (and by friends I mean people who replied to my tweet twice) who built an amazing app or a service, they didn't make it paid for a bunch of reasons, and now they're buried in a sea of issues, basically solving other people's problems for free. No matter how cruel this sounds, it's the sad reality. I really hope that with GitHub Sponsors things will change, but it won't be anywhere near launching a paid SaaS product, because donations are optional.
My philosophy is that if I'm investing a lot of time and money in making a tool that's gonna save users and companies across the world tons of time, I might as well charge for it.
I'm expanding on this point more details in this talk, so if you're interested you can watch it.
Jesus, what was this article even about… Oh yeah, Sizzy.
It was time to launch. I did all the calculations and I was hoping that at least a small percentage of my existing users will convert to paid ones.
It was time.
The 0.0.1 version of the app was ready for download.
Everything was tested properly.
I made a professional video demonstrating all the features of the app.
The Twitter post was ready.
The Product Hunt post was ready.
It was time to press the button, but it was so hard.
I was so afraid that all of my existing users are gonna grab pitchforks and wait in front of my home because the tool is not free anymore.
But oh boy… I was totally not prepared for what happened next.
Holy fucking monkey balls flying through space! I totally didn't expect that response!
Sizzy got 2352 upvotes on Product Hunt. It was the product of the day, the product of the week, and third product of the month. It got more votes than Libra by Facebook and Raspberry Pi 4, isn't that bananas?! (or raspberries, whatever)
I decided to use a giveaway on Twitter to motivate people to retweet, and it worked! After the giveaway was done I couldn't find a proper tool for picking winners so I made Lucky Retweet. Try doing a giveaway for one of your products and you might be surprised by how well it works. Instead of only 3, I gave away 30-lifetime licenses. Although your few buddies will groan and won't RT, and all the winners will be super happy and grateful. It's overall a very positive experience.
The initial feedback was amazing. When I started getting my first subscribers I just couldn't believe it. It's been 1.5 months since the launch and I still get the same feeling when I get a new subscriber.
I believe that paying a few dollars per month for something that's going to save you and your team hundreds of hours per month is a no-brainer. In retrospect, I should've priced it way higher. It was selling like crazy. If you look at the list of teams who are using Sizzy on the landing page you will find Samsung, Bentley, Comcast, Toyota, Sketch, Hallmark, Basecamp, Algolia, etc.
What in the world is going on?
People who can recognize that a tool will actually save them, and even make them money, just buy it immediately and move on with their life.
However, people who are obviously experts at pricing SaaS products are way, way louder. If you only look at the comments from the outside, without knowing the actual stats, you might get a totally wrong impression that the product isn't doing well.
The most common complaints were:
Cool, who's stopping you from not using it, or using something else?
Just imagine if you enter a clothing store and be like "OMFG THIS SHIRT IS 20$? ARE YOU CRAZY? I CAN GO TO THE STORE NEXT DOOR AND GET ONE FOR 7$. I CAN GET A SKIRT, CUT IT, AND WEAR IT AS A T-SHIRT. OR EVEN BETTER, I'M GONNA SEW MY OWN SHIRT!!!111!"
Or imagine entering a supermarket and starting to yell at the cashier "WHAT?! THIS MILK IS 3$? DO YOU KNOW THAT ON THE OTHER END OF TOWN I CAN GET THIS FOR 2.5$? I CAN EVEN BUY MY OWN COW, RAISE IT, MILK IT EVERY DAY, AND DRINK MILK FOR FREE!11!".
In both scenarios, you would probably be seen as a crazy person and escorted out by security. But sadly, on the internet, people forget that they're talking to real people. It's simple, if you don't agree about the pricing of a product, don't buy it and move on. Then go and spend the same amount of money on a large latte, and spend 25 hours per week manually doing something that a dedicated tool could've done for you. That will show 'em!
Thankfully, I learned to ignore negative comments and I didn't waste too much time on pointless internet discussions.
Instead of wasting my energy on convincing people to buy the app, I decided to focus on customers who actually bought it, and make sure that they will get the best value out of it. Ever since launching the app we've been working non-stop on improving it and we have released 5 new versions with a lot of new features. I opened a public Trello Board where people can see the roadmap and vote on features they would like to see in the app.
The emails were piling up and there were way too many of them for me to handle alone. I tried a couple of tools but nothing was working out. I realized that I cannot do everything by myself. My girlfriend, who was already doing QA for the project, offered to work extra hours and help with the email and all the other administrative tasks. After a week I decided to hire her part-time and properly compensate for her time. This might sound super weird to some, and honestly, it's a bit hard to separate the work from our personal life, but somehow we make it work. She is super hyped about the project and went all-in on making all sorts of merch.
I wanted to make sure that every customer issue and a complaint is addressed as soon as possible, and she was crucial in the process. After fixing an issue that a customer reported, we personally send them an email to let them know that in the new update their issue is fixed. Everyone loves this level of customer support. We're aware that it's not gonna work at a bigger scale, but we'll do our best to keep it that way.
Currently, Sizzy has around 1600 users, which is crazy because the only marketing I've done so far is sponsoring one newsletter, and that was last week. Most of the marketing is just a word of mouth from people who enjoy the product. I want to improve the stability of the app even more before I start properly investing in marketing. It's still far away from my final goal. I have so many ideas about shaping Sizzy to be a tool that every developer and designer will rely on during their daily work. I want to reach a million users. It may sound crazy, but I know I'll get there. The only thing standing between me and that goal is just … me. But I won't let myself lose track again. Sizzy is my primary focus now, and everything else comes secondary. It's really hard to sleep properly when you know you have a lot of customers who depend on you. It's a weird feeling, but I love it!
I have no idea what's gonna happen next. I got reached out directly by 5 big investment companies. I'm still not sure whether I should take the VC route because I have a feeling that I'll have a boss again, and I was always struggling to work when someone else was in control. I'll try to push as much as I can without getting an investment because owning 100% of a startup and growing it without depending on anyone is just an amazing feeling.
Startup?! Did I say startup? I hate the word, seriously. It completely lost meaning because people create a hello world project and immediately change their Twitter bio to "CEO & Founder of X". The title in my bio doesn't mean shit. I'm making an app, who cares, it doesn't matter what you call it. Things are not going to magically change if you change your bio. You're just lying to yourself. Be happy and stop giving a fuck about proving your 3 friends from high school who you are.
I am so worried that other makers are focusing only on the negative comments about paid products, and get discouraged from making their next product paid, instead of free.
Please don't fall for this!
Please value your work and believe that despite the fact that haters are loud, you're still gonna get a lot of customers who would gladly pay for what you made.
As a famous legend once said:
'Cause the players gonna play, play, play, play, play And the haters gonna hate, hate, hate, hate, hate Baby, I'm just gonna shake, shake, shake, shake, shake I shake it off, I shake it off
Thanks for reading! Subscribe to the newsletter?
How to use the src directory and absolute imports in Next.js
The saddest "Just Ship It" story ever
You're either a Zero or a One
How I tricked my brain into working out 24 times in 30 days
An underrated way to keep up with web development
GPT-3 is the beginning of the end
How to magically free up gigabytes of disk space
Fastest way to thoroughly uninstall apps on macOS
A better way to manage multiple monitors on macOS
From Hello World to a production app: The magic of Blitz
The best Stream Deck alternative: Make your own!
Introducing Fungarzione: The app for keeping your users in the loop
Generating social media images by screenshotting React components
Pomodoro with accountability