How To Avoid Being A Bad Contract Developer

4 years of increased rates and growing a solid body of work

Ben Howdle
13 min readNov 7, 2017

A Brief History Of Ti(Me)

I started web development with the LAMP stack and WordPress back in 2009. I slowly moved to more front-end work in 2011/12, using jQuery and Backbone.js. I was hired by KashFlow in 2013 to architect and build a new front-end for their accountancy SaaS. I’d been moonlighting as a freelance web developer/designer since I started, doing websites for friends and friends of family; essentially anyone who would let me.

I registered as a legit LTD company at the end of 2013 and quit my full-time job. Since then, I’ve worked with various companies, from smaller startups, to bigger enterprise companies like Cisco. I’ve also ran multiple workshops teaching people JavaScript, launched multiple side projects and released a bunch of open source projects.

To Read On…?

It’ll be 4 years this month (Nov ’17) since I took the dive and I wanted to collate all the things I’ve learned in that time into one post, partially for cathartic reasons, but mostly to help, encourage and prepare people if they were thinking of doing the same. It goes without saying, this advice comes from my own personal experience, so what worked, or didn’t work for me may yield the opposite outcome for you.

Also, anything that strays into the legal or accounting arena, please do take with a pinch of salt. I’m foremost a developer, so I would refer you to people a lot more qualified than myself if you have any further questions. However, with anything else, I’m an open book. I’ll pop some contact details at the bottom of this post and I’m more than happy to answer any questions, offer more advice or help in any way I can.

To keep this fairly concise and manageable, I’m also having to assume a lot of context unfortunately. I’m basically going to be addressing a 4-years-ago me. So I do apologise if your current situation differs, and I hope you can still extract some applicable tips.

Registering a LTD Company

Just love receiving mail

So, first question; Sole Trader or LTD company?

Actually, 0.5 question: what is either one of those things?

Please do Google these properly, but essentially: a Sole Trader is legally YOU. You accept money from clients, and then once a year, you tell the HMRC how much cash you brought in, and they calculate how much you owe them. Simple-ish. Much simpler on the paperwork side, however, if it all goes Pete Tong, you bear the brunt of any legal action, because a Sole Trader is legally YOU. Even if you call yourself “Two Step Media” (this was me for a long time) as a freelance pseudonym, that’s just a paper name, you are your business.

On the flip side, registering yourself a LTD company certainly increases the paperwork, and has you dealing with scary-sounding terms as shareholders and dividends, HOWEVER, the company becomes a legal entity of it’s own, separate from you, you just sit at the top as a Director/Employee of your own company. This personally appealed to me more, as it enables you to do a lot more business-y things (expenses, etc) and be a bit smarter with tax bills. Also, my wife handles all my invoicing and book-keeping, so we get to both take money out of the business account as employees and shareholders of Ben Howdle Ltd. Splitting our income across salary and dividends means less tax to pay. I’m wary of going any deeper on this, as I advise you do some reading for yourself, and weigh up the different options for your own situation.

Finding Work

Ok, you’ve got your business bank account, and you’re now ready to start invoicing for cold.hard.cash.

Right.

Talk to a 100 people about when’s the right time to go freelance and you’ll get 100 different answers. Some say save up 6 months worth of wages before making the jump, some say 3 months, some say “screw it, quit today and start tomorrow” — baptism of fire. I personally opted for a balance between the latter two. I had just been offered (verbally) multiple projects with a large digital agency, and they needed a quick turnaround. Once I had the “promise” of that income, I decided now was my chance to make the leap and hand in my notice.

Turns out, you can never count on income until it’s being transferred into your bank account. Those multiple jobs never came in, but luckily, because I’d decided to go freelance, I quietly spread the word amongst a few people I knew and they were kind enough to pass my name on for potential work. So by the time my notice was served with KashFlow, I had my first contract lined up and my first day-rate established (I’d previously been giving people fixed costs for projects, which inevitably led to scope changes and me being too inexperienced to account for this). More on that further down…

That was me, so how about you.

My advice, again from positive personal experience, is to give people a reason to come to you.

Instead of being in a position where you need work right now and not find any, put feelers out early on and have a body of work online so that people can find you for themselves.

Synchronously looking for work:

You: “Do you have any projects right now?”

People: “No.”

You: “Shit.”

Asynchronously looking for work:

You: “I’ve got availability coming up in X weeks, check my portfolio for skills and past clients/projects 👉 [link to portfolio]

People: *your availability is stored in their subconscious somewhere*

2/3/4/X weeks later…

People: “@potential_client Oh, try Ben, I think he said he was available a couple of weeks ago. Here’s his site 👉 [link to portfolio]

BAM. The latter is a scenario I’ve encountered multiple times. Someone has personally vouched for you, so you’ve already skipped a few rungs on the ladder, which is incredibly handy and valuable.

