A few tips for aspiring freelance developers in Montreal, part 1

One year ago, I left my full-time job at Ubisoft Montreal and became a freelance developer. In this article series, I share my experiences and a few concrete tips on how to switch from a permanent job to freelancing. It is, of course, targeted towards aspiring freelance programmers, but other freelance workers will hopefully also find a lot to learn. Some of the information presented is also specific to Montreal, but the overall step by step process can be applied elsewhere.

This ongoing series is composed of three articles. Each article covers a stage of your progress towards your goal of becoming a freelance developer. They are presented in a chronological order. This week, we’ll go through the preparation stage: before you leave your current position and can introduce yourself as a freelance developer. Next week, the following stage we call transition will be presented. At that point, the switch to freelancing will be done, but no contract will have been signed yet. Finally, two weeks from now, the execution stage will give you some tips on how to keep your business moving forward while working on your first contracts.

A career is something very personal, and people have different views about what becoming a freelance developer means. This series is not about answering all questions to everyone. It’s about sharing my experience with other newcomers so that they can benefit from it. Any question or remark is more than welcome, please share them in the comments at the bottom of this page.

Before diving in, you may wonder how it worked for me. So far, I have been very happy with the results. My clients now include well established multi-nationals and local startups. They allowed me to increase my revenue by 20% while taking two months of vacation. Three new skills were also added to my skills set: iOS applications development, Node.js and Lua. Last but not least, I’ve met very inspiring people who I’m looking forward to collaborate with in the near future.

With that in mind, let’s start with the first stage: getting prepared to become a freelance developer.

Preparation, or how to put the odds on your side

It can seem very obvious, but it is very important to be well prepared. A good preparation will buy you more time so you don’t have to find a client in your first few weeks. It will also allow you to fail a few times before generating a steady income. We will go through the topics that I find most important during your preparation. We’ll also conclude by mentionning what some developers think is necessary but can actually be armful.

Building up your experience and profesionnal network with full-time jobs

This can seem contradictory to the purpose of this article but spending some time at full-time positions is a great way to achieve three of the most important steps of your preparation: saving money, making contacts and choosing your skills.

Working as a full-time or part-time employee generally gives you a steady income that can help you save money regularly. It also gives you access to two very valuable resources: real-world projects and experienced co-workers. Real-world projects are great to sharpen and acquire skills. They also help you give a price to them. It will be valuable when you have to decide which skills you want to focus on. Experienced colleagues are also a great source of knowledge, inspiration, and constitute a strong foundation for your professional network.

Acquiring significant real-world experience and building a substantial professional network takes time. I would suggest spending a minimum of four years working full-time for at least two different companies before making the move to freelancing. I had worked at four different companies for a total of nine years before doing so.

Saving money

Saving money is key. Once you start positioning yourself as a freelance developer, it could be a while before you sign your first contract. It usually takes even longer before you can cash-in your first check because of the delay between the moment your start working and when you receive your client’s payment. In this situation, it’s not always easy to relax and focus on training, networking, finding clients or building your portfolio.

I would recommend a buffer of one year: today, the demand for developers is high, and you should find your first contract pretty quickly if your skills are up to date. However, if you find that your offer is not in tune with the market, it could take a while before you get back on track. The amount of money you’ll need to save will depend on your lifestyle. Evaluate your cost of living per month and determine how much you’ll need for a full year. Don’t underestimate your expenses: treating yourself when times are hard and you haven’t signed your first client can prevent you from burning out.

Making contacts

In the beginning, your direct professional network, like former co-workers, will bring you the vast majority of your contract opportunities. Some of them may have started their own business and are looking for a software developer. Their trust and their experience working with you is often as important as your skills. This is very frequent in Montreal’s videogames industry where senior employees often start their own indie game studio, but it also happens in other industries.

People who trust you not only for your technical skills will help you acquire new ones. Someone who had a very pleasant experience working with you will be more inclined to hire you to work on something you don’t master. For instance, if you’re very experienced in C++ programming but have little experience in web development, a trusting former colleague could help you move to web development. This is why your previous work experience is precious: the more people you worked with, the more likely it is that you’ll have someone in your direct professionnal network looking for someone they trust.

I also recommend that you grow your Linkedin network as much as possible while working as an employee. All your contacts will be very helpful when you make the switch to freelancing and you need to spread the good news. One of your old colleague might be starting her own business, or know someone who is.

