As I return back to the world of full-time employment after leaving freelancing, I've been able to spend some time reflecting a bit on those months that I spent working on my own. I've also had many people ask me what was it about freelancing that made me leave that world.
Although the journey was a bit scary in the beginning, I truly did enjoy my time freelancing. I was able to work on a variety of applications and meet a lot of different people I wouldn't have otherwise. I was also able to make more than enough money for my needs. And, of course, the independence of being able to work when I wanted, where I wanted and however I wanted as long as I achieved results was amazing. While my current gig provides me a lot of these freedoms since we're a distributed team, the reality is that I am now part of a larger team and organization, and I have to be available to others when necessary. That complete freedom is probably the one thing I miss the most.
Although I always attempt to frame things on the positive side of things, I have to say that freelancing also brought along a lot of things that I was not too pleased with. There were plenty of days where I was questioning my decision to do the type of work I was doing. When I began, I thought that not meeting my financial goals was going to be my main demotivator, but oddly enough that was not a worry. Here are a few things that took a toll on me during this period.
Work environments that were in pretty bad shape.
One of the things I noticed when getting work for existing applications was that - more often than not - the code for the application was in pretty bad shape, making it pretty difficult to be productive and attempting to explain this to the clients, who were usually non-technical.
Now, that's not to say that my past workplaces were shining examples of software development. I've worked at startups before where I would constantly be arguing to have some time to refactor a specific area that was too difficult to understand or change, or write tests for critical paths that were entirely untested. But freelancing took this to a whole different level.
Among the many issues I encountered: Usually, there was no automated testing. The deployment process was manual and error-prone. Some of the libraries and frameworks being used were many years old and completely unsupported, meaning they weren't secure and incredibly difficult to get up to date. It was very tough to justify for the client to pay me and correct these things, even though it would inevitably help in the long run.
Typically, the issue was that by the time I was brought on board with the project, a lot of other freelancers had already collaborated on the code. That would cause different things. Often, the new developers would be brought in without being able to talk to the previous developers. No one understood why things were in a certain way, so the codebase would eventually be an incoherent and inconsistent jumble. Other times there were developers who were obviously junior developers and would not follow common practices for the programming language or the framework.
Regardless of the scenario, the end result would be the same - I would get hired to do a job, and I was hindered from the get-go. It's like asking someone to move a small box 100 feet away while having to drag a 100 lb. boulder strapped around their chest. They'll get to the destination eventually, but it will be slow and it will not be efficient by any means. There were plenty of occasions where I estimated I took over twice the time to accomplish something compared to the time I would have if the state of the code were better. I would be paid (provided I was charging an hourly rate), but I would have gladly sacrificed some pay in order to use my time more efficiently.
"Your rate is what?!?"
Speaking of payment, my rate was not the cheapest out there. Having over ten years of software development experience and living in one of the most expensive areas in the world justifies my rate. But it gets a little tiresome when, while talking with a prospective client, 95% of the times I would get a response along the lines of one of the following:
- "That's way over our budget."
- "We can't afford you."
- "What can you provide that other developers in this field can't provide at a cheaper rate?"
- "Are you willing to work with me for 25% less than your asking price?"
- "Are you serious?"
That last one actually happened to me more than once.
I admit that I'm partly to blame for this, as I was using Upwork often, which is overflowing with developers who charge less than minimum wage anywhere in the United States, let alone the San Francisco Bay Area. But it also happened outside of Upwork, when I talked face-to-face with business owners. If someone has not spent time in a technical business environment, they tend to not fully understand the value of good software development and what it could do for their business, regardless of how you try to explain it to them.
More time than I expected on non-paying work
I knew going into freelancing that I would have to spend time dealing with things I would normally not have to do while being employed full time. I would have to handle my personal affairs like making sure I'm paying my taxes and having health insurance set up. I would have to spend time doing marketing and talking with prospective clients about my services. These things I was already planning and preparing for before I jumped in.
What I didn't know was how much time all of these things would really take. I was able to offload a few of those tasks, like paying an accountant to handle my taxes and have automated payments for health insurance. But having to find work becomes really taxing on you mentally. You have to constantly be trying different things to market yourself. Talking with prospective clients takes a whole lot more time than you would expect. Often you have to decipher what they really want, and then spent a lot of time estimating that work and coming up with a proposal - just to have them realize it's going to cost them more than they anticipated and pass. I should have kept track of how many hours I spent trying to understand requirements and writing proposals with no return on the time investment.
After a few months, I got better at this by learning how to ask better questions, like what their budget was and asking their "why" instead of their "what". That was partly to be able to provide better solutions, but mostly to know whether I should spend more time on them or not. Even though I learned quite a bit, I still found myself spending more time that I would have preferred doing things that weren't paying me, even if there was the chance that I would get paid.
Hindsight is 20/20, of course, so it's easy for me to say this now that I'm employed and don't have to worry about any of these things. At the time, I don't think I minded too much since I was doing my own thing and feeling empowered by this. There are tons of things I would do better, but anyone can say that after doing anything for the first time. Hopefully, anyone who's jumping into freelancing can take a hard look at these things and decide whether it's for them.