Web App Development

My first 10 years as a web developer

On 13 February 2012 I received money for writing software for the first time. This post looks at all the jobs I’ve had since.

I’ve mostly worked in the UK as a contractor, but also spent about a year as an employee at a SaaS company, and then started a website monitoring tool called DebugBear.

  1. Summary
  2. Taking a look at each role
  3. Other projects
  4. General notes

  1. Summary
    1.1. Overall stats
    1.2. Counting rate and days worked
    1.3. General disclaimer
  2. Taking a look at each role
    2.1. Background
    2.2. #1 vWorker (Feb 2012 - Mar 2012)
    2.3. #2-4 Cabfix / Startup (Mar 2012 - Oct 2012)
    2.4. #5 Freelance: Wordpress (Nov 2012 - Dec 2012)
    2.5. #6 Freelance: Jekyll (Mar 2012)
    2.6. #7 Freelance: ExpressionEngine
    2.7. #8 Freelance: Python/Angular (Jul 2013 - Aug 2013)
    2.8. #9: SSG/Agency (Aug 2013 - Oct 2013)
    2.9. #10: Fathom / Agency (Oct 2013)
    2.10. #11 1000 Heads (Nov 2013)
    2.11. #12 Head London (Nov 2013 - Dec 2013)
    2.12. #13 Imagination (Dec 2013)
    2.13. #14 AIS via Ecom (Dec 2013 - Jan 2014)
    2.14. #15 Shufflehub (Jan 2014 - Jan 2015)
    2.15. #16 Sportlobster (Mar 2014 - May 2014)
    2.16. #17: Immerse Learning (Jun 2014)
    2.17. #18: Freelance: HTML (Jul 2014)
    2.18. #19: Possible / Agency (Oct 2014 - Nov 2014)
    2.19. #20: Fjord / Agency
    2.20. #21: Orange
    2.21. #22: Tribal / Agency (Oct 2015 - Nov 2015)
    2.22. #23: Freelance: React (Dec 2015 - Jul 2016)
    2.23. #24: Strikingly / Startup (Mar 2017 - Apr 2018)
    2.24. #25: Redacted / Agency (Apr 2018 - Aug 2018)
    2.25. #26: Google (Sep 2018 - May 2019)
    2.26. #27: Redacted / Agency (Oct 2019 - Nov 2019)
    2.27. #28 DebugBear (since May 2018)
  3. Other projects
    3.1. Redacted / Startup (2013)
    3.2. Meetups & Conferences (2014 - 2018)
    3.3. Teaching (2015 - 2016)
    3.4. FromJS (2016 - 2020)
  4. General notes
    4.1. Big Tech
    4.2. Contracting
    4.3. Recruiters
    4.4. University

Summary

No Company From To Day Rate Days Total
1 vWorker Feb 2012 Mar 2012     £350
2 Cabfix / Startup Mar 2012 April 2012 £8 40 £300
3 Cabfix / Startup May 2012 Sep 2012 £51 98 £5,000
4 Cabfix / Startup Oct 2012 Oct 2012 £77 39 £3,000
5 Freelance: Wordpress Nov 2012 Dec 2012     £260
6 Freelance: Jekyll Mar 2013 Mar 2013     £65
7 Freelance: ExpressionEngine Jun 2013 Sep 2013 £160 29 £4,600
8 Freelance: Python/Angular Jul 2013 Aug 2013 £200 10 £2,000
9 SSG / Agency Aug 2013 Oct 2013 £220 38 £8,300
10 Fathom / Agency Oct 2013 Oct 2013 £310 4 £1,240
11 1000 Heads / Agency Nov 2013 Nov 2013 £300 5 £1,500
12 Head London / Agency Nov 2013 Dec 2013 £300 5 £1,500
13 Imagination / Agency Dec 2013 Dec 2013 £300 5 £1,500
14 AIS / Agency Dec 2013 Jan 2014 £300 14 £4,200
15 Shufflehub / Startup [S] Jan 2014 Nov 2014 £160 84 £13,800
16 Sportlobster / Startup Mar 2014 May 2014 £340 63 £21,400
17 Immerse / Education Jun 2014 Jun 2014 £375 15 £5,600
18 Freelance July 2014 Jul 2014     £275
19 Possible / Agency Oct 2014 Nov 2014 £350 20 £7,000
20 Fjord / Agency Jan 2015 Feb 2015 £350 7 £2,450
21 Orange / Telecom Feb 2015 May 2015 £400 52 £20,800
22 Tribal / Agency Oct 2015 Nov 2015 £400 22 £8,800
23 Freelance: React Dec 2015 Jul 2016 £400 53 £21,300
24 Strikingly / Startup [E, *] Mar 2017 Apr 2018 £134 258 £34,500
25 Redacted / Agency Apr 2018 Aug 2018 £675 22 £14,500
26 Google Sep 2018 May 2019 £600 58 £34,500
27 Redacted / Agency Oct 2020 Nov 2020 £500 26 £13,000
28 DebugBear [S, E] May 2018 Feb 2022 £26 920 £23,600

