12 Steps To Starting your a Software Company and 3 Unit Tests to to measure your progress Or the art of Changing Hats, Calendar Time and not waiting by the phone.
I started my career as an Electrical Engineer, created 2 products, then pivoted to Software Engineering and founded a software startup.
Below are step by step instructions based on my experience running a successful small software company for the last 14 years.
Below that are some milestones for measuring your success along the way. These are principles that I just followed intuitively. My partner works in the industry our software serves and so a lot of this ("stay close to the customer" sort of stuff) was built in naturally.
I violated the rules about finding customers first one time and that was the only one of my products that wasn't a success (it was, in fact, a miserable failure commercially. ).
How to make Calendar Time work for (instead of against) you
I've found there's a certain amount of "Calendar Time" for things to develop. For example, it takes time for the customer to convert from a "prospect" to a paying customer, and it takes time for the effects of marketing (ads, Adwords, etc.) to take measurable effect.
You can't speed up these Calendar Time events so it's helpful to have something else to work on instead of "waiting by the phone". The steps below interlace marketing/sales and product development productively while also giving you something to do while waiting on something else.
1. Feel their pain
Become intimately familiar with the domain you're working in and the pain you're trying to solve. Hopefully, you've chosen one you already know. You might also find your "anchor customer(s)" who already understand your market. They needn't be actual partners. The relationship could be that they tell you about the market and they get the product, built largely to their specifications, free. Beware the single datapoint. Ideal First Customers have an understanding of the computer and what's easy and hard and understand how the typical customer in this market would use the software.
2. Be the customer.
Play customer. Try to find an existing solution to the pain. This will show you who your competitors are and how your customers might find you. Be exhaustive. Try forums, google groups, whatever. How do people currently solve the pain? (Perhaps your software is replacing someone, or it might just help them do the job faster). This will be important when estimating the value of your product. Because the price of your product should be based on its value to the customer, not its cost. (The customer will never pay more than how much it's worth to them and they couldn't care less how much it cost you to create it.)
3. Find a few representative customers.
As in, people who would pay if you solved their pain. They needn't actually paybut they have to be willing to. Payment is a litmus test at this point, not an income model. Tip: your Aunt Irma who thinks you have the cutest blue eyes and will buy whatever lemonade your stand is selling is not a customer unless she'd pay for the product even if she didn't know you from Adam. Get referrals from #1 or find them while you're searching forums. These will also be your beta customers. I can't tell you how many people I've seen spend months or years working on a product and then ask "how do I get beta testers". How do you know if you're on track if you haven't been at least talking to potential users.
Evaluate the market
4a. Get a domain name & Build a simple website.
Submit to google. This starts the clock (see calendar time above) for getting your site into Google. Let folks sign up to get an email when the product is available. They'll be source of enthusiastic Beta testers and first sales. Be clear with them that the product isn't available yet.
4b. Read this excellent article by the author of Lean Startups.
The basic premise is that bugs in your idea (whether you can make money selling it) are more deadly than bugs in your software. Your product's #1 goal is to test your business idea. (i.e., version 1.0 should be the minimal product to test whether there is a market there for your product).
5. Test your vocabulary.
Having a clear vocabulary about the product is good indicator that your mental model is well constructed and clearly defined. If ya' don't know what to call it then ya' don't know what it really is.
6. Alpha prototype.
The simplest thing that will be of net positive benefit to the customer.
It doesn't need to be professional. It might be ugly. It might crash a bit. As long as it's better than what the customer uses now,it's good enough. Someone asked Seth Godin what advice he'd have for his own child on how to start a business of their own.
His response? One word:
7. Get feedback from Alpha testers. Interactive demos, etc. Look for common feedback themes.
8. Find keywords that your customers use
If you can find the lingo your customers use when describing their pain then you can use that vocabulary in your site text and even get a domain name with that text. And you can even find keywords that your customers ("Marketing Segment") use even when not discussing the pain. E.g., if you find that the "pain" you solve is the pain of using paper records in a hospital (your solution: Electronic Medical records). Obvious keyword are the solution ("electronic medical records") the problem (" best way to store paper medical record") and also just words your marketing segment uses: Find Doctors (or Hospital Sys Admins) who are techies.
Start an Adwords campaign to start finding out the right keywords. Make "beta trial sign up" one of your conversion metrics. A willingness to give out their email address is the closest (and dearest) thing you can ask of the visitors at this point. All visitors are not equally interested (or equally likely to buy your product). Ones that sign up to be a beta tester are much more likely to be worth your time selling to.
The goal of the Adwords Campaign is to find which keywords are likely to attract customers, not simply attract visitors. If all you wanted were eyeballs on your site, you'd just advertise "free sex". But out of the nearly billion people on the internet, you want the folks who are likely to be your customers.
9. Beta version. Get Beta feedback.
Does everyone have trouble starting the program? Do they all ask the same questions "What does XYZ mean?". Remember: add features that help a large % of your users and harm a small % of them. Stay focused on your goal. If you're creating a Contact Manager and someone is using it for some other task they'll start asking for weird features to get their non-standard task done.
On the other hand, if a lot of your users all "misuse" it the same way maybe you've discovered an unmet need. That's how Flickr started: it was originally a gaming site with the option to share photos. Turns out the photo sharing was the "killer feature". They sold it for around $20 Million. So... look for trends and make sure that the customers who are giving feedback are representative of your market.
UserVoice is a great way to gather this info. Users get to suggest features (or you can suggest them) and vote on each others ideas. They have a free "starter" edition that works find for small companies.
10. Let visitors to site sign up to get a trial when it's ready.
11. Let some of them try the trial if you think it's ready.
12. Work on Beta 2.
A software company could be considered a Software Factory pattern. And what's a pattern without a Unit Test?
Here are three to get you started.
a. Finding beta customers for whom your Pain Story resonates. They understand they have a problem and see how your product could mitigate their pain.
b. First dollar - First sale (ideally to someone who doesn't already know you, but hey take what you can get) - validates the value of the product
c. Stranger Money - Next 10 sales - validates your marketing. (If you can get 10 sales from strangers for $x in marketing then that's probably repeatable and there is a future for revenue from this product. Whether there is profit is another question. But if you can't get to this point, then you'll never reach profitability)