Race Conditions

Software Engineer Contracting in the UK

Last summer, I handed in my resignation at BigCorp. Although there is no doubt that some personal exhaustion played a role in my decision to leave, the main catalyst was the professional wall that I had reached as a software engineer. The system I had built and maintained for the past months was stable. We were just reaching the final stages of improvements that would fix the last remaining niggles. I felt that I had spent more time learning to navigate the organizational dynamics of a large company than being exposed to new systems, new technologies or problems with challenging (functional or non-functional requirements). Being a subject matter expert on your corner of a big system can certainly be rewarding, but one tends to become comfortable and lose the ability to quickly orient oneself in new and unfamiliar circumstances. Moreover, a big part of my job had become about treading the organizational waters. Navigating a large organization is a useful skill - even more so, if one is inclined to pursue a career path where ascending the career ladder is important. There had been a time, a few years ago, when the shiny image (and I use the word image here, because at the time I had no more but a shallow understanding of what it means to operate and be successful at a large company) of a career at a large institution had held a certain appeal to me, but as I became more and more acquainted with the daily realities, I realised that this is not how I personally define success (this is a topic that I have been recently devoting a great deal of time to and would like to explore further at another time).

Bootstrapping a company?

Much could be said about the immediate aftermath of leaving a job and potentially, a career on which lots of time had been spent and lots of self-esteem built, but that is best left to another place and time. Instead, I want to fast forward a few weeks ahead and talk about what happened: I decided to try my hand at starting a software company. I had toyed with the idea before, but never seriously. I do not have the credentials or connections that would land my pitch deck on a venture capitalist’s desk and even if by some lucky streak I did manage to end up in a local version of the Sequoia meeting room, I don’t feel that VC funded, high-growth startup is a path I’d choose. My opinion of the technology produced by the mushrooming and largely VC-funded startup ecosystem of Silicon Valley has been plummeting in the last years. It seems that accepting investor money and going through the accelerator grind has become the de facto norm by which high growth, high PR, but also high WTF companies get off the ground. Bootstrapping, although probably slower than the VC-funded way, was what I wanted to try. This, of course, would require me to find clients who would need the services of a freelance (contractor in UK terms) software engineer while I develop my product on the side. In this essay, I hope to offer some insight into the lessons I learned along the way to finding my first UK software contract.

Before we dive in, a little bit of a disclaimer. I am very well aware of the sometimes accidental gravitas with which the word advice gets thrown around in technology circles and thus am wary of calling this text “advice”. These are the things that I learned and that worked for me in a particular location (London) and at a particular time, so please do take everything said here with a grain of salt.

Getting your first contract

Landing the first contract might take a bit of time. Be prepared for this and don’t be fooled by the metrics (aka the number of available jobs in the market). After a cursory glance at Indeed.co.uk and its many sister sites advertising contracting roles in London, I became convinced that just based on the sheer number of positions advertised, I would be able to at least secure a few interviews and perhaps an offer in 2-4 weeks time. This turned out to be false. Many of the contracting positions advertised on these sites are posted by recruiting agencies and the process between making initial contact and getting an interview usually follows the pattern below:

i) Make initial contact with the poster of the contracting position either through the job site or email

ii) Recruiter gives you a call - sometimes, bizarrely, not to discuss the exact position with you, but to ask a bunch of general questions (what is your experience with tech stack x,y, z? what are you looking for in your next role? etc). This might happen many many times until you actually have a discussion about the role you applied for. Sometimes, your CV will be forwarded to the permanent jobs desk at the recruiting agency, so you will likely spend a lot of time discussing why you don’t want a permanent role or listening to job pitches for permanent roles. Moreover, once you apply for a single role through something like JobSite or CWJobs, your CV will become active and there is a chance there will be lots of phone calls - not necessarily regarding contracting positions, but perm roles as well.

iii) After first call, recruiter sends you a spec via email and you need to reply with a specifically worded statement to give this agency the sole right to represent you for this role. It is my understanding, that contracting roles can sometimes be advertised through multiple agencies, so this bit of process is necessary to ensure the same candidate is not being represented by more than one agency. Sometimes, the recruiter will also insist to know a specific daily rate before presenting your CV to the client.