[E] I was an employee rather than a contractor (so all income is personal income)
[*] Role outside London, explaining a lower day rate
[S] I had shares in this company, explaining a lower day rate

Overall stats

  Days Billed Total Revenue Day Rate
Overall 1,894 £256k £135
Excluding employment 716 £197k £276
Also excluding shares 632 £184k £291

Counting rate and days worked

I mostly worked as a contractor through a UK Limited Company. The rates reported count work billed to clients, excluding time spent on interviews, accounting, or learning new technology. The rates also show revenue before expenses (e.g. laptop, office space, software).

For employment, I took the overall amount earned and divided by the number of days worked (excluding holidays). This makes it hard to compare the day rate for employment to the contracting one, as my employer would pay some of the taxes and provide equipment.

The day rate for DebugBear is understated as I own 100% of the business. You could also argue that it would make sense to count business revenue here, rather than personal employment income. I’ve not done that here as expenses are much higher than when I worked as a contractor.

General disclaimer

Some numbers are estimated/rounded. There’s a risk that I forgot to record some work. My experiences with contracts/employment/business may not replicate. Lists of advantages/disadvantages are incomplete. This article is UK-centric.

Taking a look at each role

Background

Before starting work I had around 6 years of experience coding in my spare time, mostly with Python/JavaScript.

#1 vWorker (Feb 2012 - Mar 2012)

Rate: £350 (fixed price)
Tech: PHP, Python, JavaScript
Via: Online platform

Did 6 projects on a freelance platform:

  1. JavaScript form tweak ($8) – refunded as it didn’t work cross-browser
  2. PHP data scraping ($67.15) - first received payment
  3. JavaScript UI for double-elimination tournament ($322.15)
  4. PHP list of blog posts ($30.62)
  5. jQuery Sortable fix ($11)
  6. Python data scraping ($56.45)

#2-4 Cabfix / Startup (Mar 2012 - Oct 2012)

Rate: £7.50/d - £77/d
Tech: PHP, CodeIgniter, JavaScript, jQuery
Via: Gumtree

Mini-cab booking website with ~7 people working full-time. Started internship for £7.50 a day in expenses. Was offered permanent role for £1000/mo as a freelancer, then later increased to £1,500 when I said I wanted to leave.

We did not have a local development setup. Instead, after making changes, we dragged the relevant files into FileZilla and tried out the code on a staging server. This can be tricky if multiple people are working on the same file!

Used SVN for source control, but the release process was quite cumbersome – I think there were a lot of manual merges involved.

The product was bad and did not have many users. I got fully paid in the end, but there were occasional late payments.

#5 Freelance: Wordpress (Nov 2012 - Dec 2012)

Rate: £260 (fixed price)
Tech: PHP, Wordpress
Via: Colleague

Made some tweaks to the Wordpress website of a coworker.

#6 Freelance: Jekyll (Mar 2012)

Rate: £65 (fixed price)
Tech: Jekyll
Via: Freelance Switch

Made a few tweaks to a travel website.

#7 Freelance: ExpressionEngine (Jun 2013 - Sep 2013)

Rate: £160/d
Tech: PHP, ExpressionEngine
Via: Hacker News Who’s Hiring

Subcontracting for another developer, working on a magazine website with an attached ecommerce store.

#8 Freelance: Python/Angular (Jul 2013 - Aug 2013)

Rate: £200/d
Tech: Angular, Python, Flask
Via: Gumtree

Quiz for musicians around their goals and the marketing they do. I think the goal was to start building up an email list for a larger project.

#9: SSG/Agency (Aug 2013 - Oct 2013)

Rate: £220
Tech: Backbone
Via: Hacker News Meetup

I’d been building a mobile app in my spare time using PhoneGap and Backbone.

Met someone from Solid State Group (SSG) at a Hacker News meetup and they mentioned they were looking for Backbone contractors. Was asked to send a portfolio and had an interview. Had a trial week and then started working there 3 days a week.

Worked on a social network that I don’t think ever really launched. Eventually the project was put on hold.

Thought £220/d is a lot, but later saw an email saying my rate was “fairly low”.

#10: Fathom / Agency (Oct 2013)

