Going Freelance as a Software Engineer — Some Advice

Alex Suzuki
Classy Code Blog
Published in
7 min readFeb 5, 2019

--

So you’re fed up with your job, or just up for something new, and thinking about going freelance? Then this post is for you.

Random stock art depicting the glory of freelancing

I have been working as a Software Engineer in Switzerland for more than 10 years, as an employee in multiple mid-sized software shops, as a freelancer, and now as part of a company that I’m building together with others.

This is a non-technical post that attempts to summarize some of the key learnings I had after I quit my job and decided to go freelance.

Questions to Ask Yourself Before You Commit

So you are thinking about going freelance. It’s a great idea, but you should ask yourself some things first:

  • Am I the type of person that gets nervous if there is no influx of money for a couple of months (a dry spell)? Do I have some money on the side to cover this?
  • Am I a communicative person, am I comfortable talking to customers? These are people you do not know and maybe in some cases do not like.
  • Am I confident enough to promote myself and convince customers to work with me?
  • Am I willing and organized enough to do administrative tasks such as accounting, invoicing, insurances, taxes etc.? You can outsource some of this work, but you will still be confronted with it on a regular basis. Especially in the beginning you should do some or all of it yourself to keep your costs down.
  • Do I have a list of potential customers I would approach initially?

If you’ve answered all those questions with ‘yes’, then you should be fine.

Timing Your Entry

Timing can be a very important factor. There are always things that are out of your control, but maybe you should think twice about leaving your stable but not completely fulfilling job if you just took out a mortgage for a house, or if you are a young parent.

When I decided to go freelance, I was in a stable personal and financial situation. My monthly expenses were low. I did not have children yet. I was employed and working on a project writing software for an industrial device running Android. Since I was a key player in the project, I was fairly certain that the customer would want to keep me on board as a contractor. They did, and as it turned out, I didn’t need to look for any work for the first six months.

Are you in a rush? Hopefully not. Going freelance is an important decision and can shape the next years of your life, so be smart about it, and set yourself up for success. Read up on stuff that you need to know before you can start working, e.g. the specifics of setting up a company in your country of residence.

Acquiring Your First Customers

So let’s pretend you’ve quit your job, did all the administrative groundwork and are now ready to do amazing work for your future customers. How do you find them?

As software engineers are in high demand in many parts of the world, you should be able to find work. Before worrying about a fancy website, doing SEO and spending on Google AdWords, you should look to your immediate surroundings. It is tremendously useful if the people you are going to do business with already know who you are.

In my experience, nothing beats a network of real-life industry contacts. Be aware that this is something you will most likely not have early in your career. I’ve met many different people during my first couple of years as an employee, some of them customers, most of them fellow co-workers. They went on to work for other companies, or built even their own, and we kept in touch. Many of them are now in management-level positions — potential customers and door-openers.

When building a network, it helps if you are a sociable person and open to meeting and engaging with new people. I’ve always enjoyed this part, but it’s become increasingly challenging when other responsibilities started piling up, like children. Hopefully at this point you have established a network of contacts and a collection of happy repeat customers, so you don’t need to worry about building a network anymore.

Your First Projects

So you have your first customers lined up and they are offering you contracts and projects. What kinds of work can you expect?

Temporarily Joining an Existing Team as an External Contractor

This is also known as “body leasing” and initially sounded very off-putting to me. The very term has negative connotations. But it turns out that this kind of arrangement can be really useful, especially in the beginning:

  • It generates a steady income. You usually get paid for every hour you put in.
  • It is mostly risk-free. There is usually not a specific deliverable for which you have to take responsibility.
  • You meet a lot of new people. Remember what I said about how to acquire customers? Leave a good impression and they might come back.
  • You get to experience a completely different environment, with different technologies. Learn new things — you even get paid for it.
  • When you’re done, you’re done. At the end of the contract, you are usually out of the loop. You can move on and do not have to carry baggage with you.