iv) A few days may pass ( or potentially a few weeks if the hiring manager happens to be on annual leave etc) between agreeing to be represented for a contracting position with a recruiter and receiving the first phone screen/phone interview. Sometimes, the company will decide that they would like a permanent hire to fill the role instead, so be prepared to be told that the contracting role will no longer be filled.

v) After the phone screen, the hiring manager will send feedback to the recruiter, who will call again to discuss next steps. This will usually be a coding test through an online provider (such as Codility) or a face to face technical interview. It will take a few days to schedule and find availability for both parties.

vi) After the face to face, there might be another interview or an offer/rejection, which will be communicated to the candidate by the recruiter. Depending on the company and the speed of the decision making process, this might take 1-2 weeks and you might have to send prodding reminders to your recruiter about the feedback.

During a given contractor job search, several instances of the above cycle are usually in progress (usually at different stages) at once. Most of these cycles will terminate at step ii) - after initial contact, the client company may freeze hiring for the time being or decide to go with another candidate due to various factors (more experience with their tech stack etc). All in all, it took be about 2 months to secure my first contract. Most of my days were spent preparing for interviews and admin things.

The lesson learned here is to avoid relying on metrics such as the number of advertised software engineering contracting roles when assessing the market and the ease of securing a contract. The fact that there are a huge number of roles available does not mean that it will be quick to secure a role. Also, reach out to your networks and let them know you are looking for a new contracting opportunity.

There will be a lot of admin

Be prepared to learn all of the administrative things on the fly. I landed my first Python developer contract thanks to a fellow engineer in my network who I had met at a container security training workshop a few months earlier. She introduced me to a hiring manager, who scheduled me in for the next round of interviews after which I received an offer. As soon as I had secured a contract, I realised just how unprepared I had been for the onslaught of administrative issues that come with being self-employed. Early on, before I started searching for a contracting role, I had explored several options for self-employment and had ended up forming a limited company, which would allow me to pursue contracting and bootstrap a product based company at the same time. Along with the required paperwork with Companies House and HMRC (for taxes), a limited company usually needs several forms of insurance before a client will agree to sign a contract, a bank account and an accountant (I suppose this step is not strictly necessary, but after browsing through a book on small business taxation, I decided that I did not want to brave these stormy waters without expert guidance). Depending a bit on your choice of service providers for each of the aforementioned things, setting these up and receiving the required certificates can take another week or so. For me, by far the longest and most paperwork heavy process was setting up a bank account.

After the required paperwork has been submitted and the contract signed, you will usually need to setup a process to manage submitting timesheets into whatever system the client or the agency uses, making a note of the billing procedures (cutoff dates, format of invoice submission etc) and making sure you invoice correctly. In addition to this, depending a bit on your accountant, the accounting software you use and your taxation setup, you will need to perform regular administrative duties such as reconciling bank accounts with the accounting software, writing and issuing client invoices and submitting tax returns.

It all adds up or doesn’t

Although each step is usually quite small, the overhead of running a small company for contracting does add up and as I quickly learned, bootstrapping a product on the side was not going to be as straightforward as I had initially envisioned. After my last contract ended, I had a few days of serious pondering about whether or not bootstrapping a company was something I truly desired to do. Yes, I had received some measure of autonomy, but it did come with a nontrivial overhead that left less time for the things I enjoyed about software development and research. The market research I had been doing to test the waters for my initial idea had left me with a strong conviction that while there was certainly interest in what was happening in this space, there might not be willingness to pay for a product that I had set out to develop, which meant that I had to develop and test other business ideas or park this goal for now, accept a fulltime role and move on.

Contrary to the technoutopian dreams that are served along a side of sparkling PR, features in Forbes and a sauce of FastCompany hype, most technical founders are not in their 20s and a few years out of school. They are older and with more industry experience and connections under their belt, which can be crucial in landing your first B2B deal. These are factors that I have to consider. Most startups end up failing in the first year. Some end up being acquired. Or burning through their VC money or their people. For now, I’m still going to stick bootstrapping and contracting and see where the path takes me.