Rate: £310
Tech: Angular
Via: Recruiter (Explore)

Someone at SSG had mentioned JobServe, so I started applying for contracts through there. Had two cool offers at agencies working for financial customers and turned one down to accept the Fathom role.

Was let go on the first day. Got paid for 4 days.

I think multiple people were let go, and my understanding was that the client was delaying the project. But a few years later I met one of the devs and he mentioned there was an internal disagreement about whether to hire me.

#11 1000 Heads (Nov 2013)

Rate: £300/d
Tech: Python, JavaScript
Via: Recruiter (Digital Gurus)

Got a call late on a Friday for a start on Monday. No interview. Initially talked about extending the contract to more than a week, but I think they needed someone with more Django experience.

Worked on a website that needed to run on a Nokia phone that executed on-page JavaScript on the server.

#12 Head London (Nov 2013 - Dec 2013)

Rate: £300/d
Tech: Angular
Via: Recruiter (Purple)

Worked on an Angular app for gathering ideas from people within an organization. I think the digital agency I worked for was thinking of launching a product themselves.

#13 Imagination (Dec 2013)

Rate: £300/d
Tech: Angular
Via: Recruiter (Digital Gurus)

Single-page app for an exhibition or conference, I think with information around oil exploration.

#14 AIS via Ecom (Dec 2013 - Jan 2014)

Rate: £300/d
Tech: Python, JavaScript
Via: Recruiter (Ecom)

Implemented various designs for a music event website.

#15 Shufflehub (Jan 2014 - Jan 2015)

Rate: £300/d
Tech: Angular
Via: Colleague

Shufflehub was a search/discovery tool for clothes. One of the people at SSG was doing backend work for them, so they asked me if I’m interested in working on the front-end Angular app. This was a small business with ~2 people working full-time.

Biggest mistake I made here: I let them give me actual shares after they received funding. Because the shares had value I had to pay tax on them.

Luckily I didn’t actually lose any money here. Since I only owned about 5% of the company, I asked if they can pay me £160 a day now, and then – if the company succeeds or raises more funding – they can pay me another £180 for each day later.

Doing this is a bad idea:

But in my case it worked in my favor. The company fizzled out before running out of money, so when winding down they both had a bunch of money left and a liability to me. So in the end they paid me enough to cover my taxes for the shares, and I wrote off the remaining amount.

#16 Sportlobster (Mar 2014 - May 2014)

Rate: £340/d
Tech: Backbone
Via: Recruiter (Ecom)

Sport social network that had raised a bunch of money and was rebuilding their website. I initially did a poor job working with the rest of the dev team.

Lots of performance issues, and we addressed them in part by loading stuff over Ajax instead of as part of the initial document.

Morale was incredibly poor. The CEO came into a standup meeting saying they “need a hero”. One lead dev was fired.

The company wanted people to stay late, but after a week or so I couldn’t really be bothered, since I was contracted for 8 hours a day. I think they people how they could get me to stay later, and the suggestion of paying for overtime was made.

I worked paid overtime for a few weeks then quit about 3 months into the 6-month contract.

Took a long time to get paid. I had sent the recruiter an invoice billing overtime at the normal rate, but the recruiter sent the company an invoice at 2x the day rate and the client refused to pay. Invoice was eventually paid about two months later.

#17: Immerse Learning (Jun 2014)

Rate: £375/d
Tech: Angular
Via: Recruiter (MA Worldwide)

Not much to say. Nice chill company. Used Perforce for version control.

#18: Freelance: HTML (Jul 2014)

Rate: £375/d
Tech: HTML
Via: Person met at Startup Weekend

Made some tweaks to someone’s ecommerce website.

#19: Possible / Agency (Oct 2014 - Nov 2014)

Rate: £350/d
Tech: Angular
Via: Recruiter (Ecom)

Built a recruiting site for an oil company.

#20: Fjord / Agency

Rate: £350/d
Tech: Backbone
Via: Recruiter (Digital Gurus)

Working on a app for a travel website.

Initially a two-month contract, but I left early after receiving an offer from Orange for more interesting work at a better rate.

#21: Orange (Feb 2015 - May 2015)

Rate: £400/d
Tech: Backbone
Via: Recruiter (La Fosse)

Worked on chat app that also let you make calls through the browser.

After accepting the Orange offer and giving notice at Fjord, Orange pulled out of the offer. Then later made another offer and I did ultimately start the contract.

The timeline looked like this:

Date Event
Fri 23 Jan Interview with Fjord
Tue 27 Jan Interview with Orange
Thu 29 Jan Start Fjord role
Fri 30 Jan “still a lot of deliberation happening”
Mon 2 Feb “Orange have made you an offer”
Tue 3 Feb Orange contract signed + notice given
Fri 6 Feb Start date moved to Tuesday
Mon 9 Feb Orange contract cancelled: “this agreement is null and void”
Tue 10 Feb New contract with Orange:
“Please ignore the termination letter that we sent to you, this is now void.”
Thu 12 Feb Actual start date at Orange

I think I’d seen the client’s option to cancel the contract prior to the start date and asked about it, but was told not to worry about it.

#22: Tribal / Agency (Oct 2015 - Nov 2015)

Rate: £400/d
Tech: Backbone
Via: Recruiter (Chemistry)

Worked on a comparison tool for a car company.

#23: Freelance: React (Dec 2015 - Jul 2016)

Rate: £400/d
Tech: React
Via: Slack group for contractors

Saw a backend contractor post on Slack that they were looking for someone to work on the front-end React app. Worked on a staff scheduling tool.

This was my first commercial React project. In retrospect, I should have started learning React sooner to benefit from the strong market demand.

#24: Strikingly / Startup (Mar 2017 - Apr 2018)

Rate: £134/d
Tech: React
Via: Hacker News job post

Left London to travel and work on my own projects. Quickly lost motivation though and decided to look for a job in China.

Worked on various UI components for the website builder, as well as working on site speed optimizations.

This was the first time I had direct ongoing involvement with a production site, and also the first time I got to do customer support. Before this, most of my work consisted of one-off projects or work for startups that didn’t have much traction.

#25: Redacted / Agency (Apr 2018 - Aug 2018)

Rate: £675/d
Tech: Angular
Via: Family member

Spent a few weeks with family after leaving Strikingly. Someone mentioned their work was looking for front-end support, and I took the offer as the rate was good.

Worked on apps for automotive clients while also starting to work on DebugBear – more on that later.

#26: Google (Sep 2018 - May 2019)

Rate: £600/d
Tech: JavaScript
Via: Inbound email

A few months after starting DebugBear I got an email titled “Interested in contracting with Chrome?”. It said they liked my work around DevTools and V8 and asked if I was interested in doing work on Lighthouse.

I had just finished the previous contract and had been hoping to focus more on DebugBear, but I accepted anyway because:

The work was interesting, and it was cool to work on a project with a large number of users. The team was really nice to work with, and I also learned more about Lighthouse and started integrating it into DebugBear.

Billing was a nightmare though. It took over 4 months to get the first invoice paid. There was no consistent point of contact, or a way to call Google vendor support. Instead there were emails like this one:

Thanks for reaching out to bizApps-Oracle Support team for help. This ticket has been triaged by Ticketron, a Google AI powered solution.

Seeing “Oracle” and “Ticketron” in the same paragraph is not encouraging when someone owes you £20,000!

I was told several times that I will get paid with the next payment run, and then waited a few weeks for that to happen and to see if the international transfer would end up coming through.

After not getting anywhere with the vendor team a Google employee I was working with helped escalate and resolve the issue.

#27: Redacted / Agency (Oct 2020 - Nov 2020)

Rate: £500/d
Tech: React
Via: Friend

DebugBear had lost a bunch of revenue at the start of the pandemic, it had been over a year since I’d worked with another developer, and running a self-service business from home by yourself can be quite lonely.

So when a friend mentioned that his team was looking for short-term front-end support I took the opportunity.

Did a bunch of React work for an ecommerce store. It was really good being reminded of how a normal business works, for example it helped me think more about creating a component library and using function components more in React.

#28 DebugBear (since May 2018)

Rate: £26/d
Tech: Node, Postgres, React
Via: Founded company

Started building a site speed monitoring tool after using SpeedCurve at Strikingly.

I’m only counting my personal employment income for the day rate. But I also own the business and hopefully the shares also have some value. I started paying myself £36,000 a year (~£137/d) from November 2021, so the effective rate will definitely start going up.

Growth was very slow early on – I think my product was poor, I didn’t have a great idea of what market to focus on, and it also took a while to get content marketing off the ground.

I also did occasional bits of site speed training and consulting work at around £1000 a day. In YE Aug 2021, 15% of revenue was from services.

Starting a company (as a solo founder)

Advantages:

Disadvantages:

I don’t have any plans to leave DebugBear, but if I think I’ve gained a lot of skills that would be helpful in a new role or when working as a consultant.

I wasn’t great at running the business early on, and I think I compensated by putting in more hours and taking advantage of having cheap access to a developer (me). For example, I built a lot of features that practically nobody uses. I’m happy with where the business has ended up so far, so I’m generally fine with this.

Funding

