I’ve never really liked to do consulting work. I mean, admittedly, work is work, and I do get paid decently for the things I do, but there’s a part of me that dislikes not having full control over the product. To be honest, it’s one of the reasons why I fell in love with writing software — the ability to be in full control, and to go from an idea to something that works and solves a problem. However, when you do consulting work, and especially freelance consulting work, you’re usually paid to do what the client tells you to do, within reason. You have limited autonomy, and you have limited control of the overall product: you usually have no control over the majority of technical decisions, including decisions regarding the health of the codebase itself.
There are exceptions, of course. I’ve been lucky to be in a several projects where I was given carte blanche over the architecture of the system, and the engineering decisions over the code. Of course, as a freelance agent, I needed to always make sure that the client was in the loop in these decisions, and they ultimately still had veto power. So, when I told the client that we needed to stop and fix the codebase, I didn’t have to necessarily contend with having to argue why this was a good idea in the long run; if I mentioned the use of a particular library or framework to get a task done, I didn’t need to necessarily ask permission before its use.
Of course, the decisions I made in these projects were not made lightly, especially considering my position as an outsider. I did not necessarily have all of the details of the bigger picture, and I was not spending my own money on the project itself, so in a way I didn’t really have skin in the game. There was a tremendous amount of trust placed on me to do the right thing on these projects: if the project sunk, then I didn’t have much to lose, in comparison to those actually paying me. I’ve always tried to keep that in mind.
Admittedly as well, in the cases where I had more limited decision-making capabilities vis-a-vis the project, those limitations had a way of clarifying my thinking. When all you have to do is push out code to get a single feature running, without worrying about hosting costs, then really: all you have to worry about is how to get that feature right. Your thinking isn’t cluttered with the worries of how much the code you are writing will cost in terms of hosting it: that’s for your client to worry about— although, to be fair, that is a requirement that might need to be discussed with them. You need to worry that the rest of the code lacks tests: implement tests in your piece of the puzzle, sure, but the rest of the codebase? Not really your problem.
Owning the thing being built, however, has its own set of benefits and tradeoffs. When the thing you are building is your own, you have to contend with the tunnel-vision of your own psyche protecting itself from criticism; that sometimes, criticism of your work is conflated in your own mind with criticism of yourself. True, you have full control of the project— but you shoulder the entire burden of its failure as well. As a consultant, if the project failed, ultimately, it wouldn’t be your fault entirely.
When the project is your own, every little detail will overwhelm you. You have to learn how to segment your mind to deal with everything: schedule, technical decisions, etc. Temporarily, at least, to get a grip on everything, you have to sometimes tell yourself that you’re a consultant, a freelancer, on this particular bit of the project: that you should wear that Hat, and worry about just the little thing in your domain.
The other thing I never really liked about freelance work is the fact that your time isn’t your own, in a lot of senses. Unless you’ve planned things well in advance, you will have to get things done on what would be a holiday or a weekend. That doesn’t mean you have to work Christmasses or Sundays; I haven’t, and I never will allow that to happen. Sometimes, though, you will have to catch up to the work on your plate by working on a holiday or a weekend, where your peers doing nine-to-five have a paid day off of work. No work, no pay.
Of course, you should be able to schedule things so that those holidays have already been paid for by the projects and work you’ve taken in before that. But! If you work freelance, there will be days where the government suddenly declares a day as a holiday: a day that you yourself would have done work on, but now shouldn’t. You don’t get paid for the hours you don’t actually work on, especially holidays.
That bit of consulting work, especially freelance consulting work, is something I never did handle well: the balancing act of doing enough work to pay for the weeks and months you spend looking for more work. I have not yet found a good balance between hustling for work and doing the work.
And there will be lean months. Unless you’re lucky and you get a steady stream of client work from referrals and such, and you don’t need to spend so much time closing those deals. But, you shouldn’t rely solely on those referrals, and you need to grow your network. Hustle, hustle, hustle.
In a way, a lot of the things that make freelancing difficult are the same challenges that make getting a startup off the ground difficult: spending the time chasing after clients instead of working on product, having to work on holidays, paperwork. Unlike freelancing, however, you are in control of your own destiny in your own startup. You do what’s necessary to get your vision off the ground, and the fruits of your labor are completely yours, not someone elses.
Would I recommend doing freelance work to someone else? Sure. Admittedly, although you do have to work on those holidays and weekends, and although you do have to hustle for the work, there’s still a lot of freedom in it: you choose your own clients, you choose your own schedules, you choose your own budget. Will you get rich from doing freelance work? Definitely not, but if you play your cards right, you can make a good living out of it. Ultimately, however, it’s not really for me, at least not for an extended period of time. The uncertainties of the work, the lack of real ownership: those are the things that tell me that it isn’t really for me, that freelance work is just enough for me to get by, but not something I want to do for the rest of my career.