July 3rd, 2006
Look around you; read the blogs, the industry news sites, the Wall Street Journal. If you have been sitting on a killer idea waiting for the right time, wait no longer. The time is now. But before you launch, consider this: the software industry does not suffer from a lack of great ideas; it suffers from poor execution.
Fortunately, you are a new venture; you have the freedom to learn from the mistakes of others and implement the successes. I make no claims that this starter kit is a ‘silver bullet’ or even ‘the best plan’ — my goal is one thing: to help you get out of the gate operating a company that keeps its eye always on its product vs. the mechanics needed to move that product forward.
Pre-flight check list
Before you launch, ask yourself the following questions:
- Is my idea cooked enough? The best way to answer that is can you get your spouse, signification other, best mate (who is non-technical) excited about what you are doing? Can you give the “elevator speach?” — i.e. can you explain it to someone in one to two minutes?
- Why am I doing this? Are you doing this to make money? build your reputation? add value to the open source repository? To teach your self new skills? For fun?
- What is your end game? Are you trying to build a site that can earn you a little income? Are you going after market share? Is your goal to make yourself attractive for a buy-out?
Answering these questions will help focus you and keep you focused during the critical intial period. Do not let the answers, however, be a prison. The world is constantly changing and the advantage you have as a startup is your ability to instantly change direction.
Next step in the pre-flight check list is a little reading homework. Paul Graham has some excellent essay’s on startups and it will be worth your time to read a few that catch your eye.
The last stage is your team. For the first few weeks, I would recommend a team of one — that would be you. This gives you time to hone your vision a little and pick up some management skills (even though you are only managing yourself). When you start adding people, build a small as team possible. Actually, whatever size team you think you need, substract one. You will be far better off having too many things to do than not enough — idle time for any one team member can be the death of a project. As you build your team, look for the following skills (if they don’t exist, learn them ):
- Data center management skills (how to manage a live site, how to deploy, etc.)
- Server side logic skills (RoR, SQL, …)
- Humans factor skills (UI design, useability, …)
- QA Skills (I can make that program break in 2 notes …)
Finally, start networking. Build contacts with people you think may be helpful to your project or better yet, potential customers. Find out what they need and put yourself in a position to offer it. Be on the lookout for someone with startup funding experience — find out what they need and be in a position to offer it
Business Setup and Phases
If you plan to monetize your startup, at some point in time you will want to set up a formal business. You will likely set up either an LLC, S-Corporation, or C-Corporation (see here for the differences). Before you decide, ask advice from people who have set up companies (that person with startup funding experience would be a good one to go to).
Depending on your goals and end game, your company will go through the following funding phases:
- Self funded: This is the most important phase and you want to stay in it as long as you can. Here is the thing about raising money: not only do you have to give more away the earlier you get it, and not only do you get less the sooner you ask, as soon as you get it, you tend to spend it, and faster than you inteded to. The longer you are in this phase, the more leverage you will have in later phases. The longer you are in this phase, the hungrier and more creative you will be. If possible, stay here until your end-game. Now, self funding doesn’t necessarily mean you are investing in tens of thousands of dollars up front. It does mean you are investing your time — and a lot of it. If you can’t afford to go without a salary, work your day job and then spend the rest of your time on your company. When you add team members, find people willing to work for equity (or shared glory :P). In the best of worlds, you start generating a revenue stream prior to having to go to outside funding.
- Friends and Family (50K-200K): Now, if you get to a point where you simply can’t continue without additional money, then proceed to this phase. Have a clear idea how you are going to spend the money prior to entering this phase. Do you need some hardware — or an important piece of software? Do you need to start spending on co-location fees? Do you need to start spending some dedicated time (and hence need some income) to get a sale? Do you need to pay for someone to support an important customer?
- Angels and beyond (200K-2M): If you are going after market share, you will likely need to enter this phase. Since you are focused on market share vs. immediate income, you will need dedicated staff (yourself included) supporting and growing your product prior to it generating revenue (or revenue comensurate to your expenses).
Project Communication, Document Repository, and Code Repository
You will need to use something to communicate to your team members, store your requirement and design documents, and keep track of your code. I use a wiki as my primary communication tool. The wiki has the following organization
- Main page: The main page starts with a blurb on how to use the wiki, it then has a graph of the current iteration burndown chart, and the member load chart, followed by a bullet list of the current iteration plan.
- Project Operations Section: We have pages on daily operations, how to check out the project, add tasks, etc.
- Requirements: Here is where we have pages on all the requirements
- Designs: Here is where we have pages on all the design models and unit test plans
From our wiki, the team member’s daily operations are:
- Start by reviewing your tasks in the MyHome tab in VersionOne.
- Fire up the project wiki, and click on the “Recent Changes” link. This is a quick view on what’s going on with the project. For a more detailed view, click on the Timeline tab.
- Work on whatever tasks you have chosen to work on for the day. Update/add any wiki pages as required. If you discover an issue, add it to the project management tool — same goes for stories, defects, requirements, and tasks. Remember, this is collaborative — change is encouraged — just don’t delete.
- If you need help, do one of two things — post a help request on the wiki OR if you need help from a specific person, Create a task in VersionOne and assign it to the person you need the help from.
- At the end of the day, go back to MyHome and select tasks. For the tasks you worked on, update the effort column with the amount of effort you spent and hit apply. The units are days (where one day == 8 hours — so 2hrs = 0.25, 4hrs = 0.5, etc.). Update the To Do column with the amount of time you think is still left to do. If you worked on a task that isn’t in the project management tool, add the task. If there is no story to add the task to, add the story.
For source code control, I use subversion.
The quickest way to get all this set up that I have found is to purchase a “more_developer” plan at cvsdude.org. At the time I wrote this article the plan is $22/month. You get subversion and trac hosted for you. Also, you can set it up such that team members are emailed with diffs on checkins. And in case you are wondering, I am not part of their affiliate program, so I don’t generate any money if you click on the like — it’s just a kick @# service and IMO well worth the money.
Now, I suppose you could spend time to install all these components on your own server and spend the time to do continuous backups — but for my money, I would rather spend the monthly fee and work on my project.
I run two week iterations on my project. At the start of each iteration I write a kick-off blog article which highlights the iteration objectives. At the end of each iteration I write a wrap-up article where I report on the status and resolution of each objective and provide screen shots of the iteration accomplishments.
From day one, I recommend you start conversing this way with your customer base. Do this even if you don’t yet have customers, because if all goes well, one day you will. Some of those customers will go through your archives and read what you wrote. More importantly, it will be a useful record for you investors when they are considering backing you.
Doing this gives you two great tools:
- Accountability: Since you know you have announced what you have done, and you know you will (eventually) be measured on how well you executed, the blog serves as that extra edge you need to push and get things done.
- Customer value focus: Because you are doing walk throughs at the end of each iteration, you are driven to always add demontratable features that a customer will find valuable.
I use WordPress as my blog engine and love it. I run the blog at my bluehost site. Again, I could have set it up on my own server, but then I would be spending time installing and maintaining a blog engine vs. writing my product and a few blog articles.
While it is not important that you have a detailed plan when you start (and in fact, you should only ever have a detailed plan that covers the next two weeks), you will want some sort of web based project management tool too keep track of the requirements, tasks, and defects you want to address in your project. You want something flexible — something that lets you change your mind every iteration about what you want to do next (but helps you build measured progress at the same time).
I am using VersionOne as my project management tool. I have written several how-to articles on the tool on this blog. At the time of the writting of this article, they were offering the product for $995/5 users/year. It is a hosted product and is the best money I have spent so far on my project (it’s also the most I have spent on any one thing). Again, I am not part of an affiliate program, so I don’t get any money if you click on the link. As with cvsdude, it is just a kick @#$ product. For me, it has been a “must have”.
If you can have the money (or credit) to spare, get it. If you don’t have the money, beg your parents, family, etc. for the money and pay them back over the next year.
Prior to setting up your own server, I recommend finding a hosting company. As I have said a couple times before, you want to spend your intial time building your product vs. dinking with a server. At some point in time you will need to do that — and when that time comes, set up the server (but not before). The other reason to do this is that it saves you from having to spend money to buy the server.
I am using Bluehost and have been very happy with my experience. The account also comes with wordpress so I host both my blog and my project there. Unlike the other recomendations, I am part of their affiliate program — all the same, I do think their service is kick @#$ (my affiliate link is on the front page of this blog).
The other hosting service I have heard good things about is Dreamhost. Which ever one you pick, make sure it has a blog engine you like and supports the technology you plan to build your site in.
I recommend picking a technology that is on the leading edge and availble with hosting companies. These days, that is Ruby on Rails. By picking an established technology, you are just one of many. Sure, you have the security of the technology being proven out and the best practices being matured — but all that was done by other people. Many of these people have a huge head start on you.
If you pick an emerging technology, however, you are the one leading the pack and forging new trails. You are the one being followed. Furthermore, a good emerging technology was written to address the short commings of the established ones — not only does this put you on even footing with those with experience in the established technology — it gives you an edge. The people in the established technology will be reluctant to give up that technology or try the new ones because they have so much investement in the practices they have developed. That will give you time to master the new technology and surpass their productivity.
Database and IDE
This one is short and sweet. Use mySql for the database — its free, widely supported, and available on any hosting service worth subscribing to. As for the IDE, if you are using Ruby on Rails, I recommend Eclipse with the RadRails and Subversion plugins. Check my how-to articles for setup instructions on both plugins.
Well, there you have it, my Web 2.0 Startup primer. Like I said, I don’t claim that this is the “best primer”, but it is “a primer” and one that will get results — and that is the last word of advice I will leave you with — don’t worry about getting things done the “best way” — because there will always be a better way. But do figure out “a way” and execute.