Side-note: When our son was born in 2015, I was pushing my workshops, and wasn’t getting regular income, so I figured I best look for some reliable work. I put some feelers out on Twitter…nothing. Nothing for 6 weeks. Slight panic. However, in the next week, I got recommended to a London startup and Cisco. The first I contracted for on a part-time basis for a couple of months, and the latter went on to become a lucrative 15 month contract with lots of California travel. This lull has happened twice more since, and each time, I’ve got better at trusting in the process, whilst also increasing my profile through side-projects, blog posts and open source contributions. It honestly does work…

When a potential client visits your site, you should have one or more of the following things hit them as soon as they open it:

  • a list of past clients
  • a list of projects
  • a list of technical blog posts

If you don’t have client experience, beef up the second two. If you’ve not launched any projects, hammer the last one. If you’ve got the skills and knowledge, don’t hide it. Don’t highlight your weak link (lack of client experience, for example), celebrate your strengths (damn fine explanations of technical concepts, or a solid list of projects that have a URL).

Bested by some startup called NASA.

Grade.js was a small JavaScript library I wrote in a couple of hours, and subsequently it went a bit berserk on social media/developer news sites, etc…but I know for a fact a few people got in touch after seeing it and therefore my GitHub profile/portfolio site.

When To Say Yes Or No To Projects You Might Not Want

To really, really keep things simple:

If you really, really need the money, say yes.

If you don’t really, really need the money, hold off.

It’s your life, and it’s your time. You don’t want to agree to do a project under conditions you’re not happy with, whether that be rate, or day to day logistics/communication. Growing resentment for a project, day after day, can build up, and be awful for your mood, happiness and the people around you.

Building up a buffer of money in your business account allows you to be a bit more choosy with the projects and contracts you take on.

Contracting vs Freelance

An important distinction to make is between the various types of projects you could work on.

To keep things relatively simple, I tend to think about two main categorisations: freelancing and contracting.

In my head, freelancing is you working on delivering a project to a client. You’ll likely charge a fixed price for this project, and agree on a rough timeline. You might agree to schedule regular catch-ups with that client, but you’re very much working on your own.

Whereas contracting, which I tend to do more of, is almost like being an extra pair of hands on a project in a company (maybe you’ll be working on it on your own, but likely as part of a larger “development” team). You might join their Slack, you may even work in their office, or join their stand-ups.

From experience of doing both, I sit much more comfortably in the contracting world. Doing freelancing projects is great for variety (short projects especially), but having a regular monthly invoice being paid brings me a great deal of peace of mind. My shortest contract has been 1 month, and my longest 15 months, so it really can vary depending on budgets, project demand, company size, development team skill (ie. they suddenly need JavaScript experience for a project, which they don’t have, but bingo, you do), etc…

Interviews

The “interviews” I’ve gone through for contracts have been fairly different through the years. From 45 minute Skype chats about why certain JS frameworks would be more suitable for a company’s application, to a 90 second phone call in which everything was agreed upon: project, rate, length, next steps. It really can vary.

If a company wants you to do some work prior to starting with them (as part of the interview process), I would be inclined to charge for a day of your time. But, that really depends on how much you want/need it.

Money

The big taboo…for some reason.

My advice is to get comfortable talking about rates with other people you might know who currently freelance or contract. Also try and look at various other freelance/contract posts/adverts and see how much they’re looking to pay.

Market value for your set of skills + your experience = your starting rate. Up it at least once a year, or maybe even after every contract (over 3-6 months).

To keep things tangible, my skills lie in full-stack development, but I tend to specialise in JavaScript. I’ve also kept myself immersed in each major JavaScript framework that cycles in/out over the years: Backbone to React to Vue, however, my solid JavaScript understanding is what carries me, not my framework-of-the-month CV.

To give you an idea of my rate progression:

In 2013–14, I was charging £300–£380 a day.

In 2015–16, I was charging £400-£450 a day.

From 2017 onwards, I charge £600+ a day.

To make things clear, this wasn’t money directly into my pocket. I’m not asking you to cry me a river here, but after tax, accountant fees, yada yada, the money we pay ourselves isn’t the figures you see above.

Contracts

You need one, and you do not start work without one. If a client is strongly suggesting you start the work without one, this is an easy out. A huge red flag.

I’ve absolutely done projects without a contract, and started contracts without a signed contract. Has it gone ok? Most of the time. Has it gone belly up? For sure. Horrible. I wouldn’t do any work going forward without a signed, sealed and delivered contract.

How do you get one? Ask freelance/contractor friends, grab a template from the internet, or pay a small fee to get a lawyer to write you one.

Do remember, that contracts are there to protect you and the client, hence you both needing to sign it.

Another way to protect you, and get you paid, is a late fee clause. This essentially stipulates that if a client pays late, you add, say 5% to the next invoice, or the total amount owed. Again, most clients shouldn’t have a problem with this, because…why should they? If they do, it might be because it makes them nervous, but use your gut whether you want to go ahead with the project or not.

