1. Introduction
Hello there!
If you’re reading this, I assume that: you’re beginning to freelance (or want to) or you’re just looking for some tips in the process itself. Currently, I’m sitting at 6+ years of freelancing, and the intent of this article is to try to guide you through the different learnings I gained throughout those years.
Honestly, I can’t complain about the things I gained throughout those years — I started mostly for the experience (but, I’m not gonna lie that the extra cash always felt great) and I ended up with a bunch of different learnings besides sole experience: From developing a bunch of different ideas to communicating better with customers and even learning things I didn’t had an opportunity to put in practice.
These for me, are the greatest selling points for freelancing.
2. Getting Started: Customers
First of all, we have to learn a little bit about customers. Here, we have 3 important topics to cover:
- Finding and Securing
- Negotiating
- Legal stuff
Finding and Securing Clients
Let’s start by going over the first one: Finding and Securing Clients. This can actually be pretty hard — when I started freelancing I didn’t have a clue on where to actually find a customer, so, I started going into websites like Workana and Fiverr.
Did it work? No. Not only did I never get a client from those types of websites, but, to be honest with you here, that type of website always made me feel that the work I was doing creating software was cheap and disposable. To be fair, there are a bunch of developers out there who actually make money on this, so, maybe, it was only a misfortune on my end.
After that, I started to go through my friends to see if anyone knew someone who was looking for a developer, and in less than 2 days I had my first customer asking for a website, not a direct friend, but a friend of a friend. After finishing the work with this first client, he felt that the work was really good and spread the word — ever since I’ve never been without a freelance gig.
Here’s my first tip for you then: Don’t ignore mouth-to-mouth and organic reach. It’s tremendously powerful and can get you a long way! Ask your network and soon enough, people will start finding you. Don’t have a network? Start to build one (here’s a reference for you to start and you can try those websites while that isn’t ready).
A second tip? Don't necessarily accept your client's idea. They think they'd like an app, but maybe, the person would be better suited with a web application. You're the specialist, use your expertise (or reach out to others to better determine this) what is the best course here.
Negotiating
It finally happened, you found a client and they want software from you! Congrats! Now we jump to the second part which is negotiating. This is a crucial skill for you to gain as a software engineer (if you’d like to learn more, you can find more content about communication here).
Every single deadline you’re going to have is impacted by the capacity of negotiation of yourself and the people above you, in a corporate world.
Usually, when you talk to a client, they want a budget idea from you as quickly as possible — and here’s where things go bad, software time is HARD to estimate, so, if you rush things out here, there are only two possible outcomes: you overbudget it, and the client won’t like it or you underbudget it and you’re going to work for free.
Besides budget, they also want to know dates and time ideas, because they don’t have a clue if their project is going to take a week or a year and the cycle repeats, only two possible outcomes, or you’re going to cut short, having to work way more than intended or you’re going to put too much time for the client to be comfortable with.
Your job here is one: simply calm the heck out of this other anxious person you’re dealing with. They want to know things, and they want to know them fast, you just have to remind them that this is an engineering process and you’ll have to make some refinements before coming to the budgets and dates with precision.
Sometimes, you’ll find some clients that are especially anxious about wanting to know things, here, if you have done some freelancing before, you can try to eyeball a range to make them more calm. If you’ve never made freelancing and you feel that this client is this edge case, ask someone with freelancing experience how much you should charge and they’ll help you out.
Legal Stuff
Here’s a good thing if your customer is acquainted with you in some manner: you’re probably not going to go deep into the legal stuff! But, honestly, at least some contractual idea is generally necessary — everyone is great at demanding stuff, but not everyone is great at paying for the stuff they demand. Haven’t made a contract and your money didn’t arrive? Well, that’s bad — at least you learned something. The funniest implementation of a solution to this problem in my opinion is this one:
It’s important for you to get some sense into your country's regulations for taxes and informal jobs like this too. You don’t have to dig deep initially, but just learn a little bit about how things work and which taxes if any you should pay for.
3. Project Management and Engineering
Now that we've covered the basics of finding clients and handling the business side of freelancing, let's dive into the core of what makes a successful freelance software engineer: effective project management and engineering practices. As a freelancer, you're not just responsible for writing code; you're also in charge of managing the entire project lifecycle. This includes several key aspects:
- Understanding and defining project requirements
- Creating accurate time and cost estimations
- Breaking down projects into manageable tasks
- Using project management tools and methodologies
- Show the progress weekly or recurrently
Usually, while in university, we have a whole 6-month discipline to learn about software engineering processes and how to do precisely that. Don’t have 6 months? Here’s the small version:
- Divide the whole project into a set of major milestones
- Break those milestones into features to make those milestones possible
- Go deep into those features and learn what your client wants
- Try to estimate those features in hours/days of work
- If you have some experienced people nearby, ask them to make revisions in your estimations considering YOUR skill level
PLEASE, plan things out. A recent study found that projects that had requirements clear before development started were 97% more likely to succeed than those that didn’t.
After estimating the features, add some extra time for the chaos of the world, bugs, or revisions. This practice helps manage client expectations and ensures you have room to deliver high-quality work — this is the goal since this is what is going to propel your organic reach.
Remember: it's always better to under-promise and over-deliver. Not the other way around.
4. I made a tool to help: Founders Kit
Throughout the years of freelancing, I tried a bunch of different tools to help me actually organize my process. It took a lot of trial and error only to realize that no tool perfectly fit my needs — in some cases, they were too complex, bringing tons of functionalities that I didn’t use, in others, they didn’t have some essential stuff.
The great part of this is that I’m an engineer! So, throughout the past month, I worked hard to create a solution to help manage the business side of this. It’s called Founders Kit and I’d love it if you could help us on Product Hunt and check it out ;D
5. Conclusion
Hey! You made it to the end. I hope that you have started to realize how freelancing in software engineering can be a rewarding and challenging career path, which can earn you some extra money and grant you some really cool experiences.
By following the guidelines outlined in this guide - from finding and securing clients, to negotiating effectively, managing projects, and utilizing tools like Founders Kit - you'll be well-equipped to start your freelancing journey.
Top comments (85)
Hello, In your opinion, what's the best way to deal with third party costs, for example the hosting costs or storage (S3) with clients, do you charge a monthly fee and take care of it, or do you ask them to create an account and ask for the tokens?
Hey @zeedu_dev! Thanks for the comment and really great questions!
Honestly, my take on this is that these will highly depend on the expected resource consumption of each project. If you receive a project that could take a lot of resources over the long run, I usually prefer to have them create the accounts, since that puts them in control of financial cases. That generally comes with the hassle of asking them for tokens, keys, and all the other things, so, I usually evaluate this really early in the planning stage.
If you're doing a small website, with low resource consumption and/or think the client doesn't have a lot of technical ability, charging a monthly fee or a straight-up one-time payment to cover these costs can work, but make sure to clearly outline the terms in your contract (e.g., what happens if the costs exceed the estimate, when and how you’ll review fees, etc.) -- to be fair, most of the freelance jobs I did to this day never crossed the expected threshold, but, you never know.
I agree with @llxd that it depends on each project. You may want to also take into consideration another aspect - what are you actually selling to your client?
So far I've encountered the following scenarios:
(A) Being a technical expert advising client on solutions.
(B) Developing a one-off solution specific to that client they consider to be theirs.
(C) Developing a solution to a common business problem where client doesn't have a considerably sized budget.
I'm sure others will chime in with other scenarios, but this is just what I can remember from top of my head.
For cases A and B, I normally make sure that everything is in the client's name and control. This allows me to easily walk away when project is done and the client will not be in a position later on where they are held hostage to me and my availability regardless of the actual cost. That includes domain names, SSL certificates, copyright notices, cloud infrastructure, source control, etc. (Plus, domain names and SSL certificates not in your client's name may take away some of the site's credibility.)
For scenario C, sometimes it helps to evaluate whether or not what you're building can turn into some Software-as-a-Service (Saas), fully managed and hosted by you (or your self-owned one man corporation). The infrastructure cost can be spread across multiple future clients and/or you can just convince yourself that your out-of-pocket costs will just be part of your future company's success story. Don't be afraid to dream big!
Hope I at least stretched your imagination!
Perfectly said, @williams-oliver and welcome to dev.to!
Looking forward to read more from you and thanks for the comment!
Holy crap! to be honest I wasn't expecting such detailed and well structured response, it was perfectly written and clear. Thank you so much, I really appreciate the time you took to write it and the knowledge that you're sharing with us here. I send you a huge hug from México!
Hey Lucas, Thank you so much for sharing your perspective and your advice. It's super useful to learn from the different ways of handling things. Lots of takeaways in your reply. Hugs from México!
So nice to hear words from all those different places! Thanks a lot for the comments and feel free to leave any other questions you have! Hugs from Brazil! 🚀
Good article ...
While I agree that Fiverr and the like are probably cr*p, I think there's still potential in more "serious" platforms like Upwork or (a lesser known one which I've come across) Gun.io (don't let the funny name fool you, it has nothing to do with weapons).
As always "it depends", and while I agree that finding customers "all by yourself" (not via a platform) is generally the best and nicest way, it might not always be feasible, or it might just take too much time (been there, done that) - these platforms were built for a reason ...
The only time i tried Upwork. I took some time to answer throughly to the potential client and in the end, a couple hours later there was between 20 and 50 other applications so it is really demotivating. I don't feel like giving the time people deserve for nothing in the end.
Never heard about gun.io, will have a look who knows 👀
Yeah the number of applications on a given job is generally insane, I agree that that's really demotivating - I think that's ALSO a problem for the people who are hiring - who wants to wade through 50-plus applications? I think that's a problem which Upwork should look at - maybe they should cap the number of applications at 20 or 30 or something, I mean, 50 doesn't make sense ...
And those applications can't all be brilliant, on the contrary - I'm seeing a lot of run-of-the mill, low-quality, copy and paste stuff out there ... I think that's where you can make a difference when you're really good, or better than average - try to stand out from the crowd, by presenting yourself in a way that projects a bit more "quality" ... there are also tools which Upwork offers which you can use in order to make yourself "stand out".
What I do like about Upwork is that their platform is very mature and polished - their website and app are excellent, it's a joy to use.
But generally it just requires determination (and a modicum of luck) to "hit the jackpot".
P.S. Gun.io aims more at the high end of the market, and it's way less "massive" in terms of number of jobs and applicants - you might like it better ...
Awesome comment, @leob!
BTW, 100% agreed that there is a TON of copy and paste/generic problem solvers out there and it's a super valid space for good devs to make a difference! Nice one!
Thanks! Yes, copy/paste "heroes" and "cowboy coders" aplenty, but an area where I think you can really make a difference as a dev is communication - asking the right questions, getting to the bottom of the issues, solving the "right" problems ... that's always where I felt you can stand out from the crowd.
Hey @leob! Thanks a lot for that comment!
Personally, I've never heard of those two you mentioned -- to be fair, I lost most of my interest in those platforms after my bad experience with Fiverr, but, I'll be sure to put that on the list to give a check!
And totally agree, these platforms were built for a reason and you never know when you're going to need them hahah, so, I'll surely keep them on my radar! Thanks a lot for that resource 🚀
Thanks! ... well, Gun.io is a platform which probably virtually nobody has ever heard of (I'm exaggerating a bit ... but only a little bit), but Upwork is, well, it's like the "500 pound gorilla" in the "freelancing platforms space" :)
But ultimately they're just "tools", they're a means to an end - for me it worked, but that doesn't prove anything, I think there was also a huge amount of luck involved - "being in the right place at the right time" ;-)
Keep up the good work. Love when these topics come to the forefront on Dev.
Thanks for the kind words @martinbaun! 🚀
Hello, I actually wanted to ask like suppose once we have created and given the software (or any product that we were working on) to the client and also received money from them. So basically our work is done here but you know if we create any software then it also need maintainance and database management etc. and this will be forever till that software exists. Now our work was to just deliver the product or the software the client asked for but if the client asks how to manage it further or asks us only to also manage it for long then what should we do in these both cases? Even if we just explain the client everything needs to be done in order to manage that software, the client still does not have a proper knowledge of it and maybe he/she will not be able to manage it properly and if they'll not manage it, the software will automatically start to throw any bugs or errors and they'll blame us for that. Now if the other option occurs that the client wants us to take care of that software further also for the long run but obviously we can't do that. So how can we handle such situations? How will that software and its database will be managed throughout its lifecycle? And what exactly should we tell the client to do in such situations? (Considering that there's only one person and not a team of many people who owns that business for which they asked us to make the software.)
Hey @srish! Really well written and good question! Let me give you an overview of my process in terms of maintenance and work after being done:
In terms of maintenance per se, if we promised we were going to deliver something in the engineering planning phase, we have to do it. So, bugs and unexpected behaviors are on our end -- I fix and don't charge anything for it.
Now, sometimes, our clients try to disguise small improvements as bugs -- and those are different things. I usually have a rule of thumb of not charging up to 3 small improvements -- just so we can have a great partnership and the client usually will remember that good faith. If the clients ask a BUNCH of improvements that adds up to some hours of work, than, I think you should charge additionally. After all, those things were not prototyped nor planned, so, adding them at a later stage will impact your costs.
That's my usual way of dealing with maintenance and new requests of features disguised as maintenance.
In terms of database usage and infrastructure, I usually try to eyeball the usage/consumption of services by talking to the client and seeing their expectations -- if they are searching for a freelance to create a platform that will have to deal with thousands of customers, you can't put infrastructure costs on your end, but, if you're dealing with a small project, that might be viable.
And lastly, in terms of how to talk with your clients, it's important to remember that they are non-technical people usually, so, try to abstract most of the complexity when talking to them, showing only the high-level overview and the costs each part requires. Here's a quick example:
Instead of saying "It's expected that your customers will use an average of 25 GBs of S3 Storage, and increase the overall CPU usage, so, we are going to need to scale your servers to other EC2 instance ..."
A better way to approach that would be: "Hey, it seems users are sending a lot of big files on our end and it might increase our costs by 20%. Would you prefer that we limit the file size or include that monthly cost (about 50 USD) into your package?"
That's my way of doing things! Feel free to ask more questions and hopefully I answered your topic as you intended hahaha
Thanks and see you around ;)
Thanks for the answers, Lucas.. :)
Hello! Thanks for the great article! I’ve always wanted to do freelance work where I would write a custom solution, but where I get discouraged and eventually stop is the design. I can look at a Figma design and code that solution no problem, but I can’t design a website from nothing because I just don’t have that design-oriented mind. Do you have any advice on how to get over this? I imagine lots of customers will come to you with no idea of what the end solution will look like and are looking at you for creating something that looks really good.
Hey @clink50! Thanks for the comment!
And yes, a lot of customers are going to come to you with 0 design related stuff. For me, that's not such a big of a problem because I do have a degree in graphic design, but I can try to give a quick summary (and maybe even a future more in-depth article) about the process I go through.
When I was designing my first few solutions, two problems were the most impactful and recurrent:
So, the thing I'm going to say from now on, are my personal takes on how you can solve those two impactful problems. If they're not the cause feel free to elucidate more!
For the first one, lack of inspiration for me is usually solved by a few things:
For the second one, you can use the way to learn things you have acquired with programming to learn other stuff too! So go YouTube, forums, etc -- you know how to search for things, that's our specialty. If you don't have a structured guide on that, feel free to check this article I wrote about self-learning.
Here are other sites for inspiration i found useful
behance & figma community
Nice read, Lucas
I like how you structured the article, including things that no one talks about: legal stuff.
But I have a question:
Is there demand for custom code websites? If yes, how do find the people that need them?
I ask because, a majority of the most successful freelancer web developers are WordPress or Shopify developers.
Thanks again.
Chidera
Hey @chideracode! Glad to have you here and great question!
To be fair with you, there is going to be a hude demand for solutions in which WordPress and Shopify are going to fit for possible scenarios.
But, in the real life, your customer generally will want just that, a solution -- not a specific technology for that solution. So, if they want a blog, of course, you can use WordPress and solve that problem easily, but, you can also do some pretty cool designs on Figma, make that into React code and add Strapi as CMS -- they're both equally fitting solutions, with the added benefit that the later one is way more unique than the other.
So, yes, there's a lot of demand for custom stuff, and me personally, I've had a few clients that even demanded for me not to use WordPress because of X or Y problem they had in the past with that solution.
Glad to have you here and hope I adressed you question ;)
Thanks for your detailed response, Lucas.
And clients that need custom code websites often tend to be the ones that pay top dollar, right?
You're welcome, @chideracode!
And although this is not always necessarily true, generally, when you offer a custom solution, clients are more willing to spend more! This is a great analogy on that too, if you'd like more on that.
Thanks a lot and see you around ;)
Que conteúdo maravilhoso! Parabéns!
Eu tenho muita vontade de começar no trabalho freelance mas sou extremamente inseguro com minhas habilidades. Vc tem mais dicas a respeito?
Talvez seja uma boa ideia pra um futuro post, a base técnica necessária para começar bem como freelancer. Adoraria ler sobre isso na sua escrita direto ao ponto bem voltada a prática.
Falaa Diego! Pô, super feliz de ver um brasileiro aqui e muitoo obrigado pelos elogios ;)
Te dando um overview do meu caso, freelance foi a minha primeira experiência com programação real, sem ser projeto de aprendizado e foi essencial pra minhas contratações no futuro.
Na minha visão aqui, o que me ajudou muito a perder parte dessa insegurança no início foi ter algum dev experiente pra me ajudar nas etapas do freela -- então, quando eu orçava, ela revia os valores e me questionava quanto à porque em alguns casos, mesma coisa pra código e outros aspectos.
Isso fez com que eu sempre tivesse a segurança de que, se eu explodisse tudo sem querer, essa dev ia conseguir tocar o freela e entregar, sem deixar o cliente na mão. Nunca aconteceu, entretanto, e no final do primeiro freela, eu descobri que já estava em um nível legal de desenvolvedor sem saber.
Então acho que é isso, se você está bem no começo da jornada, vale chamar algum dev mais experiente pra te ajudar e resolver em conjunto -- além disso, é um networking excelente.
Se você já não está no super começo e quer tentar se aventurar sozinho, manda bala! A grande característica dos desenvolvedores é resolver o problema e no final, seu cliente não vai ligar se seu código tiver gambiarras pra funcionar.
Cara, ontem indo trabalhar fui ao seu perfil achar mais coisa para ler e acabei no “Creating a personal brand: How to sell yourself as a developer” no primeiro parágrafo percebi que já tinha lido o texto na semana passada e até favoritado no Chrome, é que naquele momento não percebi que vc era brasileiro, curti mto como vc consegue imprimir sua personalidade mesmo em inglês.
Quanto aos freelas. Boto muita fé que consigo fazer uns projetos legais, mas tenho esse receio em dar o primeiro passo, estou cursando ADS na Fatec SP(estou tendo meu primeiro semestre de Engenharia de software e me identifiquei muito com esse tópico no texto kk), acredito que a exp dos freelas me destacaria para as vaguinhas de Jr. e ainda me garantiria uma renda extra.
Planejo ler seus posts novamente, e pesquisar mais a respeito. Vou estabelecer a meta de me preparar para isso até o final do semestre. Tenho em mente alguns projetos que posso executar como voluntário para ganhar confiança.
Continue com seu trabalho! Está ótimo! Muito obrigado pelo seu tempo.
Boa demais, mano! Super feliz que meus textos tenham te impactado positivamente e te inspirado num geral 🚀
Com certeza estabelecer metas pra isso parece ser um ótimo caminho! Espero que você adore o curso de Engenharia de Software hahaha, foi uma das disciplinas que mais me motivou a produzir software profissionalmente -- abraços ao professor Alexandre Cardoso, por isso🫂
E sobre os freelas, com certeza vão te dar uma experiência bem valiosa pra vagas! Tem uma diferença enorme entre falar pra um recrutador que você já fez algum curso XYZ sobre desenvolvimento vs. criar uma solução pra um cliente real. O segundo realmente traz um peso muito maior ao teu conhecimento e é super visto com bons olhos!
Valeu demais pelos elogios e vamos nessa! 🚀
Good top level advice. It is handy to have a standard, very short agreement template with a separate exhibit for client specifics. For each section of the template, have a separate, canned, simple explanation as to why it is necessary AND how it protects the client. Being able to say “hey, this is me looking out for you” gives a very good impression.
Thanks a lot for the comment, @lynnfredricks!
And as I mentioned, couldn't agree more, transmitting that confidence and security feeling really sells the impression that you're an expert, awesome tip!
Thriving Technologist YouTuber suggested The Scrum Guidebook before one of my first freelancing projects and it helped tremendously. Organizing your self and the skills you use in a log to leave with the company was another thing I did as a professional courtesy. Really stand by your guns and be secure in the role as independent. I recommend keeping the freelancing roles hush to remain independent as a developer for as far as possible. Obviously citing ethics standard rule to enjoy!
I enjoyed your post, informative and concise!
Thank you!
Awesome comment, @bmetsmith!
That part you mentioned to leave a log of the skills and tech used really resonated with me and it's surely an awesome practice! I usually do that as well, but forgot to mention.
And great reference there too, Scrum Guidebook seems like a great read, although, I haven't read that myself.
Thanks for the comment and see you around!
Hi @llxd , thanks for the comprehensive article. Can you share your insight on how to manage project budget ? Since this sometimes take times like 3 to 6 months, how you put into legal when can you received your payments?
Second, if you have to include some additional manpower, say you need 1 Frontend developer to help as well, how you calculate the budget?
Thanks
Hey @yosh_tandiary_4a80cac52c7! Thanks for the comment and excellent questions!
So, for the first part, I've usually did 50/50 -- 50% of the value is paid upfront, to cover initial development costs and to guarantee that, if the person doesn't pay you the rest and everything goes wrong, you received at least 50% of the agreed value. The other 50%, is paid at the end, when the solution is delivered. This can be sometimes a little agressive for really big budget freelances, since 50% of a lot is a lot, but, you can break down the percentages in more payments to help on that as needed.
For the second part, it's important that you plan features and time estimations together. The usual way I do that is: I estimate the time needed for each task and then I send the spreadsheet of estimations to the other developer, who is going to fill out their part of the work in terms of time.
After you receive it back, give it a quick look to see if the person did not overestimate or underestimated something (they can do that as well), sum the time, put your hourly rate in, and you're good to go.
For dividing stuff up, I've usually did 50/50 too, since the values of front-end and back-end stuff generally turn out to be close. But, in case that doesn't happen, you can pay accordingly to the percentage of the total value and that's perfect as well.
Some comments may only be visible to logged-in visitors. Sign in to view all comments.