As a freelance developer you are hired to deliver results. These results will, of course, in part be measured in the code that you write. But more so than full time employees, your success as a freelance developer depends on a lot more than your written code.
When starting out as a software developer you were probably surprised about how much time was spent doing other things than writing actual code. Depending on how mature and streamlined the company was, you may spend a lot of time in meetings. You probably spent a lot of time as semi-business analyst, hunting specs and figuring out the right solution. You may have spent a lot of time setting up environments, taking care of a support phone or talking to users. Or explaining to business that the feature was implemented exactly as specified so if it does not work as intended, then the specification was wrong.
These task are all part of the job as a software developer and your performance will be measured up against all of them, but most of all you will be measured up against the code you write. If you write good code, then you will be given some slack on other areas of the job. There will most likely be other people in your team that are stronger in other areas and the sum of your team makes up the smooth running machine.
But when we start to talk about freelancing/consulting then this gets somewhat turned on its head. You will of course still be expected and required to write excellent code, but your performance will be measured against a lot of other factors than just your written code.
When working as a freelance developer you are not only measured by your developer skills you are measured by the problems you solve and the value you give.
There is this old saying about freelancers/consultants that if you deliver on two of the three below then you will be considered successful/be re-hired:
- Deliver on time
- Deliver high quality
- Be likeable
If you deliver on time and the work is high quality, then you can be a jerk and still keep your job/be extended. If you deliver on time and are likeable, then you can get excused for not delivering the highest of quality. And if your work is high quality and you are likeable then you can get away with not delivering on time.
This is of course just a fun anecdote and you should of course aim for all three - but it does somewhat elegantly segway into a point I would like to make: As freelancer/consultant developer you are measured by more than the code you write.
I have met a lot of freelancers that was frustrated by the lack of actual coding that they had to do in projects. That they received tasks that were no more than an outline of what the final product would look like. This can of course be frustrating. Especially if all you want to do is write code.
But if you want to be really successful as a freelancer/consultant, then you have to shift your mindset from being a “coder/developer” to being a well communicating “problem solver”. The company wants to have a new feature implemented. Perhaps in an optimal world you as the developer would only get the task once it has been analyzed, fully specified and broken down. But take responsibility. Own the full task and solve the problem - not just the coding.
You should of course still be exceptionally good coder. But even being one of the best does not necessarily guarantee success. The breath of tasks you will run into and the expectations presented means that you need more tools in your toolbox than just coding.
I have seen over and over again that employers expect more from freelancers than their full time employees. And they should. Freelancers are expected to come in and be efficient in solving problems almost from day one. And efficiency in solving problems, is a lot more than just good code.
In order to be a really good freelancer you should be really good at communicating. Communicating about your progress, about your potential lack of progress and why. Be very upfront about issues you run into that may delay your progress or others. Speak up when you see potential problems coming up for you or others and present it in a way that does not put blame on anyone. But in a way that solves a problem and gives value. You can even help with meta-communication if you experience that business is having problems communicating with developers or you see people talk past each others. Help to develop a common dictionary that enhances communication.
Be ready to offer your advice on everything from development schedule over test-plan to release procedures. When you have experience as freelance developer from a lot of different projects, then you will have been exposed to a lot of different ways of doing things. You should not be dogmatic about what solutions to use or think that you know everything. A solution that on the surface looks inefficient may be the best solution in a specific setup because of security-requirements, company policies or even because of that solution better matches the skill set of the full time employees.
Offer your advice and ask non-judgemental questions. In some cases you may even be better off waiting a bit with your questions until you are 1 on 1 with the Lead developer or architect which may be defensive if you speak up in front of all others, but are more open to talk about it 1 on 1. Use your intuition and common sense. You are not there to be an all knowing oracle. You are there to solve problems and create value for the project/company. You have come in for a short ride on their longer journey and you will be gone again. Do not try to change everything, but leave them a little better than when you arrived.
All of the above may sound like that you cannot start out as a freelancer at all since you would need experience as freelancer to be successful at all. But that of course is not true - then no one could ever start. But I do think that you will benefit immensely from having a few years of experience as a fulltime employee before striking out as freelancer.
Not to say that you absolutely need it. You may be able to find work without it. But in my opinion around 3-5 years of experience will really boost your chances and make you seem more ”credible” as freelancer. Because as said earlier, most companies does expect more from freelancers than full time employees. So they would rather have someone with experience and exposure to different types of problems than someone totally “green”.
You may disagree with what I have written above and make the counter-point saying that if you are a superstar coder than your communication-skills will not matter as your work will do the talking. In some niche-cases I may tend to at least somewhat agree. If you solve problems that no one else can, then you can be a total jerk and lack all almost all means of communication and still get hired for astronomical amounts. But if there is someone else even 80% as good but with superior communication skills then I am convinced that in 9 out of 10 cases the good communicator would get the job.
Working as a developer has a lot to do with writing code of course. But you are also a part of a team and a company and hence interact with people. Coding is abstract and can be hard to really measure so trust plays a huge part in the relationship between employer and employee so strong communication skills will always win. In the end it is still human relations. And we do need to favor people we like.