When the stock market was high and the .com boom was in full swing it dawned on me that we developers were doing pretty well. There was high demand and high salaries. Companies were willing to work out all kinds of unusual schedules if it meant they could hire you on. Life was pretty good... and yet I had a nagging feeling that I had reached my financial peak.

The problem wasn't that I wasn't making a good living, but that I seemed to have hit a ceiling. If I wanted better things for my family it was dependant on me working as many hours as I could fit into the week without neglecting them too much. I was going to have to find a way to increase my income, but there is only so much a company is willing to pay and there are only so many hours in the week - and I just don't like those kind of limitations.

So I sat down and thought about it. I searched the web for ideas. And I thought about it some more. And I realized that there are really three basic ways to earn a living as an independent software developer: hourly, project and product.

Hourly is a nice place to visit, but I wouldn't want to live there.

That said I have been doing hourly consulting for the majority of my career. It's easy and mostly stress free as long as you don't mind the potential of being out of work every now and then. I work my 40 hours a week and am rarely involved in office politics. I am rarely asked to put in overtime because it messes up the budget since I charge by the hour. I also get to spend more time with my family than I do at work.

Regardless of the fact that you can make a good living off the hourly model, it has two big problems: It's rare to find a fulfilling contract and there is an income cap. Since you're at the mercy of the marketplace it's tough to be super-choosy about the contracts that are available, and the burn-out rate for each contract is pretty high. I'm good for about 12-18 months on a contract and then I need to move on. It usually gets pretty boring after 3-6 months and you find yourself doing projects on the side for other clients which of course eats into your free time.

But the biggest of the two problems is that most companies have caps on what they are willing to pay a consultant, and most have caps on how many hours a week they will allow you to work. It's some bean counter nonsense about budgets.

I've found that most companies won't pay more than $60 - $90 per hour for long term contracts, which puts your income in the $120,000 - $180,000 range. You'll bring home considerably less if you use an agency too. (Keep in mind these figures also need to be reduced by the additional expenses that you need to cover for yourself as a contractor, like health insurance.)

Now I did say most companies. There are those that will pay more, especially if you have a specialty or there is a shortage of developer talent in the marketplace. During the dot com boom it wasn't rare to find companies paying up to $300/hr. I suppose those can still be found, but there's really too much competition out there for most programmers to command such a fee. Many companies these days won't pay more than $40/hr.

Regardless, you are still limited to the number of hours you are able to work and the hourly rate – and that's where the project model comes in.

Projects maximize time spent through cookie-cutter techniques.

When I first started out in computers I was a network engineer. Novell was hot at the time and I jumped on the bandwagon and was setting up Novell sites all over Los Angeles. Once I was able to get it down to a system I started charging customers a flat fee to install their network and get them up and running. I may not have been the cheapest around but I was experienced, personable and the customer knew exactly what it would cost to finish the job even if I ran into a snag.

Customers will always pay for value. I learned a lesson from one of my clients that I will never forget: Customers will always pay for value. With that precept in mind I was able to charge a good fee to provide a tried and true solution which I was able to implement quickly due to my experience in putting this same network together many many times. Had I charged an hourly fee I would have made much less because the customer would have felt he was paying for time instead of paying for a solution.

That same principle works even easier with software development. Let's say your forte is designing web sites. Never mind that the competition is fierce in this area – let's say you really love it and you're good at it. You've been designing them for clients for a while and you've noticed that most sites have very common elements: header, menu, main section and a footer.

It's an easy leap to design a common page with pluggable components that would satisfy 90% of the web sites out there. With technologies like CSS and/or .NET Master Pages and/or WebParts it becomes trivial to throw a basic site together in a day or two. And it's highly customizable so that two sites with the same structure can look completely different.

I would bet that many of the projects you write reuse many of the same elements that you have in your code library. The use of these common components cuts development time enormously which would effectively allow you to complete more high dollar projects in less time. Database applications are perfect candidates for this as there are whole libraries written to communicate with your database of choice.

Many large consulting houses like Accenture do so well simply because they can pool their knowledge and resources from their employees across the globe and hand out tasks to those individuals best suited to them. They have a stable of employees that have chosen different areas of focus that when combined can make a formidable force.

The cookie cutter techniques of the project model allow you to increase your income and work less time – giving you more time to either spend on personal pursuits or extra projects. But is there an even better model that can accomplish that in a potentially unlimited way? There is.

Product is the pinnacle.

Yet another natural progression for a developer is to create a product that simplifies what they are doing either internally or for clients and then find a market for that product outside their company. While you have to be aware of the legal ramifications of using potentially proprietary knowledge to create your product, this is precisely how many software companies began.

Many actually bring the idea to their employer first and are turned down. One of the best examples of this that I can think of is Citrix Systems, which was founded in 1989 by Ed lacobucci after his idea for multi-user support in OS/2 was turned down by his then employer, IBM.

Although Citrix had a rocky start where 2 of the 3 founders left the company, they went on to produce the very popular WinFrame application. Eventually Microsoft ended up licensing Citrix technology into the Terminal Server product and Citrix created an enhanced version sold as “MetaFrame.” Today Citrix is a leader in the internet sharing space with products like “GoToMeeting” and “GoToMyPC” – even if its leadership in this area was attained through acquisition. At the last SEC filing Citrix expected their annual revenue to be between $1.120 and $1.128 billion. With a “B.” Not bad.

Yet another software company that grew out of ex-IBM employees is SAP. They are now the 4th largest software company in the world. Adobe came from Xerox employees, Electronic Arts came out of Apple and Lotus came from VisiCorp. The founders of these companies were all involved in development in their previous employment when they decided to strike out on their own. In some cases the new company has released products not at all similar to what the founders used to do, but in most cases the product line is a natural offshoot.

Why is it better to have a product than consulting or contracting?

Sell software, not time.

It all comes back to time, money and which you can create more easily. Of course I'm not saying that writing a good product is easy to do, but I am saying that you have a better chance of that than you do creating more than 24 hours in a day.

The price of your software and the quantity you sell are subject to market conditions and not the number of hours in the day, so it is a different kind of math you will need to use to determine if creating that product will be worth it for you, but if you create decent software and can find (or make) a market for it then your income is practically unlimited.

Do you remember using WinZip when it first came out? It simply shelled out to the DOS program pkzip.exe. A first year programming student could have written that, yet WinZip was acquired by Corel Corporation in May of this year for an estimated $69 million.

Do You Have What it Takes to Create a Product?

Take a moment to think of what your employer does. Can you write something to benefit your industry? Do you have an idea your employer is unwilling to pursue? If you have an entrepreneurial mindset you could be the next Citrix or SAP. After all, if you're already programming for a living you might as well reap the financial rewards too.

I think I'll take my own advice and jump from hourly right to building a product. Now if I can just find my copy of pkzip...