I work for agencies and independent programmers who offer consulting services. Before becoming a lawyer I did freelance web development. This is an overview to the steps required to start a business doing contract programming.

Step 0) Learn how to program and develop your skills to a point at which people would like to pay you to program for them.

Step 1) Save enough money that you can afford to live for a few months if you will be doing this full-time. Developers are very in demand right now and can charge $30-$200+ per hour but it will take a while to build a stable clientele.

Step 2) You can either incorporate (e.g. “Web Development Inc.”), do business under your own name (e.g. “Jane Doe”) or do business under a trade name (also called a “business name” or “Master Business License”, e.g. “Jane Doe O/A Pro Web Developers”).

Step 2a) If you choose to incorporate then you will need to decide on provincial or federal incorporation. I almost always recommend to my clients that they incorporate federally. It is slightly cheaper, looks better when dealing with US customers (most Internet businesses in Canada have US customers or transactions) and the online services are better than Ontario's. Incorporation has a number of advantages over doing business personally including limited liability. You can incorporate a company on your own directly with Corporations Canada but I frequently encounter self-incorporations that are not done properly (most common problem: not issuing any shares).

Step 2b) Doing business under your own name does not require registration but you can lose some tax advantages and limited liability that you would otherwise have as a company.

Step 3c) A trade name (AKA “business name” or “Master Business License” in Ontario) allows you to do business under a name other than your own although you are still doing business personally. A Master Business License (or equivalent in your province) allows you to cash cheques made out to that name (your bank will require it) and is legally required if you will not be using just your own name.

Step 4) Speak to an accountant and consider registering for HST. There is a revenue threshold at which HST registration is mandatory but you may find it advantageous to register sooner in order to claim input tax credits. An accountant (or lawyer) may also help you understand the difference between being an employee and a contractor which may be important for some types of contracting.

Step 5) You may want to purchase “general liability insurance” for your business. Although if you don't have any assets and are operating through a company then this may not be of much practical benefit.

Step 6) Write a contract for the work that you're doing (or hire a lawyer to do this for you) because your clients are not likely to prepare this for you. The two main models are a contract with schedules that sets out the specifics or a “master services agreement” with statements of work. Your contract should address intellectual property, when you expect bills to be paid, interest on overdue accounts, whether GST/HST will be charged on top of quoted amounts, etc. Consider licensing vs. assignment for the IP you produce (especially if you plan on re-using code between clients).

Step 7) Invoice clients early and often. Beware of “scope creep” when doing fixed price contracts. Also watch out for unpaid bills piling up: it's much easier to get a $500 bill paid than a $10,000 bill. If a client doesn't pay then your remedy will be: settling for a lesser amount of money, writing off the amount completely or small claims court. Clear agreements with clients can help avoid misunderstandings and unpaid bills.

Step 8) If you're short on clients there are many meetups in Toronto where developers are always being sought out. I recommend HackerNest.

Related blog posts:

Starting a software company in Canada

Important tax credits & deductions for tech companies

How to be your own technical co-founder

Small claims court math