Introduction
As of the 27th September 2022, I've officially been freelancing full-time for an entire year!
For me, this feels like a huge achievement and something that I didn't expect to reach.
Recently, I've had several people ask me on LinkedIn and Twitter what it's been like over the past year. So I thought I'd put a blog post together talking about how I got into freelancing, what my typical day-to-day is like, where I find my clients, and the pros and cons. Of course, I've only been doing this full-time for a year, so I'm still very new to it all, so please take everything I say with a pinch of salt. This article is purely just discussing my journey over the last few years, and what I did might not work for everyone else.
Before I get started, I just want to say that a lot of people played a part in helping me get to the point where I am today, and I would love to name them in this article so that I can say thanks and give them full recognition. But for their privacy, I won't name them specifically.
How I got into freelancing
When I was younger, the idea of freelancing never really struck me as something I wanted to do when I was older. I can't quite put my finger on why, but it just didn't appeal to me in the slightest.
When I was in my first year of university at UCLan (University of Central Lancashire), a business mentor gave a quick talk in one of my lectures about freelancing, what it is, and how to get into it. I listened to the talk but pretty much disregarded it because I didn't think it would ever apply to me. Thankfully, I made sure to still take some notes though.
The business mentor came from a hub in my university called "Propeller" (or "Northern Lights" at the time they did the talk). Propeller provides services and advice for students and graduates to help them start their own businesses. But I'll come back to talking about Propeller later though because they played a huge role in me becoming a freelancer.
Now, when I first went to university, I had the sole intention of becoming a high school teacher and teaching computing or IT to 11-16 year-olds. But when I got into my second year, I had a class called "Advanced Interactive Applications" (or, at least I think that's what the name of it was). It was all about building web apps using PHP, JavaScript, HTML, and CSS. I'd done bits of HTML and CSS before, but this was the first time that I'd ever used PHP and JavaScript before. I'll be honest, I fell in love almost instantly! We started by building out the frontend design for a prototype app that gym-goers could use for recording their weight every week. Then we started to add interactivity to the app (like graphs and charts) with JavaScript. Then we started to write the server-side code in PHP to store all this information and interact with a database. I'll be honest, this felt magical! I had managed to take an idea on a piece of paper and build something that you could interact with on your desktop or phone. I genuinely felt like I could build anything I wanted!
There is no doubt about it that my tutor for this lesson was 100% the reason that I fell in love with web development! He then went on to help me with my Bachelor's degree project, and my Master's degree project too.
In my third year, one of my other tutors passed on my name to a couple of people who were interested in getting some small websites set up. I'd literally never done any paid web development work like this before in my life. So, this felt extremely daunting. But I took on the websites and built them. And then (this is the craziest part)... I got paid! I couldn't believe it. I just got paid to do something that I'd really enjoyed doing. I also loved the fact that there was a finished product that could be viewed by anyone in the world.
It was at this moment that I changed my mind about wanting to become a teacher and that I wanted to become a web developer.
The idea of becoming a freelancer was also starting to creep into my mind too. So I remembered the talk from Propeller in my first year, and I decided to pay them a visit. They guided me through a huge amount that helped get the ball rolling with freelancing. It was at this point, in 2017, that I officially registered as a freelancer in the UK. I got help with my taxes, guidance on how to create a business plan and how to run a business, and help with how to find clients. They were incredibly supportive. If I had a single question (no matter how stupid), they would always have an answer and provided resources to help guide me. I also got assigned a mentor (who I still speak to now occasionally) who I could reach out to whenever I had any questions or needed guidance on anything.
By the time I was in my fourth year of university (doing my Master's degree) I had built a few more small sites for some local businesses. So I had to consider whether I was going to pursue freelancing as my main source of income when I finished my studies. I decided that it wouldn't be a good idea at the time. There were several blocks that stood in the way. Although I had some academic knowledge of web development, I didn't really have any real-world experience building anything other than small websites or working with a team. I knew that I’d be out of my depth taking on any bigger projects too early in my career. So I opted to look for full-time employment instead and told myself that within 5 to 10 years, I'd be freelancing full-time.
As I was coming to the end of my fourth year (around 2018), a recruiter reached out to me about a junior web development position at a local business. I saw that they were using something called "Laravel". I'd heard this term being used on a few different job adverts but I didn't really know what it was. So I had a quick search online to familiarise myself with what it was and the basics of what it achieves. I managed to land myself an interview at the business and then managed to get my first full-time job using Laravel as a full-time employee.
I went home every day for the first 3 or 4 weeks with a headache. Not because the job was bad (it was far from it, I absolutely loved that job!). But because I was being taught so much! The lead dev at the company sat me down and took me through the entire codebase for the project I was going to be working on. I got to see Laravel in action and got to learn about all types of things like queues, caching, events, models, and listeners. This was so unbelievably useful! I felt like I learned so much and I genuinely believe that this is a key factor in my journey. I wasn't just handed a project and told "here, work on this", I was actually treated like a junior and given guidance and resources to learn. In fact, I absolutely loved working for that company and still miss everyone there!
While I was working for this company, I also continued freelancing during the weekends and evenings. But, by now, I'd started freelancing as a Laravel developer rather than just building small websites.
After around 3 years of working there, I started working with a client on their Laravel project in the evenings. After working with them for a few months, they asked if I'd be interested in joining them as a full-time employee. At first, I politely declined their offer because I was enjoying my current job so much. But they then told me the salary, and it would have been a 55% increase on what I was currently being paid (this was huge for me!). So after a few weeks of thinking about it, I got back in touch with the company director and told them that I'd take up their offer and join them full-time.
I loved working with this new company too because all of the team were great to get on with. I also got a chance to work on a huge project and learn about things like scalability.
By this time, I'd been out of university for 3 years and the urge of trying to hit my 5 to 10 year goal was starting to grow.
I started to take on more and more freelancing work. Now, this was almost a bittersweet moment for me. On one hand, I was probably doing the most freelancing work that I'd ever done (and so I was getting paid the most I'd ever been paid in my life). But I was also extremely stressed and was constantly working. I had no time to do anything apart from work. This was 100% down to me being greedy and biting off more than I could chew. I'd convinced myself that I'd be able to cope with it all, but I couldn't.
So I made the decision that I had to drop something: either freelancing or full-time employment. I simply couldn't continue doing both because I was just constantly feeling burned out. I was also missing out on doing things with friends and family because I was always working.
I did a lot of thinking around this time. My initial thought was to drop my full-time employment and make the jump to freelancing. My thoughts were that if I didn't do it now, I'd never do it in the future when I had more responsibilities. But I was massively worried about what would happen if I couldn't get enough clients. Up until this point, I'd been using my earnings from freelancing as extra spending money really. Now, I was having to treat it as a full-time income to pay my bills.
I had multiple chats with my mentor from Propeller and he helped me explore the different ways that I could approach the situation. At a point where I felt always felt burnt out, stressed, and knew that I was putting a strain on my relationship and friendships, my mentor helped me to realise some really important points.
He made me realise that I wasn't actually as driven by money as I thought I were. Up until this point, I had been chasing money and trying to increase my income as much as possible. Maybe I was doing it because that's just what I thought I was supposed to do, or maybe it was all to do with my ego and I was trying to prove a point for my vanity that I could do it. I'm still not entirely sure what my reasons were. He helped me to realise that as long as I had enough money to live comfortably, I wasn't actually focused on the money. I was more bothered about having more freedom and being able to help others, and that's where I got my fulfilment from.
Now, I'm not saying that people who work in full-time employment don't have freedom and can't help others. Because that's far from the truth. But I just found that for myself, on a personal level, I felt a bigger sense of freedom by being able to freelance and have more flexibility over my working hours and what I worked on. I also found that because of this, I could spend more time doing things like working on my blog or working on open-source projects.
I took all of this onboard and got in touch with my employer and explained my situation. I asked if I could step down the number of days that I was working (of course, for a reduction in pay). So I then started to work 2 days a week at my full-time job and spent the other 3 days working on freelance projects.
I thought I'd managed to scratch the itch, but after a few months went by, I started to get the urge back to freelance full-time. I started reaching out to past and current clients and people in my network. I let them know that I was considering leaving my job and freelancing full-time and that I was available for work if they needed anything. This played heavily in my favour because several clients told me they'd have enough work to fill my entire working week. So this gave me confidence that I'd have enough paid work. I also made sure to save as much money as I could to create a bit of a savings buffer to cover any expenses just in case I had weeks or months where I wouldn't be able to find any work.
I eventually took the jump and handed in my letter of resignation to my employer!
I will be forever grateful for the opportunity that they gave me because they told me that if it didn't work out freelancing, I could go back to them and get my job back. This took a huge amount of weight off my shoulders because I knew that I had a backup if everything failed.
This was it, I was now finally a full-time freelancer and I'd managed to beat my 5 to 10 year target and done it in around 3 years instead!
What I Do Now
Now, a year on, my week looks a little different to how it did when I first started. Instead of working 9-5 Monday to Friday, I like to split my week up a bit. I have a contract that takes up around 3 days of my week and I use this as a large basis for my income. The project is really fun to work on and the team are all great!
For the other 2 days in the week, if I have any small client projects, I'll work on them. Otherwise, I use the time to work on things that bring me a sense of fulfilment but that don't directly give me any income, such as open-source projects, and my blog. Or, most recently, I've been working on my book Battle Ready Laravel which I recently released.
By being able to split my week up like this, I manage to earn enough that I can live comfortable, and get to work on other things that I genuinely see as being a hobby. Although you could probably view my blog and open-source contributions as being marketing for myself, that's not my main intention for doing it.
I actually love the feeling of helping people and seeing them succeed. I've had emails in the past from people saying things like "I've just managed to land a job as a web developer thanks to your blog" and "I've been trying to understand XYZ topic for ages but it didn't make sense. But I've just read your blog post and it's helped me loads". I get a much bigger sense of satisfaction and fulfilment when I read these messages rather than when I see that one of my invoices has been paid at the end of the month. It genuinely brings me so much happiness knowing that I've had a positive effect on someone's life on the other side of the world. I think this probably ties back into my original intention of becoming a teacher, to be honest.
My schedule will likely change in the future, but for now, I'm happy with how everything's working out.
Where I Find Clients
As I mentioned, one of my main concerns before making the jump was whether I'd be able to land clients. So far, this has worked out pretty well for me.
Strangely enough, though, I don't actually go looking for clients anymore. Instead, they usually come to me.
I feel incredibly lucky and fortunate to be in this position, and I understand this won't always be the case though.
When I first started out freelancing while at university, I was trying to find my clients by contacting local companies that might have wanted a website making. But I didn't ever really get any traction with this and most companies never bothered to get back to me at all. I think the main issue was that some of the businesses already had websites, there were more established web design companies in my town, and some businesses didn't see the benefit in a website because they were roadside shops that would just sell to people walking past.
It was around this time that I started writing some articles for my blog. I wasn't writing them with the intention of getting clients, but because I actually just enjoyed writing. But I slowly started noticing that people were getting in contact with me on LinkedIn because they'd come across my blog posts and found them useful. A large amount of these companies were still local-ish (I think the furthest one was around 20 miles away). This made me realise that I didn't need to target local businesses in my area and that I could spread my wings a bit further. After all, the service that I offer is purely digital, so there's not really much need for my clients to be geographically close to me.
Now, I find that the majority of clients come to me as a result of my blog or GitHub.
For example, I typically get around 1 or 2 enquiries a week. I genuinely don't know how this compares to other freelance developers. But after I managed to get my very first pull request merged into Laravel, I started getting 4 or 5 enquiries a day for a couple of weeks. This has died back down to the 1 or 2 a week. But I think that this suggests that there are a lot of lead developers, CTOs, recruiters, etc that might be watching these types of things to find new developers. So I use this to my advantage and treat open-source contributions and my blog as my marketing to find new work.
Naturally, through doing this, I've found that I'm generally contacted more by developers on existing teams rather than clients or agencies. So that means that I'm usually contacted so that I can be brought on as an extra pair of hands to work on existing projects. I actually really like this kind of work because it gives me a chance to meet new developers and learn from them, rather than being the only developer working on a project and never really learning from it.
I find that my blog and my Twitter play hand-in-hand to also provide me with new work. Traditionally, my blog has served as a way of driving traffic to my site, but it only gives me a chance to talk at you, not to you. I guess you can comment on my blog posts below, but it's not very often that anyone does. But, by posting code tips on Twitter and interacting with the community, I can get to know the Laravel community on a more personal level. It opens the door for conversation and building rapport with people around me. If a need a favour or anyone’s help with an issue, there's usually someone on Twitter who can help me out. Likewise, if anyone needs my help, they know that they can find me there. This has really helped because I get contacted in my DMs (direct messages) by people who are looking for a developer to come on board and work on their projects. My Twitter also allows me to drive traffic back onto my blog where I can have more of your undivided attention.
This isn't to say that my blog isn't worth it though on its own. In fact, it's far from it. I usually cross-post my blog posts to as many different places as I can so that I can get the most reach. The articles also organically drive traffic for me through Google search results. Granted, I don't get a huge amount of traffic (roughly 10k visitors or 14k page views a month) but it is better than nothing.
As well as this, when I recently released my book, I got a surge of people who contacted me asking if I'd be open to working with (or for them) on some projects.
How I Choose My Clients
When any prospective clients get in contact with me, I try and make a decision on whether we'd be a good fit to work together. It's important for me to decide whether I think I'd be a good fit for the client and the project, just as much as it's important for the client to decide if I'd be a good fit for them.
When I first started freelancing, I was definitely a "Yes!" kind of guy. If someone contacted me and asked me to build them something, I would say "yes" no matter what. I found it difficult to say "no" because I thought it would make me look incapable, unprofessional, or a bad developer. But I've since learned that sometimes you just need to say "no". If you don't like the sound of the client, or the project, or something seems a bit fishy, or if you're just too busy to take on new work, saying "no" is probably the best thing you can do (if you're in a position to be able to do so).
I (for now), strictly will only work on Laravel projects.
I tend to stay clear of agencies. Now, this isn't because agencies are bad, because they definitely aren't. But I found that due to the nature of agencies, they usually had pretty tight deadlines and expected work to be done quickly. Because of this, I usually ended up under a lot of pressure and stress when working on these projects, so I tend to avoid them.
If you've read any of my blog posts before, you'll know that I love testing! I'm not going to cover the benefits of testing in this article, but we all know that tests can drastically help to improve the quality of software and web applications. So, if I get the impression that the team I'll be joining doesn't see the value in testing, I'll see that as an immediate red flag. I completely understand if a project doesn't have any tests written. The project might be an MVP or was rushed to production properly, or maybe the team didn't previously see the value in writing them. But if the team is now open to building a test suite, I'm totally cool with that. Otherwise, from past experience, I know that the development experience will likely be painful and there will probably be a lot of headaches with bugs and errors in production. So I want to know that I can join a team and not get nagged at for spending time writing tests for any code that I write.
During our initial discussions, if I hear, or get the sense that, the project isn't following the usual Laravel conventions, I'll see this as a red flag. Hearing something like "We're using our own custom version of Laravel" usually makes me walk away. This isn't because using your own custom version of the framework is bad. If it works for your business and helps you to serve your application to your users in the best possible way, then I'm all for it. But as a freelancer, I want to be able to look at a codebase and understand it relatively quickly. I want to be able to start actively contributing and being useful within the first few days.
Additionally, I like to try and judge the client (and team members, if possible) on our initial calls. Of course, it's always difficult to properly judge someone's character after one phone call. But I do genuinely believe in good first impressions and that you can usually quickly figure out if someone is a bad egg! If I get the impression that the client is just a generally negative person, that I'm going to be treated like an underling, or that I'm going to be given the horrible tasks that no one else wants to do, I'll see these as instant red flags. When I join a team, I want to be viewed as an equal member of the team that has a voice in conversations and discussions. I found that this happened a lot towards the beginning and felt that I was being judged as being "the 22-year-old junior that's just finished university". So I think some clients conflated my age with my experience and used this as an excuse to talk down to me. As I've got a bit older (I'm 26 now) I've found that this happens less, but still happens occasionally.
Pros of Freelancing
So far, over my 4 years of part-time freelancing and 1 year of full-time freelancing, I've found there are many pros and cons. I wouldn't necessarily say that these affect everyone, but these are the ones that are most notable to me over the past year.
I get a lot of control of my time. As long as I complete the necessary work that's needed, I can work whenever and wherever I want. If I wake up one morning and think "Wow, I'm tired! Let's have a lie in", then I can do that. I'm sure you've all experienced this, but there are some days when I just don't feel in the mood or the right mindset for programming. If I was being employed, I'd still need to be at my computer working on things, and I'd probably just churn some rubbish thing out that's riddled with errors. Whereas, now, I can say "nope" and do something different that day. It might mean doing something like writing a blog post or taking the day off completely. But it gives me the ability to work at 100% of my ability and take breaks when I don't feel like I can do that. It also gives me chance to take time off to spend with my family and make plans to see friends without feeling guilty for not doing work that day.
I have a huge amount of flexibility over the type of work that I work on. As I've mentioned above, I can choose what types of projects to work on, so I can work on fun projects that I think I can make meaningful contributions. This is a bit different to full-time employment where you might typically be told by your boss what project you're working on without much of a choice.
Since freelancing, I've managed to speak to a huge amount of people around the world. It still blows my mind how I can sit at a computer and talk to someone on the other side of the world. But I get to be part of a community of like-minded people. As well as this, by working on new projects regularly, I get to work in new teams. This gives me the chance to learn from other developers and see how they tackle issues and problems.
Cons of Freelancing
It's definitely not all sunshine and rainbows though, and there are definitely some cons to freelancing that I've experienced.
For starters, I miss out on some benefits that I would typically get as an employee. As an example, in England, full-time employees are typically entitled to paid sick leave, a minimmum of 28 days of paid days off, and 2 weeks of paternity leave. Because I don't get these, I need to factor paid leave into my hourly/daily rate. I need to make sure that I make enough money during the days that I work so that I can afford to take days off.
This part definitely isn't my area of expertise, so I might be wrong on this bit. But, as far as I'm aware, employers match your contributions to your workplace pension in England. Because I'm a sole trader, rather than an employee, I don't get this benefit and need to make sure that I contribute more to my pension to make up for the amount that would typically have been contributed for me.
Now this one is a bit of a double-edged sword for me. I've found that my time management isn't the greatest. I always make sure that my work is done on time and that deadlines are met. But I've found that because I have flexibility over my time, I'm sometimes a bit too lax with my day. For example, as I mentioned earlier, if I don't feel like working one morning, I might sleep for a bit longer. Now if I was employed full-time I wouldn't be able to do this because I would be held accountable by my boss and probably fired. But because I don't have anyone to hold me accountable for that, I find it difficult to stick to a typical 9-5 day. This means that I might end up working later into the evenings to make up for my lost time sometimes. On a personal level, that doesn't actually bother me because I'm a bit of a night owl anyway. But it does affect my ability to spend time with my family and friends. So my time management and accountability are something that I'm working on at the moment to try and improve this.
Conclusion
All in all, I've really enjoyed the past year and I don't regret the decision to start freelancing full-time either. If you have any questions at all about any of this, feel free to get in touch and I'll be happy to try and answer any questions.
If you enjoyed reading this post, I'd love to hear about it. Likewise, if you have any feedback to improve the future ones, I'd also love to hear that too.
If you're interested in getting updated each time I publish a new post, feel free to sign up for my newsletter below.
Keep on building awesome stuff! 🚀