If the worst happens, and a client refuses to/can’t pay, and you’re not the reason, you have two real options:

  • Write the money off as “bad debt”. This means you take the loss, but you don’t count it as “profit” in your books, so you obviously won’t be paying tax on it. This can suck, but in some cases, it might be less hassle to take the hit, never engage with the client again and move on with your life. Otherwise, your option is to…
  • Take the client through the small claims court. Can be expensive. Can be a headache. Again, use your gut.

Accounting

Two things you’ll want to do:

Sign up for some bookkeeping software, we use FreeAgent. This will be where you manage the day to day of your contracting/freelancing business, ie. creating invoices, logging hours for a client, creating expenses. We just don’t want to do any of the heavy HMCR lifting ourselves, for that, we want…

An accountant. For reference, we pay ~£300/year for FreeAgent, and between £1500–2000/year for our accountant’s fees. They take care of filing our annual return, sorting the corporation tax bill, submitting our personal tax return each year, and also clarifying/advising on the dumbass questions we often have. They can also log in to FreeAgent and grab reports if need be, very handy.

Insurance

I actually only got professional indemnity insurance last week. After 4 years. Don’t be a dope, get it sorted much sooner. It costs (in my case, which I believe to be fairly typical) less than £500 a year. Instant peace of mind. We use WithJack, which provide a really great service.

Delivering Work

This section might contain some fairly obvious advice, but if it helps you be a better contractor, I’m happy.

Firstly, when you start a new contract, everything feels new. Now, as you do more of them, that initial unfamiliarity decreases. You’ll spot patterns across companies, from tools to coding standards to everything in between. Now, you’ve got a list of tasks, had a quick discussion and been left to get to it.

Crap.

Remember being in year 8 maths class, had long division explained to you and then been set off on a task, not understood it one bit but also not wanting to make your teacher aware of this through fear of looking stupid. Well, imagine you’re also being paid to understand and produce long division results. Ok, analogy over, it’s confusing.

You’re being paid to bring in expertise and experience. You shouldn’t conflate needing more discussion/clarification on a task with you not having a clue what you’re doing. Having further discussions with a client or a development team can be really beneficial for both parties. You’re an external set of eyes, and just by asking new questions, you might reveal something they’d not thought of. Don’t be afraid to request a deeper discussion with clients.

A follow on from this is to not be afraid to have an opposing opinion or to push back on a decision/direction. Again, you’re being paid to bring in expertise, not just be a Yes Man. There’s a huge gap between having strong opinions backed up by experience or just being inflexible and a nightmare to work with.

When it comes to the skills you have, or need to attain, my advice is to be a generalist who specialises. You don’t want to be Jack of all trades, master of none, but then there’s a danger in specialising so much, you niche yourself out of work. There’s always a balance. A lot of my work comes from building JavaScript user interfaces for companies, using various different framework/technologies as the years go by. It’s the latter that sometimes brings in the work, ie. someone seeing my name attached to “React”, but it’ll be my solid foundation of programming and JavaScript skills that’ll carry me through a contract and deliver value to the client. You become a lot more handy to companies when you don’t “just use React” but also might’ve worked with AWS, or PostgreSQL, for example.

Time off

Being a contractor allows you, on average, to bring in a bit more income than a full-time counterpart in a short amount of time. This means that you can keep a nice cushion in your business account to keep you afloat between contracts. However, as a contractor, “holiday pay” isn’t in your vocabulary, and an easy trap to fall into is, “just keep working”. Bouncing from one contract to another. I’ve definitely done this in the past, but now try and schedule in time off.

Say you’re working on a contract which is due to finish, lets say, at the end of May. If it was me, I would start to put feelers out for new contracts at the start of May, but make people aware I was available from July onwards. This gives me June free. This means that if something really juicy comes in mid-June, I have the freedom to take it, or I carry on pursuing July work. Time off doesn’t have to mean sitting around Netflix-ing. I mean, it absolutely can, but it doesn’t have to. On paper, this sounds great to me, but I tend to fall apart after a few days with no structure. I’m not going to patronise you and reel off a list of things you could do with your time…

Goals

This was something that only really hit me last year. For the longest time, I just wanted, in a professional sense, to be a “better developer”. Being a better developer with more experience meant higher rates, which was nice. However, once the bills were being paid, and I knew my kids wouldn’t be going hungry, this left me wondering where my motivation lay for improving/charging more/etc. This bit is really very personal, because everyone is going to be different, but I struggle to stay focused if my only motivation is “charge a higher day rate”.

This is largely why I built Ekko. Contracting for me is a means to an end. I’m not totally sure what that end is, but if it allows me to fund Ekko’s development, then fantastic. If it actually allows me to save up a bunch of money to invest in opening a coffee shop, really fantastic. I love coffee.

Wrapping Up

I hope you can get something from this post, I know a lot of it’s been said before, but a different angle can always help.

If you’re thinking about making the leap, or you’re just starting out contracting and have questions, contact me:

hello@benhowdle.im or @ben_howdle

--

--

Ben Howdle

Consultant software engineer and advisor to companies like GoDaddy, Cisco, Soho House and many more 👉 hello@benhowdle.im / https://benhowdle.im