Looking back on this year, many of the lessons I've learned had less to do with specific technologies and more to do with long term career growth. I've been a developer now for 9 years and as a result, I'm starting to think more about longer term goals and happiness. As a result I made the decision to move from contracting back to full time work towards the tail end of the year so a lot of my reflections are tied around the costs of short term thinking and contracting in general.
So this is an obvious one, but it was a lesson slowly learned for me. I've been a contractor for the past few years and while it has had some highlights and excellent roles there is definitely a price to pay being a contractor. At the end of the year I dropped my contracts and have moved back into a full time position. There were several reasons for this, many of which are outlined below. It was tough to leave the contractor lifestyle, it will almost always pay better than full time work, there's a certain flexibility to it, you hop between multiple projects and that can keep things interesting. The key takeaway this year was that most of those benefits were slowly getting outweighed by negatives and the only thing keeping me contracting was high day rates and in the end I had to make the call to leave, money wasn't worth the overhead.
For the last three years I have been contracting for either two or three companies simultaneously. I tended to draw higher day rates when I split my week between clients. Often clients simply need a top-up developer to help out with smaller projects while also not becoming an irreplaceable member of the team, it makes sense in terms of managing contractors. However there are issues with this setup.
Firstly, the cognitive overhead. Swapping 2 or 3 times a week between not only different tech, different team members, processes, documentation, heck even different email providers and ticketing systems has a higher long term cognitive overhead than one might expect. Initially, there might be no issues with such a setup, but over time the constant churn of swapping will create a productivity hit. There's simply too much variability to focus as effectively on what your being hired to do. It also has the cumulative effect alongside the huge gaps between work. I might be halfway through a task and not get a chance to return to working on it for another 5 or 6 days, between which I've worked at multiple locations on different teams in different companies all likely with different tech. Anyone who believes there won't be a cognitive cost(I include my past self in that group) is deluding themselves.
The second major issue is that clients bleed into one another. Be wary of clients where you're the only subject matter expert for a particular technology. There can be definite expectations that when an issue arises you'll take care of it despite working for another client that day. The stress levels of managing such a situation can be high, as you try to manage the expectations of multiple clients at once, and again this takes away from your focus on the job, which is not what you want when you live or die based on solidly productive days to justify your day rate.
There is further more subtle issues that arise with simultaneous contracts, but these are the main ones that lead me to believe that if your want to stay more focused, have a higher output and be day to day happier try to focus on one client only if you can.
One thing about contracting is that you may end up working for companies that might not have the best team structure. That they need contractors to supplement their internal resources may indicate a staffing issue which can be for various reasons, there are plenty of exceptions to the rule and you can also certainly work with poor teams while working full time, it's simply that there can be a tendency to prioritise the higher payoff over good working conditions.
The single thing I focused on when moving to a full time position was working within a good team and getting a good feeling from technical and non-technical leadership within the company. This was simply the most important motivator for me and I highly doubt I'll ever regret using this as my barometer for finding my current position or future positions for that matter.
I have never had a client end a contract, it was always on me to move onto something else. As a contractor you might expect to work a 6 month contract, have it end, then move on. This belief can lead to short term decision making. For example, when you literally have a choice between a good and a bad team but there's a twofold increase in your day rate, sacrificing your day to day happiness is a legitimate option as these decisions all to some extent feel like temporary measures. The problem is, it has never played out like this for me. Despite taking many short term contracts, the clients always ended up wanting to renew. In a way this makes sense, it can be a pain to replace contractors who have decent internal knowledge, or perhaps the hiring managers plan to replace you has gone awry or it's simply just hard to find reliable developers.
The problem is that you might be making bad long term decisions while believing them to be short term ones and it can be easier to stick around somewhere because your comfortable and perhaps don't have the energy levels to make a switch right now. The lesson here is simply to be wary of short term thinking, as it can easily play out over the long term.
Up next, Part 2.