I have not taken any external funding so far, but did put in about £15k in savings over the first two years. This wasn’t essential, but because of the contract work I was sometimes time-constrained but I did have enough money to pay for ads, cloud hosting, or a coworking space.

I occasionally applied to accelerators, but other than that never seriously tried to raise funding. That’s mostly because I have no idea how to do that, and spending time figuring out how to fundraise felt like a distraction from improving the business.

One potential investor I talked to also said that I have no strategy, which is a good point and was even more true at the time. I don’t have any concrete and ambitious long-term plans for DebugBear, so it’s hard to sell investors on a long-term vision.

Raising funding also means committing to a more ambitious outcome. Selling the business for £500k would no longer be a success if you previously raised money at a £1M valuation.

Other projects

Redacted / Startup (2013)

Met the team at a Startup Weekend and did some work mapping various datasets. Did odd bits of work for a few months. I think the expectations around equity and our respective future roles within the company were unclear.

Ended up getting an offer for only 1% equity and we eventually stopped working together.

Meetups & Conferences (2014 - 2018)

I gave my first meetup talk in 2014 at the London Ajax Meetup, and my first conference talk in 2016 at JSConf Uruguay. I stopped in 2018 to focus on DebugBear.

What did I get out of it?

I also had my first online interaction with someone at Google following the 2016 JSConf Uruguay talk, and that and other things arguably eventually led to the Google contract.

Teaching (2015 - 2016)

In 2015 I thought about getting more into teaching or running courses. I applied for a few teaching assistant roles at coding bootcamps, but didn’t get any offers. This was the feedback after one job interview:

I’m afraid that we’ve decided to offer the position to another candidate who had more relevant classroom experience.

In early 2016, I organized a free coding course in my neighborhood to build up more experience. Learned a few things doing that. I’m not sure if I actually applied for any more roles after that, but generally I ended up losing interest in the teaching side.

Someone from Manning got in touch in July 2017 about creating a course for them. Talked to them for a bit but eventually decided against it as I was busy working at Strikingly and didn’t want the extra stress. Note that this wasn’t an offer, but rather an invitation to submit an audition video or something.

I did eventually end up doing some commercial training related to web performance.

FromJS (2016 - 2020)

FromJS is an experimental data flow analysis tool for JavaScript. You click on a DOM element in the UI and the tool finds where in the code that DOM element was created. It then tracks the element text down to the root origin, for example a string literal in the code or an XHR response.

I spent at least the four months working on this full-time, occasionally taking a break for a year and then returning to the project.

General notes

Big Tech

Until 2017 I applied for various roles at large companies like Microsoft/Google/Facebook, but never heard back.

I did have a few inbound requests over time.

Apple (Aug 2016)

Someone found FromJS, thought it looked interesting, and sent an email titled “Come build developer tools at Apple”.

Final Feedback:

With this particular job opportunity, I think we’re not the right fit for each other. I’m looking for a candidate with more experience ‘owning’ a product over years, as that yields a different skillset that is missing in our team.

Facebook (Sep 2017)

Got an email titled “Facebook Front End”. They mentioned FromJS and some conference talks, but this might just be stuff they picked up from my website after deciding to contact me.

Spent evenings and weekends learning algorithms for a month, but ultimately didn’t pass the phone interview. This was the only interview where I was ever asked algorithms questions.

I was also talking to someone working at Facebook in June 2020 regarding a blog post I had written about Chrome extension performance. DebugBear wasn’t doing well at the time and I was interested in working on developer tools, so I asked if there might be any work that I’d be a good fit for. Was told they’d “ping some folks internally”, but didn’t hear anything back.

Google (Aug 2018)

As mentioned above, I ended up doing some contract work for Google.

Contracting

Advantages of contracting:

Downsides of contracting:

As a consequence of mostly working on short-term contracts I also haven’t built up any experience of having a career within a company and getting promoted. I do really enjoy the freedom and variety of contract work though.

Recruiters

I’ve worked with recruiters a lot and found them really helpful. I generally felt that I could start a new contract role within a week if I talk to enough recruiters.

Generally, the cost of receiving recruiter messages for roles that don’t interest you is low. You can ignore them until you are looking for a new role and then follow up with them.

Some downsides of recruiters:

University

I left university after three months because it wasn’t very fun, didn’t provide much flexibility (e.g which courses to take or going abroad), and I wasn’t good at it.

Advantages of starting work early:

Downsides of not getting a degree:

While it would be nice to have a degree, I think I would have found studying for three years too boring at the time.


Follow me on Twitter
I'm building monitoring tool for Lighthouse scores and Core Web Vitals.
➔ Start monitoring your website