Executing a Software Idea

Jeff Atwood wrote a post about ideas being very cheap and execution being worth millions.  Although, I think the lots of terrible ideas are executed and fail miserably, his point is not lost on me.  How do I translate an idea into reality.  People do it all the time, but what are the steps.

DISCLAIMER:  I am not a programmer.  So this is a first draft at how I would approach it.

  1. First, you need to establish the idea in a prototype or storyboard.  This is the easiest step for me because I can do it all in Balsamiq.  Mockup the design.  The design doesn’t have to be perfect, but it needs to be good enough to explain what it is to business people and engineers.  This step doubles as the “research” phase.  You should validate your storyboards with people in the target market.
  2. Choose a platform.  I think this is NOT best left to engineers.  There are engineers for every single platform.  This is a business question.  It’s possible to build something on a MediaTemple or other hosted service server, but I am not sure this is wise.  The possibility of cloud computing may work better.  Example:  Google App Engine has an interesting structure and a built in payment system.  Although I have never met anyone who used this as a platform.  Force.com from Salesforce works well if your users HAVE to have a salesforce.com account.  I hated working with this system personally.  Aptana has a cloud service that uses Rails.

    In any event, you need to carefully review the choices and then randomly pick one.

  3. You need engineers.  The simplest and cheapest way I can see is to outsource.  There are tons of sites out there that let you get people.  I have no idea which one works best.  However, there are plenty of engineers in 3rd world countries that will get your system working for pennies on the dollar.  I’ve never outsourced anything and I’ve heard mixed reviews.  When it works, its great.  When it doesn’t, it’s a nightmare.
  4. Build a public site. You need the basics of a website to sell your software.  I suggest using WordPress as a CMS.  I am redoing a site now using it.  Although there are some things you need to do to get started, once it’s up and running, the maintenance is a dream.
  5. Test.  Get a bunch of friendly people and give them the service for free.  See what they say.  Make sure it works.  Scale slowly.
  6. Get the word out.  Twitter, Blog, Facebook, LinkedIn, tell everyone you know.  Ask your friends and family to tell 1 person about it.  Make sure they understand what it does.  This is critical.  MAKE SURE THEY UNDERSTAND WHAT IT DOES. There is no way someone will suggest anyone look at anything that they don’t understand.
  7. Improve.  How can the system be better?  Listen to feedback.  No one builds the perfect software on the first try.  You need to evolve the service.
  8. Pay Taxes and Bills. Try and have money left over when it’s done.

Engineering is critical, but overall execution involves alot of moving parts.  What did I miss?  What do you need to do to execute a good software idea?


Comments

2 responses to “Executing a Software Idea”

  1. “In any event, you need to carefully review the choices and then randomly pick one.” classic and normally how it’s done.

  2. If you can’t implement your idea yourself, you’re at the mercy of whoever CAN. Outsourcing *always* leads to perverse interpretations of what you thought you wanted–good luck with that! When’s the last time you heard that a startup that was doing something really new used outsourced developers?

    I’d also question why you’re so hostile towards engineers choosing the platform — whether it’s python or ruby or java or whatever, if they can get something done cheaply in something they already know, you might be 2 or 3 meaty iterations into building your product rather than waiting for them to ramp up on some new platform. Play to people’s strengths!

    If you’re working on something nobody’s seen or done before, the more critical it is to do small iterative development cycles, with a small team (to reduce the overhead of communication and disconnects), and do lots of user testing.

Whatya think?