Contracting offers an opportunity to continually learn and adapt. You have the chance to hone your skills and quickly learn new technologies, gradually transforming the task of mastering new skills into a routine. It's a cycle of acquiring knowledge, applying it in real-world situations, and in the process, enhancing the quality of your work whilst enriching your personal skillset.
The money's not too bad either.
Say Goodbye to Coding Challenges 🎉
I've been through my fair share of contract applications, and only once was I put on the spot with a coding challenge. When I realized that coding challenges are pretty much off the table when it comes to contracting gigs, it was like a revelation; I'd discovered there were more advantages to it than money.
I've got a life outside of work—a family to take care of, personal responsibilities—and honestly, coding exercises just don't fit into the picture. There was a time when I'd enjoy the thrill of solving them, but after a while, it felt like I was trading off my free time.
From an employer's perspective in the world of permanent employment, I get it. But hiring a contractor is a pretty safe bet with a usual notice period of a couple of weeks; they have ample time to assess whether the new hire is worth keeping around.
The Interview, A One-Act performance
Here's how the scene unfolds: I throw my hat in the ring for a contract, my CV makes its way to the client. If it catches their eye, a recruiter gets in touch for an initial chat – mostly to ensure I'm not a sociopath and can reel off whatever jargon it is they've been instructed to listen out for.
Next comes a half-hour video call, where the company the recruiter is hiring for get to chat with me to gauge my experience level. It's also a chance for me to get the lay of the land, understand what's in store in the contract, and more importantly, demonstrate that I am indeed the person I claim to be on my CV.
Once the call wraps up, there's always that nagging feeling – "I should've asked this or that." But that's par for the course. It's only when you're on the job that you truly understand what the contract will entail, so it requires a solid belief in your skills and a bit of a leap of faith.
Probation? No, Thank You 🥳
Personally, I've got a bit of a bone to pick with the whole concept of probation. Imagine pouring your heart and soul into something for 3 months solid, only to be shown the door?
You'll get something out of the process, but it could be demoralizing.
Let's also take a moment to think about how coding exercises fit into this picture? They're designed to test whether you can code, follow instructions, and weed out any impostors. But then you have the probation period, where you could be dismissed with a mere two weeks' notice. Doesn't really add up, does it? Why even bother with the coding exercise?
With contracts, there's no probation period as things are black and white, either you can do what you've been hired to do, or you can't. I would rather have the validation of being able to fulfill the contract rather than having regular 1-2-1s with a line-manager.
Permanent jobs are a myth
Just recently, Google—the monolithic tech giant—announced they're letting go of 12,000 employees. This is the sobering evidence that the notion of "permanent" jobs is as stable as a house of cards.
The reason for me pointing this out is that the idea of contracting is supposed to lead to a life of uncertainty, and it does (you get used to it), but it's the same with permanent work these days, especially at big organisations. The threat of redundancy is very real. After making the move to contracting, I'd only go back to permanent work if there was no other viable choice.
There's also a high likelihood that you'll gradually chip away at your own skill-set by falling into the groove of doing whatever your company does, and only that, with short-term contracts you're always picking up new things.
One of the benefits of being a contractor is the freedom it offers. You can set your own hours, choose your own equipment, and even have the flexibility to move on with short notice if it's agreed upon in your contract.
However, with freedom comes responsibility. As a contractor, you can't pass the buck; you're accountable for your actions. This requires being honest and transparent, not just with your clients but also with yourself. You have to be prepared to face challenges head-on – it may feel uncomfortable at times, but that's a sign of growth.
The financial rewards of contracting can be quite attractive. Since I switched to contracting my earnings have crossed into six figures, a significant increase from when I was a permanent employee.
Being a contractor often comes with pressure, which in turn can make you more resilient. The ability to adapt and move on quickly is another potential advantage.
I stepped into the dynamic world of contracting in May last year, and since then, I've collaborated with a number of companies. Here's a brief account of what I absorbed from each of these unique experiences:
I worked with Protokol to develop a dashboard built with Next.js for one of their clients, Metanomic.
I collaborated with a great team of people from all over Europe, there were some exceptional people who I got to learn from. They also benefited from my experience, it was a cross-pollination of ideas, skills, and abilities.
The MVP was delivered in 3 months, the deadline added pressure to get things out the door because they needed a product.
As the product was primarily a dashboard, the majority of the UI was form related, which meant a decent form library would be needed. Previously I had some exposure Formik, Yup, and the Context API, but hadn't introduced those technologies to that codebase.
I knew they would be a good fit for this project, so I introduced them and established a series of patterns which were adopted so we could ship faster, and with a minimal amount of testing.
- React Hook Form
- React Query
- Tailwind UI
- React Context API
- React Hooks API
- pnpm workspaces
I made key decisions, was responsible for introducing the result of them to the workflow and codebase, and was the lead frontend dev. I gained experience of working with monorepos, GitHub actions, async working, and more.
The experience gained with Formik and React Query served as a valuable primer for the following contract that heavily involved forms.
Prior to this contract I was adamant that tests were needed for everything, I learnt that testing for the sake of it can decelerate the delivery of an MVP product.
Content + Cloud
I was hired to develop a Next.js frontend for a self-service, multi-tenant portal to enable Content + Cloud's customers to manage and install Sharepoint. This was another project with a tight deadline. I was tasked with finding a suitable UI framework, the devs preferred styled components to CSS Modules (which is what I normally go for), I hadn't used Styled Components before so relished the chance to pick up commercial experience in this area.
I delivered the frontend for the MVP within 3 months, collaborated with some great people from around the UK, with a solid mix of dev skills, architecture, and product ownership.
- React Hook Form
- Material UI (MUI)
- Styled components
- Microsoft Azure
- Azure Devops
I was responsible for the frontend repo, applied my experience gained from Protokol with React Query and React Hook Form—which I'd started learning towards the end—to great effect, which, combined with how the repo was architected, accelerated the process of creating many new forms.
In all of my previous experience with Next.js the infrastructure was AWS based, but as C+C are Microsoft partners I was introduced to Microsoft Azure , which came in handy for my next contract with Macrium.
At the time of writing, Macrium is my current contract.
My initial challenge was to pick up where another developer had left-off with the Next.js frontend - which wasn't straight forward. The entire codebase was written in a way that made it hard to understand, add new features, and maintain, as there was no documentation I had to preserve a lot of functionality, whilst improving the ergonomics.
I had to do a major overhaul, I didn't want to get bogged down with testing too early in the process, therefore introduced TypeScript with
strictNullChecks set to
true with a capital T.
I also introduced Jest snapshot tests to help out with any changes that may happen unintentionally, it's quick and does help add confidence.
The frontend connects to a Strapi backend, so I configured GraphQL codegen to introspect the schema and output all the types, which gave me a lot of confidence.
I introduced CI/CD, and had to do a degree of experimentation with Azure Devops, Bitbucket and GitHub to get the integration with Azure as I wanted.
There are no other developers working on this project, so had to step up and also own the Strapi backend, its infrastructure, and CI/CD.
I migrated Strapi from v3 to v4, so got to learn a lot about Strapi, including its quirks.
- Azure App Service
- Azure Static Web Apps
- GraphQl Codegen
- Microsoft Azure
- Strapi v4
- Load testing
Learning how to deploy Strapi to an Azure app service container using Docker, via a private registry, and github actions was an extremely useful thing to learn.
The most valuable lesson I've learnt during this contract is how to deploy Next.js on Azure App Service. Vercel's enterprise pricing is expensive.
Written by Morgan Feeney
I’ve been designing and developing for almost 2 decades.
Read about me, and my work.
For juicy tips and exclusive content, subscribe to my FREE newsletter.