My last article was about how I struggled with a particular problem. Turns out this problem was part of an application I was trying to make. Oh, nothing fancy, nothing that will change the way we do business, or live our lives, but it's my thing.
Simply put, it's an invoice generator. You fill out some forms, get to see a preview of your invoice, and it generates a PDF for you. See? Pretty cute. You can find it here.
I started a lot of projects on my computer/github. How many of them did I finish? None :D There are always proper excuses to not finish a side-project. Not enough time, the excitement fades away, you don't need it anymore...
After solving the PDF issue, I actually didn't work on this for a couple of days. I was happy I solved a difficult problem, and just moved on... The project, like dozens of others before, was doomed to end up with its own grave on my github, and a inactive folder on my computer. A folder I could glance at from time to time and think: Oh yeah, I remember trying to do that.... But, after months of procrastination, planning, wishful thinking... it's finally live.
So, what changed this time?
First, I had already bought the domain name and the server to host my application. So, I was committed. Not a huge commitment of course, but still, I spent some money on this!
Second, I changed my mindset about this product. I have quite a few ideas about how to make this better ( obviously, I mean look at the state of it... ). There are a lot of functionalities I wish to implement. But, there is one simple rule... The longer it takes to build something, the less likely it will reach production status.
So, I asked myself a very simple question:
What is the one functionality that you can't take away from this?
Answer: Generate an invoice as a PDF
In the amazing book Rework, from DHH and Jason Fried, you'll find a lot of great tips about that kind of things.
Build half a product, not a half-assed product
When is it safe to let people have it? Probably a lot sooner than you're confortable with. Once your product does what it needs to do, get it out there. Just because you've still got a list of things to do doesn't mean it's not done.
The way you build momentum is by getting something done and then moving on to the next thing. No one like to be stuck on an endless project with no finish line in sight.
Endless projects, No finish line in sight. That sounds a lot like all my previous attempts at launching a side-project. Getting my project to one inescapable functionality gave me an attainable goal. So, that version is done. Now, I can move on and improve it, and/or add new functionalities. One at the time, step by step.
After 3 years as a developer, I actually never had the chance to take care of the sysadmin part. I write code, but I never managed a server, configure the DNS, and understand what is actually going on. Sure, it's not really my job, but I didn't like having such a huge gap in this area. Launching a product meant I finally had to take care of it. Even if I only took care of the basics, it feels good to explore this.
Anyway, Invoice Maker is now live. It's mine, and even if it is not really pretty and it doesn't do all the things I want it to do, I'm proud if it. I'm proud because I battled my own indiscipline, my own fears and insecurities. I hope I'll remember a few things from this experience:
- Launch now!
- Scratch your own itch
- Commit yourself in some way
- Perfection is a myth
- One good functionality is better than a dozen if the product is never launched
Happy Coding <3