If you're like me, you've thought: I don't want to join another company, I want to start my own software consulting company! And so, I did. I incorporated a Canadian corporation named 'Robert Elder Software Inc.' on July 4, 2014. It's rapidly approaching 3 years since I started on this journey, and I figured it would make sense to write down some of what I've learned, and my plans for the future.
As of today, the company I incorporated still exists and it has filled 2 corporate income tax returns. The amount of money I've made is a mere fraction of what I would have made had I accepted my full time offer at Amazon upon graduation. I am still the only employee of my company. Also, I've switched focus from trying to get 'consulting contracts' to a more classical product based start-up approach related to education around programming. I'll review more details and specifics on all of these points throughout this article. I'll also focus on the things that ultimately held me back from achieving more than I did.
Let's begin by trying to answer the question: "what does it even mean to start a 'consulting company'?" There are a few closely related terms (freelancing, contracting, etc.) and I think it would be beneficial to try an understand what the difference is between contracting, consulting, and freelancing in practice:
None of these terms have standardized definitions, and their meaning may vary geographically, and also by industry. This is how I would define them for the software development industry:
Contractor - The word 'contract' doesn't really add much, because you should have a 'contract' in every business relationship (even employees sign contracts). In software development, a 'contractor' usually refers to an individual who has been hired for a fixed or temporary but indeterminate period of time. In larger companies you would also expect them to casually refer to an outside company they have hired, or an external group of people as 'the contractor', so there is a lot of variability here.
The common theme here is that the 'contractor' would not have an 'employee' relationship with the company seeking their services. This difference will mainly manifest itself in how the contractor receives payment from the company, and the degree of control the company has over the contractor. For example the contractor will likely not receive health or pension benefits from the company seeking their services. In a true legal 'contractor' relationship, the contractor has substantial freedom in how and when they do their work (with respect to the company seeking their services), and effectively operates as a separate entity which may or may not be incorporated as a separate business. In reality, this definition is muddied by the fact that companies will often to seek to 'hire' contractors in order to take advantage of tax or compensation advantages, but then attempt to treat them like 'employees' by exerting a substantial amount of control over them. It can often happen that companies will hire someone 'on contract' for a fixed trial period, after which they would fully 'hire' you as an employee if you are good. If you're not good, they'll say "Oh, sorry, we don't have any more work for you, and your contract is ending. Goodbye!". This gives them an easier way to get rid of bad employees (by avoiding the increased legal protection offered to true employees).
This ambiguous treatment of the distinction between 'employee' and 'contractor' for the benefit of the company is something that employment lawyers and the tax authorities are well aware of, and is generally considered abusive. For the record, I would not recommend trying to 'cheat the system' when it comes to employment and tax law by playing the game of semantics and trying to craft carefully-worded contracts that try to pass things off in a way that does not reflect reality. When making any tax or legal judgement, the lawyers and tax authorities will generally decide based on asking "What is the actual nature of this relationship?" and looking at things like where you do your work, how you decide your hours etc., as opposed to reading the words you wrote in a contract verbatim.
Now that we've defined these terms, I can say that what I had originally envisioned creating was a 'consulting company'. I wanted to have an independent business that would eventually have its own office space, its own employees, that had at least some potential for scaling up and growing. I have managed to achieve the part about being 'independent', although I have not been successful at getting enough consistent high-quality business to scale even slightly beyond covering my own expenses.
As I mentioned above, I have shifted most of my focus now to trying to build a product related to teaching programming, although I am still opened to doing consulting. In the rest of this article, I will discuss various things I learned in pursuing the idea of a consulting company.
If someone came up to you on the street and said "Buy my book about the secrets to getting rich in the stock market for $20.", would you buy the book? You probably wouldn't on the grounds that if someone had truly figured out the secrets to the stock market, they would probably be busy printing money from trading stocks, and not wandering around the streets trying to sell books for $20. You can make a similar argument to how people would go about hiring a consultant or contractor: If you can help my business make lots of money, why aren't you helping your own business to make lots of money?
If someone pitches themselves as a 'social media consultant' (I'm sure there are tons of people who do this), how much do you think they could ask for an hour? $20? $40? $100? I certainly wouldn't pay much since claiming to be knowledgable about 'social media' isn't really proof of what they can do for me. If Mark Zuckerberg pitched himself as a 'social media consultant' and charged $100,000 an hour, he would probably be booked up solid. The thing is, he isn't a consultant, because he's busy actually doing the thing that people would want him for. Therefore, I claim that if you want to get people to seek you out as a consultant, you should build a reputation not for consulting, but for whatever thing you want to be consulted for. A successful startup that doesn't do consulting would have an easier time getting consulting contracts (related to their startup) than a real consulting company. Of course if you build the successful startup, you'll never want to go back to consulting again.
Getting contracts as a consulting business is totally different from being a 'contract' employee. It's a totally different mindset, and you should make sure you don't initiate communications with anything that looks like a resume. This was something it took me a while to realize. Initially, my point of view was that if a company wants a piece of software built, it doesn't matter what the legal status of the entity who builds it is, right? This view was incorrect, and unfortunately, I can't provide a lot of advice on how to correctly present yourself to business people because most of the traction I got was from interacting with technical people and personal referrals. I presume that it may come down to the fact that most developers don't understand typical business processes, or they can potentially be bad at project management. Another thing is that there is much less accountability if a single developer approaches you to take on a project of their own. I never fully figured out why businesses want this difference in presentation, but it's definitely something to be aware of.
What rate should you charge? I still don't know the answer to this question. There have been some popular articles on Hacker News saying that you should always charge weekly instead of hourly. I decided to follow this advice, and found that most people still just want you to bill hourly because it's easier for them to understand. I wasn't in a position where I had a huge amount of bargaining power, so I just said "OK, I'll bill you X per hour."
The amount of money you charge will set a filter for the types of clients you have, and potentially define your entire business future because much of your future work will come from referrals in your previous network. This is important to consider, because if you're really excited to get started, you might start entertaining contracts for very low amounts of money. This might trap you into a pattern of filling your mind with low-payoff opportunities that have large opportunity cost. Having said this, if you're just starting out you'll have to do whatever you need to in order to survive.
In the past I have worked for as low as $30 per hour and gone has high as $100 per hour. I have found that clients are generally happier when I charge more money, and I believe this is related to the fact that clients with more money are happier.
There are a couple common alternatives for billing: Fixed bid and per time (hourly, weekly etc.). You could combine these in some creative way depending on the project. Whichever one you go with is up to you and the client. I would only recommend billing by fixed bid unless you are absolutely sure you can estimate how much time it will take to do the fixed big project. I only did one fixed bid project, and it was for a custom Wordpress theme where the client already had detailed mock-ups of what they wanted. This person was also highly technical and knew exactly what they wanted (which is a rare delight).
Put on your invoices that you charge interest. Charge a rate that isn't outrageous, but is slightly higher than other common forms of debt: This way, if they run out of money, they'll start thinking "Well, I better pay off the high interest debt first", so they may use other forms of credit (like a bank loan) to cover the cost of paying off your invoice, instead of treating you like the bank. If they go broke it's now the bank's problem not yours.
It also gives you leverage to say "Hey, you're such a great client and I know you're a good person, so I'm going to take off the interest charge for these months if you do X for me." Interest changes won't make you rich, but it does give you a bit more leverage.
If you try to do what I did, one of biggest problem you will face is that no one will take you seriously and everyone will just try to hire you instead of entertaining the idea that you want to operate independently as a business. Companies will gladly pay you 6 figures as a full-time, but as a consultant most places wouldn't consider using you for even a quarter of that for the same job. That last sentence might not seem like it makes a lot of financial sense, but it's what I found in practice. I had a few leads where it seemed like they were really interested but no matter how hard I pushed for the work to take place through a B2B contract, they just wouldn't budge and wanted to starting doing interviews right away. Some companies would even completely ignore the original message I had used to contact them, and state that they wanted to start doing interviews right away. After clarifying that I was interested in meeting them, but that I was looking to pursue work through a B2B contract, they would stop communication. I've started to believe that this might actually a symptom that we're in a bubble: Many companies don't actually seem to have any real 'meaningful' work that needs to be done. They're just collecting up engineers in an attempt to look like a real company as much as possible, then get 'acquired' by another company who just wants to use the technical talent.
Self-contained projects are rare. Most of the work available requires you to be sitting in the company's 'open space office' where you can hear updates passively, and communicate with team-mates instantly. This was one of the biggest reasons companies gave for not wanting an outside consultant. A surprising number of companies don't seem to even know what they want to hire people for and that's why they want employees sitting in the same office as them. This way, managers can easily dictate whatever instructions come to their minds on a whim.
Another big problem you'll face is that of finding quality clients who have the money to pay you. You'll likely get a lot of leads that are from extremely early stage startups that are still just in the 'idea' phase. Some of them will offer you equity (don't take it). Theses companies aren't likely to have much money, but they are also inexperienced with how to manage projects, get things done, or otherwise conduct themselves as adults. This can make things unpleasant for both of you.
The final thing I hadn't realized about starting a consulting company is that its primary business activity is more about sales and marketing than it is about building software. Eventually, you might be able to get to a point where your previous happy clients will recommend you to others and coast on that, but in order to get to that point you need to get your first few customers.
You may also want to read why VCs don't fund consulting companies.
There are 2 things that I would recommend not doing (at least not initially) unless you want to kill your consulting startup as soon as possible:
These are really big decisions, and they aren't to be taken lightly. Make sure you have a revenue stream that's secured far into the future before you think about doing these.
Fortunately, I didn't do either of these things, but I did almost consider the second one. I got a fairly good contract early on, and when the money is flowing in the future always looks sunny, but in this kind of business your cash flow is completely uncertain, so hiring a first full-time or even an intern is a huge decision. In my case, I was considering getting an intern because in this case you can at least budget for the fixed total amount that you'll have to pay them.
Another one is potentially spending a lot on marketing. You will have to spend something on marketing because that's a big part of how many consulting businesses get new clients, but you should only consider investing a lot of money here when you already have significant traction from other free marketing techniques (previous happy client referrals, web presence, etc.). It is incredibly easy to end up sending out the wrong marketing message to the wrong people and end up pouring a ton of money into a hole.
In my opinion, there are 2 types of threats that a contract will protect you from: Outright premeditated fraud or malice is one and the other is miscommunication. Miscommunication is going to happen way more often then fraud.
If you don't write all the details of your agreement in a contract, people will end up being inappropriately nonchalant and friendly about the details. You'll have people say: "Oh, that's fine you can do whatever for this button.", then when it comes time for them to take delivery of the results and pay you, suddenly they'll say: "Uhh, wasn't this button supposed to be red and flashing? This needs to be fixed by yesterday's 2pm deadline that I didn't ever tell you about." The example in the last sentence is overly specific, but I think you get the idea.
Another benefit you get by writing it all out in detail is that even if the other person signs the contract but doesn't read it, when they want to double-check a detail in the agreement they'll check their copy of the contract to clarify. Most reasonable people will understand that if you sign a contract without reading it, and then later notice an unpleasant (but fairly reasonable) detail in the contract, then it's your own fault for not bring it up before entering the agreement. In this way, it will prevent them from building animosity towards you, or accusing you of changing the details after the fact when it was really just that they had a mistaken assumption.
You don't need to include every possible detail in your contract, but the two things you're most likely to get into an argument with someone else over are: 1) The payment. 2) The deliverables. Important questions to ask are: How much gets paid? When does it get paid? What happens if the payment is late? Is there interest? How long do they have to pay? What currency is the payment in? Who pays various project costs: Materials, wire transfer fees etc.? When does delivery to the customer take place? Is there a support plan for after delivery? When does the project officially 'end', so it's not just infinite bug fixes forever? Who owns what intellectual property if payments are late?
I also recommend learning at least the definition the following standard parts of a contract: Termination, indemnification etc.
I've never tried this, but I think one approach that could work if you just want to make money and also get the fun of starting a real business, is to start a 'consulting company' with your friends. Do your best to look like a 'real' consulting company (actually work on projects for money etc.), and then position yourself to get 'acquired' by another company who is just looking to tear the company apart as an acquihire. Generally, the acquiring company will require you to stay for at least a few years post acquisition. You won't make millions, but if you did it right, you could probably make a little bit more than if you just went directly into a company. Of course, there is risk involved, and you might just end up doing worse, or you might have a falling out with your friends and then the company falls apart. Either way, you'll be able to add an entry to you Linkedin profile that says 'co-founder'. This idea doesn't appeal to me personally, but it might appeal to you because a lot of people end up doing something pretty similar to this.
This is the question that most people starting out want to know. The answer I have for those starting out is somewhat unsatisfying: Everything works a little bit, nothing works amazingly well, and you just have to grind away until you get some traction.
Here are some things that I tried. Note that I'm not trying to discourage you from doing any of them (because they will all work a little), but each method has its own challenges:
If I could re-do it again: Start a 'real startup' immediately, but do the consulting on the side. They say you shouldn't try to consult on the side while you're doing a startup, but if you're bootstrapping you basically have no choice until the startup is making a profit. It's called 'bootstrapping' because lifting yourself up by your bootstraps is impossible, so if you truly want to make the impossible happen, you're going to have to go outside your comfort zone in order to survive: Get a bunch of room-mates, and sleep on the couch to pay rent. Live in your mom's basement. Live in abject poverty. Whatever it takes to survive.
As of today, I'm still open to consulting, but now that I have a bit of experience at this, I generally quote people a high enough rate that they won't want to move forward with the project and I can continue working on interesting things on my own. If they happen to say yes, then it's OK, because I'll get even more runway to do interesting things on my off time.
Now you must be wondering: "How do you make money to eat?" and the answer as of today is that a high percentage of my income comes from my part-time teaching contracts. In the past the few contracts that I did brought in just enough money for me to survive and spend a bit of off time working on side projects and trying to figure out the best direction to go in. I haven't been actively looking for consulting gigs in a while, and have instead been trying to build up my brand a bit more with open source projects and technical writing. I've also been working on trying to bootstrap a product to help people learn Linux and C programming. Of course, if I get any traction with my product, that'll be when the high-priced consulting leads start pouring in, and that will be exactly the time when I won't want to pursue them.
You may also want to read Starting A Business and Why VCs Don't Fund Consulting Companies.