Why are we developers so bad at getting our own products shipped?

"Productizing" rose from the ashes of the "dot bomb" collapse. You may recall that after we all pulled ourselves from the rubble, people got lean. We understood that a startup had to work on a tight budget; that VC money was too scarce and had too many strings attached for most of us to benefit from. People went back to their garages and virtual offices. They started to slim down, not just their lifestyles but their products, as well.

A great many of the newer startup business are productized services. What this means is something that you are already doing for your clients one by one, but that you realize can be turned into something reproducible and offered to far more customers than you could personally handle. It's that Magical Recurring Income we all dream of.

I think we developers are in a peculiar situation. On the one hand, we are in the enviable position of actually being able to create our ideas with little help from others. On the other, we are exceptionally poor at executing these ideas. Why is that? Why are we so bad at getting our own products shipped?

We don't think of it as a business

About a month ago I went back to an idea that had been sitting on the shelf for a while, TweetStart.me. How long is a while? The files were dated June...2013. When I sat down and rebuilt it, I was able to go live in 2 days! Why did it sit around for so long, if it was such a genuinely simple project?

Angular.js

It seemed like the perfect one-page app to learn Angular with, and so I dutifully plowed through all the tutorials I could find to get up to speed. Then realized that that was too slow, that I would need to just learn the bits I needed as I went. Then realized that that was causing me to make a big spaghetti mess, so started over...

Sort of lost sight of my project, didn't I?

I chat with people all the time who think they "might like to make a project like that - maybe something with Framework X I've been wanting to try out". Wrong! If you want to try out a new framework, make a TODO app. There's a lot more learning possibilities to them than you think, and you can polish it over and over to learn the best practices. If you want to make a product, use what you know - and the better you know it, the better your chances of actually completing. Focus on the business, not the technology.

We reinvent too much

Say the words, "A clean slate!" at a developer conference and watch eyes turn glassy and mouths slip into dopey grins. This time we can do it right! It will be so much faster, too, because the code will be so good...

You know better than that. "Doing it right" means agonizing over the perfect directory structure. Twenty minutes mentally debating over variable names. Inheriting from the abstracted interface of the "Money" structure trait...

This doesn't mean build it crap. Build it clean; build it easy to work with. Use the best practices you know to produce code that will be bug-free and extendable. But use code you know. This isn't the time to experiment with new patterns and libraries.

Ideally, you should already have a lot of very useful code from your other projects. You should be focused in your professional life on writing decoupled, testable modules and libraries - which in theory you should be able to just drop into any new project. Need Twitter login? Got that. Need an html layout with tabs? Got that. Cobble together as many bit of code you already have as you can. Remember - we are focused on the product, not the website.

We overbuild

Sacha Greif gave a presentation a while back at our local Hacker News meetup in Osaka about creating side projects. We should focus, he said, on getting something done in no more than 10 hours, and shipping. Don't worry about perfect. Don't worry about databases. Just make it quickly.

When I sat down to plan out TweetStart.me, I used a Trello board. My lists were simple: Won't work without; People will bitch without it; Someday. If you log in to the site (please do! and add a few of your own blogs while you're there) you may notice a few things:

  • There's no pagination on the lists - they aren't that long yet. Make them longer, I'll give you pagination
  • There's nothing behind the Profile link - what would I put there? Delete your account, I suppose. I can do that manually if someone asks.
  • There's no ajax for posting - you can't post more than 5 items anyway, before you have to retweet something from the list. The page reload is fast enough.

There are plenty of other decisions like that all over the site, both visible and in the code. There's no admin panel. I'm using an internal API, but on a couple of hiccups I just coded around them quickly. I stripped all the features out that I could until I had something I knew I could make in a weekend in my "Must" list.

Not to be a downer, but - your idea probably isn't going to be noticed by very many people. There's a lot of ideas out there all clamoring for attention. Before you dump weeks of your life into the perfect website for a product or service, get something minimal out there and see if anyone is even interested.

Conclusion

That's it - that's my advice to you. I can't make your product go viral. I can't tell you the best pricing structure, or whether or not to go freemium or paid only. I can, hopefully, help you get it shipped - and without spending a lifetime doing so.

Use Trello to manage your client projects? Spending too much time writing weekly update emails - or not enough?

Check out my latest project - Trellup and keep your clients happy while you spend your time on billable tasks.

Contact me