I did a considerable amount of body leasing at the beginning of my freelance career, mostly 3 to 6 month stints. It was a great way to build a customer base, get to know a lot of people, and to broaden my tech skills.

One thing I would strongly recommend when you’re joining an existing team or project is “When in Rome, be a Roman”. Software engineers tend to have strong opinions on work matters. They may differ on small things such as code style but may also be at odds on larger matters, such as architectural patterns, or how to structure a large project.

As a freelancer, when writing code, you should stick to the dominant style of the project. It enhances consistency and more importantly (for you), it will earn you the respect of your peers. This in turn will make it far more likely that those people will want to work with you in the future. Getting out of your comfort zone and doing things “their way” may require some effort on your behalf, but it’s worth it.

I’m not saying you should not challenge existing work and blindly emulate your predecessors’ style — you should do that, but in a professional manner: with solid arguments and politeness. Before you do so, however, you should ask yourself: what do I gain from it? Act smart.

Writing Custom Software for a Client

This is more rewarding from an engineering perspective, especially if you can build something from scratch. Usually the client does not care much about the technology you will use, so you are often free to choose the tools and technologies you like to work with.

Sometimes with more tech-savvy clients, there is a preference on the client’s side regarding the technology, for instance if they have in-house people who will eventually maintain the software you build. You should respect that, it will make your proposition more attractive to them — and you might be able to charge more for it!.

The main difference is that you are now potentially responsible for a lot more things besides implementation:

  • Extracting business requirements from stakeholders that you can turn into actual software: most customers do not have a specification ready.
  • Planning: you need to estimate tasks and propose a timeline.
  • Procurement: you might have to submit a comprehensive tender and negotiate with the customer’s procurement division.
  • Maintenance: some customers might want you to commit to long-term maintenance and support.
  • … and many more!

Note that you usually can not charge anything for most of these things.

How Much to Charge — Effort vs. Value

As engineers, when we estimate how much something should cost, we usually think about the effort required, in terms of hours or days, multiplied by some rate negotiated with the customer. As an employee, this is the number you would report to your manager when asked for an estimate.

When you’re going freelance, you’re in charge of both estimating the effort required (which affects your planning) and setting the amount you charge the customer (which affects your financials).

Writing software can not be compared to say, painting a wall. An experienced engineer, familiar with the problem domain and the technologies involved in a project, can easily complete a task three or four times faster than someone with less experience. But can you charge three or four times the normal rate for your work? Doubtful — it would look like you’re trying to rip the customer off.

If you charge by the hour, you effectively nullify any advantages in speed and intuition you gained by years of experience. Someone less qualified, or less experienced, will bill more than you, and possibly deliver an inferior result.

Whenever possible, try to estimate the value of your contribution for the customer, and charge a fixed price that reflects that value. This is obviously not an exact science, but gets easier with experience and with increasing knowledge of the customer. Also it is often simply not possible, because the customer can not define a work package that you can accurately estimate. In that case, it is safer to offer an hourly rate, but don’t sell yourself short!

Estimating Customer Value

Some things that might not be immediately obvious to you, but might matter a lot to the customer, and which affect what you can charge, are:

  • Prior experience with the customer — although be aware that is hard to increase rates once you have negotiated one with the customer.
  • Showing an understanding of the customer’s business domain
  • Speaking the same language as the customer
  • Cultural and geographical proximity
  • Ability to start working right away (often customers will turn to freelancers when they have no other choice)
  • Willingness to commit to a long-term relationship

As always, there is an intangible human component. Customers are more likely to consider you if they feel that there is good chemistry between you. Whenever possible, try meeting physically to establish rapport, and favor phone calls over emails.

Conclusion

Going freelance as a software engineer is a challenging but ultimately very rewarding experience. I hope I was able to outline some of the key challenges involved and how you might be able to master them.

Please comment below, especially if you are self-employed — I’m very interested in your own experience!

--

--

Solo entrepreneur at Pixelverse LLC. Author of STRICH SDK. Formerly founder at Classy Code LLC.