Other networks can also be very useful to make business connections. Twitter and Coderwall are two good examples. Network with people who share similar technological expertise or interest. Their network will come in handy when it’s time to advertise yourself as a freelance developer.

At this stage, attending meetups and conferences to meet potential clients or fellow freelance developers is not necessary. Because you’re not a freelance developer yet, people will have some difficulties understanding how you’re positionning yourself. Chances are you don’t even know yourself. Even if you were presented with contract opportunites, you would not be able to accept them. At that point your time is best spent nurturing your relationships with your co-workers.

Playing nice with your employer

In the same idea, I strongly advise that you help your employer make your departure as painless as possible. One way to do this would be to give your notice several months before you plan to actually leave, and to be flexible about the deadline. You want to avoid putting them in a difficult position. Usually, there’s no hurry for you to leave, and staying a few weeks or months more than planned can help you save even more money. In the end, if your departure is smooth, senior employees working in your team and starting new businesses that need freelance developers will be more likely to reach out to you.

Choosing your skills

When working in the same permanent position for a while, you’re not always encouraged to adapt your skills to the market. In the context of a big company where technical roles are very separated, being a specialist has a lot of value. The more you know about a few selected subjects the better since your tasks don’t change much. On the other hand, generalist programmers working for small companies have an advantage here: they can choose from a broader set of skills.

In both situations though, you will have to make choices: you can’t be very good at everything._ Moreover, clients hiring you to work as a contractor will want to see immediate results that are correlated to the amount of money they spend. Where employeers hiring you full-time may want to invest in your development, your clients will want to have an immediate return on investment.

I suggest that you don’t put your eggs in the same basket: choose a small set of skills that is well balanced between mainstream technologies and some “niche” ones. By mainstream I mean generic skills like Java, JavaScript (front-end or back-end), databases (SQL and NoSQL), web development, .Net, Python, etc. I recommend that you pick these skills from your previous work experiences: because they are mainstream, the competition is larger than for other skills, and you will need several years of experience to be seen as a good investment by potential clients.

Niche skills, on the other hand, do not necessarily require the same amount of experience because there’s less competition. Lua, graph databases, Chrome extensions development, Kinect programming, video games profiling and optimization are all examples of rare skills. If you’re good at one of them, chances are that potential clients won’t require you to have several years of experience. They won’t be able to find someone with this experience as easily as for mainstream skills.

The type of contracts you’ll get from mainstream and niche skills are usually very different: longer and less paying contracts for mainstream skills, shorter but high paying jobs for niche ones. Having a well balanced set will allow you to alternate between these types of contracts. It will also protect you from technology shifts and rapid changes in demand for a given skills. Also note that a mainstream skill can become niche over time, COBOL programmers could probably tell you a few interesting stories on that.

To me, a well balanced set of skills is composed of two mainstream skills and one niche. Of course, the more the better, but staying up to date on more than three skills can ve very time consuming. My three mainstream skills are back-end web development with Node.js, iOS development annd C++. I also have two niche skills: Lua and advanced debugging of native applications.

Gearing up

To me, a freelancer is like a craftman and a great craftman needs great tools. These come in two categories: hardware and software tools. By definition, hardware is harder to change than software, so I will focus only on the former in this article.

Your clients will need you in their office most of the time. Chances are you’ll also want to work at home sometimes: it’s handy when you have some paperwork to do during the day and need to go around town, but still need to get some work done. You may also want to work for remote clients. Finally, having the freedom to take a day off during the week and work during the week-end when your client’s office is closed is also very nice. In other words, you’ll need a laptop.

It’s not easy to pick a good laptop if you want to leave your options open. You won’t be able to develop iOS apps on something else than Apple hardware.This need to be considered since mobile apps development is a market of choice for freelance developers, and iOS is one of the largest players in this industry. If you don’t focus on just one skill, the choice can become difficult. What if you’d like to be able to work on iOS apps, develop native applications running on Windows and use your Ubuntu setup for web development? In that case, a high-end mac book pro with lots of RAM and a SSD drive will allow you to host all virtual machines you need and run them reasonnably fast.

For those not working on iOS applications, I would suggest that you think twice before buying a PC laptop: unless you don’t want to target clients looking for iOS developers, chances are that these kind of projects will come around and it would be a shame to have to invest in another computer just to be able to work on Apple’s platform.

