7 Freelancing lessons learnt the hard way
Tags: webdev, career, experience, freelance
Published: 2020-12-18 17:05:47

In 2015 after getting the hang of some HTML/CSS/JS and Angular JS, I thought I'd try my hand at freelancing. Most of the work was building out templates/wordpress and maybe a single-page app.

Here are some lessons I've learnt... the hard way.

# 7 Freelancing Lessons

1. [Dealing with inexperience](#dealing-with-inexperience)
2. [Pricing](#pricing)
3. [Estimation](#estimation)
4. [Counting Costs](#counting-costs)
5. [Payments](#payments)
6. [Code Ownership](#code-ownership)
7. [Professionalism](#professionalism)

## Dealing with inexperience 👶🏽
If you are just starting off just keep in mind there will be many things you will have to probably learn on the job. While some research is acceptable you don’t want people paying you for more hours because of inexperience. It also helps to be transparent with the client that there will be some research and experimentation involved and it will impact the timeline.

## Pricing 💲
The typical approach for many newcomers is a time estimate and hourly rate. However, the problem is that it’s hard to do estimation if haven’t done many real projects before. We often forget to factor in time for activities like; design, research, testing, troubleshooting, making changes from feedback and production deployment. 

## Estimation ⏳
Aim to be accurate vs precise ie give a range like 8–10 weeks. If you need to give a hard date then it should be the last day of the last week in your estimation which is your ***worst-case scenario***. If the client really needs it sooner for a project that is new to you then the ***job is not for you***. While it may be hard to turn down a job your well being and reputation is important to for landing future opportunities.  

Within that timeline think about how many hours it’ll take to accomplish the task then multiply by your rate which can start around ~20usd/hr. Now if you think the time required puts the price under what you think is worth your time then you can just charge that amount as a flat fee instead. Your number of estimated hours should fit within the timeline with a gracious amount of breathing room so you are not working 24/7 and can cater for time delays from unforeseen circumstances.

## Counting Costs 🧾
Think about all resources you require and services you plan to offer. Remember wifi, work conditions, food, developer/tool licences, hosting & domains all cost money. Are you going to provide support through development? Are you willing to go back and forth with the client for feedback? What days and hours of the day are you making yourself available for that and how will it affect the timeline? After that initial payment and launch, will you go into yearly maintenance and support agreement? Who will pay hosting fees and renew the domain?

## Payments 💵
After figuring out what services you will be offering, it's important to agree with the client how and when payments will be made. This should be done **before any work is done**. Depending on the client you may find out that you are not an eligible vendor. Maybe you need to be a registered business or perhaps you don't support their payment methods or other legal restrictions.

If you can work with the client, you should decide on a payment schedule. How much should they pay upfront? What's your cancellation or refund policy?   

## Code Ownership 👩🏻‍⚖️
Additionally, ensure you agree with the client on who owns the code and/or assets. For applications, you probably want to reuse some code as a template for other projects so the client should be informed of this. Lookup [software license agreement templates](https://www.legalnature.com/guides/the-basics-of-software-license-agreements) to issue licenses for larger scoped projects.

# Professionalism 💼
It is important that you value your client's time, don't be late for meetings. Always be courteous and polite. Be reachable and communicate often to manage expectations. Communicate delays, or extensions **early**. Saying yes is a commitment and sometimes saying no takes courage.
 
Use [invoice generators](https://invoice-generator.com/#/1) to issue invoices to clients and keep track of their payments. Use tools like [trello](https://trello.com) to make a [kanban](https://www.projectmanager.com/kanban) board that breaks up work into tasks for better management. You can also reference these tasks on invoices. Setup a project plan to schedule milestones and when you will meet with the client for gathering requirements, demos and feedback. As you mature, invest in [DevOps](https://www.youtube.com/watch?v=_I94-tJlovg) to build more reliably.

# Conclusion

This came out much longer than I expected but if I have saved someone from getting burned then it would have been worthwhile. The prospect of freelancing may seem overwhelming but you can definitely start off small and lean on your helpful community for guidance and support. Can you relate to these lessons or have any you'd like to share?