Over the years I’ve done many software side projects and a curious pattern emerges in nearly every one. Also, I see this pattern on a ton of work projects too.
It goes a little something like this…
Someone has an idea. They get excited about it. People work on the design, write the code, and so on. So far so good.
And then something curious happens.
As the project gets closer to being done, new requirements show up. New features are demanded. OMG IF IT DOESN’T DO <FEAURE_X> WE CANT SHIP!!!
Often these new features are totally made up on the spot and never discussed previously. Even worse, when you dig into them, they aren’t needed at all. Yet, some (or all) of the new features are deemed necessary and the project gets pushed back by weeks or months.
Hilariously, this cycle can repeat itself more than once! In those cases, a project is delayed by weeks or months before it is ever in the hands of users to get real feedback on what is important or not. And along the way, the work of everyone involved delivers zero value.
This leads to building the wrong thing or in the worst case scenario a project dying on the vine and being cancelled before it ever sees the light of day.
So what’s going on? Why does this happen?
Fear.
People are afraid of “looking bad”. It’s an ego thing. So much energy and identity is wrapped up in looking cool that they are afraid that someone might laugh at them or call their thing stupid.
Most people can’t handle that kind of feedback at all, so they run from it. They tell themselves stories that something must be “pixel perfect” before shipping (or whatever the project equivalent of that is). That’s a smokescreen to protect the ego.
The problem in that is the ego gets in the way of making something real.
If a tree falls in a forest and nobody is around, was it ever a tree in the first place? Okay, weird metaphor. I’ve got a better one maybe…
If your code sits on your hard drive and nobody ever runs it, is it real software? If you don’t have people using your software who did you build it for? Yourself? Your boss? Just to get paid?
Those are valid reasons to build software in many cases. However, if the point of building software is to have someone else use it then the code needs to find its way into the hands of users or customers. You don’t know anything until someone uses your product.
This is why companies dogfood their own software. This is why beta testers exist. The sooner someone can poke around at your creation, the sooner you know if you are building the right tool or not.
It’s like standup comedy. You can write a million jokes, but until you get up on stage and tell them, you don’t know what is going to get a laugh.
People have no idea what works or not until we do something. We need the feedback loop to calibrate.
Okay, back to the problem of ego and how to solve it…
The best way I’ve found to solve this ego problem in my own projects is to ship to production on day one.
Literally, the first thing I do on a side project now is to spin up a heroku app and get my code running in a production environment. And then I make the ugliest/worst/simplest thing and push that to production. Then I make it better. And a little better. And a little better again. Each time shipping to production. Making it live on the internet.
Even if I’m the only one who cares. That’s fine. At least it’s real.
For example, I recently purchased the domain name GuitarData.com. I’m building out a database of guitars, pedals, and all kinds of guitar related gear. It’s for nerds like me who love that stuff.
I just started building it. So far my building process looked like this…
Bought the domain name
Forgot about the domain name for a few months
Decided to get started and wrote a README file in an empty folder
Picked a single guitar pedal and decided to make a static html page for that
Built the page by hand in static html and called it index.html
Feature ideas started falling out of just the static html page (oh noes!)
Ran the page on my machine as I updated the content
Setup a new heroku app
Failed with the original static html hosting heorku buildpack
Found the PHP heroku build pack and used that to make heroku host my static page
Got my project deployed to heroku subdomain
Configured guitardata.com DNS to point at heroku
GuitarData.com is now live! (and ugly LOL)
Time to build and ship the next little bit…
So my little site is up on the internet. It’s ugly. It doesn’t do anything. It’s probably embarrassing. Go ahead and laugh if you want.
But it’s real. It’s not just talk.
It will get a little bit better each day or week because every time I build something, I’ll deploy it and make it better. Over and over again.
Eventually, it might not be embarrassing. It might even be good!
In the meantime, my ego is fine. I can put my energy toward the next little bit I want to build. That’s more fun than worrying about what other people think anyway.
Oh, and before I close up this little rant, I want to share an extremely useful rule I have for starting my own side projects like this…
Put it up on paid hosting right away!
Heroku costs me like $5 or $10 a month to host an app. That’s cheaper than going to a movie, buying a video game, eating at a restaurant, etc.
My time is valuable. The time I spend programming a fun project like this is probably going to be thousands of dollars worth of “billable hours” (if I was chasing those). I could be spending time hanging out with my kids or going fishing too.
The point is, if I don’t even want to pay $5 a month for hosting, how valuable is this project to me? If I’m too cheap to do that, what makes me think this will ever be worth building? If it’s not worth $5 to me, how is going to be worth anything to anyone else?
I’m giving this mini-rant because I see myself and other developers being cheap about things they care deeply about and otherwise heavily invest in. It’s foolish and a strange kind of dishonest self-sabotage.
I care about this project, so of course I’ll pay a reasonable amount of hosting. And then if I’m paying for hosting and it’s live on the internet, I’ll keep poking at it and making it better.
It’s a virtuous cycle.
Or as Jesus said, “For where your treasure is, there your heart will be also.” Matthew 6:21
If your heart is in the project, invest in it. Share it. Make it better. Ignore your ego and trust that doing your best is good enough.
-Brian
I find it that if you are not controlled by your ego in your work, it's more enjoyable.....
You could do stuff and out of the blue you discover that it's really good
nice one! I'm so guilty about this one. I've launched my app (DJ mixing app) multiple times, and every time we go 'live', i realise how much time I've wasted perfecting things that people simply ignore. During last launch, i've collected feedback from users and made a list of things that needed to be done to launch again, and somehow a "redesign" and UI polish (pixel perfecting) slipped in and is now delaying my launch. It's so hard to resist that thing. And you're right, it's mostly fear. Anyways i'm surprised to find out you're a pedal effect geek. Maybe it would be cool to chat sometime, and see if we could collaborate somehow. We're building all sorts of projects that involve music (effects, a synth, a music making app).