If you choose to go the Apple way, I invite you to buy a light and small model: a 13 inches macbook pro is ideal to me. At around 4 pounds, it won’t put too much strain on your back when carrying it in a back pack on your way to your client’s office, or to your favorite café. It’s also small enough to fit in small back packs. It has aan ethernet port which is also a must: it can come very handy at offices where they still don’t allow contractors to use their Wifi network.

Don’t be afraid to invest in good hardware, you’ll be able to deduct hardware expenses from your income taxes, and you’ll be able to get the sales tax back. A 13 inches macbook pro with retina display, 8GBs RAM and a 128 GBs SSD drive currently sells for 1699$, taxes not included. If 128 GBs of storage is a little too tight to store all your data, I invite you to think about using an external USB 3 key before opting for the expensive SSD upgrade to 256 GBs. Anyway, for a maximum of 2000 tax deductible dollars, you should be able to get a great tool that makes coding efficient and pleasurable.

Quick paperwork that can save you money

Paperwork can be very frustrating sometimes, but it can also save you a lot of money! One thing that is really easy to setup is registering your sales tax numbers. It provides you with two advantages:

In other words, it can save you lots of money and prevents your clients to wonder if you’re reaully serious about your business.

If you’re a Québec resident, you can do it online and receive your tax numbers almost instantly. Go to the GST/HST and QST section of Revenu Québec’s website and follow the instructions.

Putting your code online

Your code tells a lot about who you are as a programmer. Potential clients will want to see at least a few hundreds lines of your code and you should be able to provide them with it very quickly. The more code you wrote is available publicly the better.

Of course, you can’t publish any code for which you don’t have publishing rights. For instance, you can’t publish code that you wrote as part of a proprietary software’s development effort. This is a good opportunity to start working on personal and open source projects.

GitHub and Bitbucket are two great platforms when it comes to hosting, publishing and contributing to code. They are very similar technically speaking and in terms of basic user features, but their purpose is very different. While GitHub is really a social coding platform, Bitbucket is a business friendly code management service in the cloud.

GitHub allows you to have an unlimited number of collaborators, but you have to pay for private repositories. With Bitbucket, while you can have an unlimited number of repositories (private or public), the different available plans limit the number of people you can collaborate with on a given repository: from 5 collaborators for free to an unlimited number of collaborators for 200$.

Depending on the type of projects you work on, you might need more private repositories, or more collaborators. If you plan to work on open source projects, GitHub is really the platform of choice. On the other hand, if you plan to build proprietary software with a limited number of collaborators, and you need to host your code on the cloud, BitBucket is an excellent solution. Personnally, I use both of them: GitHub when I contribute to open source software, and BitBucket when I work on my personal projects.

Ideally, you should always work on code that you can publish online. At least, you should be able to show it to potential clients, otherwise its value becomes significantly lower.

What you don’t actually need to do right now

It is common for aspiring freelance developers to think that they absolutely need to have everything other businesses usually have before they can start getting contracts. Things like a good looking website or an incorporated company can indeed be very useful for established businesses, but it is not necessary for a freelance programmer who is just starting. Worse, it can even cause large additional costs, both in time and money, at a time when these resources can be very scarce.

Building and maintaining your website will take you time that you won’t be able to spend on getting contracts. In my experience, potential clients don’t really care if you have a good looking website, as long as your code can be found somewhere. For that purpose, there are better solutions than custom websites in the previous section “Putting your code online”.

Incorporating your company will cost you money to register it, but also to unregister it. It can be a lot of money spent for nothing if you realize you need to change your business strategy soon after you started. It will also take much more time in paperwork that you will have to offload to an accountant, which will also cost you money. You can spend at least a few years without incorporating your business by declaring yourself as self-employed person. Unless you make more than 100K$ a year, incorporating your business will not help you in any way.

Next week

This concludes the preparation stage. We covered a lot of ground, so let’s summarize what we learned so far.

To be well prepared for being a successful freelancer, you’ll need to do the following:

On the contrary, you should not do the following:

If you’d like to get much more details about some of the subjects covered in this series, “Le guide du travailleur autonome” written by Jean-Benoît Nadeau is highly recommended. Unfortunately, I own a French edition and I don’t know if an English one is available.

Next week, we’ll present what to do after you left your full-time job and before you sign your first contracts. Until then, you’re invited to share your ideas in the comments section below. To get notified when next articles are available, please subscribe to my blog.

I’m looking forward to counting you in next week!

Julien Gilli 24 September 2013
blog comments powered by Disqus