Many developers dream of becoming a freelancer. The promise of freedom to work whenever, wherever, and on what you want as well as lucrative rates sounds awesome. Working with your laptop at the beach below palm trees on an exciting project. 🌞 💻 🌴 What a life!
But once you start thinking about it, it doesn't appear that simple anymore. What if it's going to be super stressful? What if you don't find clients or they don't pay you? What if you underestimate the effort and the great-looking rates are in fact closer to minimum wage?
I worked as a freelancer and in theory, I had a lot of freedom. But the pressure of estimating a project's scope and effort was tough. Being the person responsible for meeting a deadline was stressful. And client acquisition and communication were a big and unfavored part of my life.
At one point I discovered an alternative though. I became a contractor. It wasn't a conscious step. I wasn't even aware that there was a difference.
But after some time I realized there were great advantages to it. A lot less stress with a good degree of freedom, the possibility to work in awesome teams, and great pay.
This article was written from my own experience as a contractor working in Germany. There might be differences but all in all, I read similar stories from contractors in other countries.
Note: Some folks mentioned that being a contractor in the US is different from what I describe here. So if you're from there please take this article with a grain of salt and have a look at the comments. Especially Europeans have confirmed my experiences though.
Additionally, the lines between freelancers and contractors can be blurry. So before we have a look at the differences between freelancers, employees, and contractors, let me define what I mean by "freelancer" to avoid confusion.
As a freelancer, you independently work on projects on your own premises and at a location of your choice. You may work for several clients on various projects at the same time. You're mostly paid on a per-project basis.
You're very free and flexible. Within the borders of what you agreed upon with your clients, you can work whenever and wherever you want. You have the freedom to accept or decline projects. You can request high rates depending on your technical and negotiation skills. You're mostly working alone or in smaller teams of other freelancers.
You have to handle the client acquisition, estimate the effort to implement a project or task, negotiate rates, scope, and deadlines.
If you're good at negotiating and can implement the project in the estimated time or faster you can earn good money. But you may need to work crazy hours when your estimations aren't accurate. You may have times without clients and thus without income. When you're sick you don't get paid.
Since you're self-employed there's usually some bureaucratic overhead: you need to take care of your health insurance and retirement plan. Probably the scariest part: You need to file taxes.
Contractors are located somewhere in between employees and freelancers. They have more freedom than employees but more security than freelancers.
As a contractor, you're self-employed and work for clients for a relatively short time similar to a freelancer. The big difference is that you're typically booked full-time for a single project for a couple of months up to a year. You're not paid to complete a project but you rather take part in the normal development processes for a certain time and send monthly invoices billing the hours or days you worked.
Another big difference is that you typically work in the office of your client within a team of employed software developers. You're part of the normal office life like going to lunch together with the rest of the team. You take part in meetings, planning sessions, and sprints. You're basically working like any other employee.
There are also cases where contractors are separated from employees. Sometimes contractors are kept out of company internals. But in my experience employers tend to include them in the team.
Contractors often are hired as firefighter, workhorse, or consultant. A project might approach a deadline and someone is needed to put out all the fires. A team might need more workforce for a certain period. Sometimes you're there to fill knowledge gaps or to bring in specialized skills to architect solutions.
Compared to a freelancer a contractor is less free. You often have to work on-site and comply more or less to the office hours of the client.
Being able to invoice the time you worked and being a normal team member has great advantages though.
From a financial perspective a contractor has more security. Knowing your rate and the time you're booked for you can easily estimate the expected monthly income for a relatively long time. Since you're paid by the hour you also don't have to worry about inaccurate estimations, a project growing in scope, or misunderstandings in the communication with the client that will eventually negatively impact your hourly rate.
Since you're not the only person responsible for meeting a deadline being a contractor is less stressful. Especially once you got used to the project and the team. You have more time for planning, writing, and testing code.
Working on a team where developers often review each other's code means that the quality of your code needs to be high. But this also means that you have lots of opportunities to learn from others.
Compared to an employee, you enjoy more freedom regarding spontaneous absences or vacation planning. It's mostly expected to announce those in a reasonable time upfront though.
It's harder to grow into lead positions since you don't have the opportunity to slowly climb the career ladder inside a company. At the same time, you learn a lot. You see many different styles of writing code, organizing projects, and leadership. If you have good social skills you can quickly build a network and become a lead in another company.
Switching projects and teams frequently can be exhausting. You regularly have to dig into a new codebase. You often don't see the impact that your code has and how it develops over time. As soon as you got used to a team and maybe made some friends you have to leave again.
From a financial perspective, being a contractor has great advantages compared to being an employee. From my experience you can earn 2 - 3 times what an employee earns. Combined with the added freedom you can decide to build up savings, work for 6 months and take 6 months vacation, or build something on the side.
From a bureaucratic perspective, a contractor is self-employed. So you don't have the benefits of an employee and have to take care of health insurance, retirement plan, or filing taxes yourself. You're basically in the same situation as a freelancer. You take the risk of not getting paid when you're sick. Usually, it's also much easier to let go of a contractor than an employee.
Note: Because of the missing benefits compared to an employee it can be tricky to estimate the real financial advantage of being a contractor. Let's say it's considerable.
Regarding taxes: It's highly recommended to hire an accountant. They are not cheap but definitely worth the money. Often they will save you more than they cost. And you'll have a lot less headache when it comes to taxes and always someone to go to when you have a problem.
If you're interested in having more freedom and earning more money than an employee but still enjoying more security than a freelancer, consider becoming a contractor.
Be aware that you need to be on top of your skillset. You won't have a lot of time for onboarding when you join a project. But you can learn a lot from changing codebases and teams often.
If you'd like more information about how to become a contractor and how to find jobs make sure to click the link above. You'll receive a free roadmap to becoming a contractor. I'll also write more blog posts about becoming a contractor and notify you once they're out.