I have two important aims for this post. The first aim is to try to encourage and inspire junior programmers who are thinking about a career in software development. By sharing my story, hopefully, people who are newer within their careers can get a rough idea of how their career progression might progress over the first few years in the industry. There is also another important reason why I'm sharing this story. You will have to read the entire blog to understand that point fully. As a sneak insight, the point I will discuss in detail is the difference between being an employee and being a business owner
Before we begin, I will introduce myself to anyone new to this site. My name is Jon and I am based in the UK. I have been a professional developer for around 20 years. I started off as a C# developer, and after a few years, I moved into the technical/solution architect space. In this guide, I will cover everything that happened within the first 8 years of my career. I will discuss my first salary and talk about all the successes and failures during that time. After 8 years I was making over 100K a year. This happened in a period when comparatively 100k was a lot more than it is today! If you want to learn my secret, ... you will have to continue reading in order to learn what I mean by that 🔥🔥🔥
Support desk/CMS Developer (Employee) - 2006/2008
💰 20k per year
This was my first job straight out of university. I was hired as a C# developer, however, the interviewer never asked me if I knew C#... I did not. On my first day, I was eager to start learning C#, however, the company threw me a curveball. I was told I needed to start off at the support desk and when I understood the product, I could move into the dev team.
After a year, I was still working on the support desk and doing pretty well, however, I was getting more annoyed by the month that I was not a developer like I was promised. To take matters into my own hand, I decided to put my foot down and make an ultimatum. I told the company that they had to make me a developer or I would hand in my notice. Magically, despite being told it was impossible to transfer me to the dev team, five days later I was a developer 💥💥💥.
It was during this period I learnt C# and how to write object-oriented code. I got a single pay rise while I worked here to 27K. One aspect of the new job was being sent around the country to talk to clients. Often I had to pay for my expenses and then claim them back. A claim could take over a month before I saw the cash again. On 20k a year after rent, you do not have much money. Putting company expenses (that would often be 1k+ a month) on top of that meant that I hardly had any money to spend on the weekends, so I asked the company for more!
This is the point where I was told I could get more, however, I had to wait 12 months. 3 months later, the company was brought out and a 15-month pay freeze was put in place. Annoyed, I found another job that offered to pay me more money and didn't require me to expense everything. Off I went, job number 2!
Web Developer (Employee) - 2008/2010
In this role, I had to use the product my last company made. I was now a CMS developer at a digital agency that made websites, rather than a developer in a services team within a product-driven company. This might sound like semantics, however, I encountered an unexpected shift in the expectations of the job, for the worse.
I did not do as well in this role. My lack of experience in office politics and working with other disciplines made me feel like I was treated unfairly. This resulted in me slowly having a worsening attitude over time.
The agency worked following a typical model that I have seen played many times. The company said yes to every project regardless of resources. They then hired as many people as possible to do the work. The work usually went badly as it takes time to onboard new people. This approach to continue to hire new people for each new project works until it doesn't. At some point in the future, there will be a period when winning new work gets tougher, which eventually leads to fewer projects.
When this period occurs, eventually the company is left with not enough work and too many people. The answer, get rid of some people! In my situation, about a third of the employees at the company were let go. I was one of them. In this time I had a minor pay bump from 31 to 32K!
Web Developer (Employee) - 2010/2011
💰 32K with a promise of 35K after 6 months:
As I hated my previous role, I was tempted to give up on coding during this period. As I needed to pay the bills, I applied for a job that I wasn't keen on, they said yes, and I accepted it. I only lasted 6 months at this place. The reason for this was my lack of experience while negotiating
Whenever you negotiate the terms of a new job, make sure you get it written down! It doesn't matter what perk you are promised, whether it be a future pay raise, a signing bonus, or a commission, If it's not detailed on paper, it's all hot air and sales patter! When I started this role I was promised a 35K pay raise after 6 months. After 6 months the owner acted like the agreement was never made, so I left 💥
Senior Developer (Employee) - 2011/2012
💰 35K (with bonuses):
I failed my probation in this role which means I only lasted 9 months. I think I failed again due to communication. I was tasked with building a feature and owning it. Someone told me the project would be easy, 9 months later I was still working on things and uncovering bugs and nuances. Instead of taking someone's word and going with the flow, if I had done a discovery at the start, made a plan and communicated it correctly, things would have been different.
At this point, it's a good time to recap my failing career. I was pretty unhappy with the way my career had gone in the last two years. Redundancy, bad negotiations, and a failed probation. This lead me to believe I just didn't have the natural skills to be a developer.
At the time two important things happened at this job. The first was on mindset and had a big difference in my life (and still does). That company had a free library of personal development books. In my spare time, I started reading a few of these books. Some of these books influence Bounce, Freakonomics, and the Tipping Point. It was reading these non-tech books that I started to realise I was naturally not a good developer, but I could become one 🤔
If I wanted to get the same results as others, I had to spend more time learning about development. It was through these books, I came to accept that life is not fair, however, these are the cards I had been dealt in life. I could either change careers, carry on as normal and run out of jobs quickly (I had worked at the two biggest companies in my area), or, commit to dedicating as much time and energy as it took to become good.
I choose option 3 and started reading 10-20 programming/project management/personal development books, every year. It is now 15 years later and I still follow this habit today. The reason why I have a blog read by over one million people is that I invest more time writing each week compared to others. After enough years, the knowledge starts to compound and anyone who follows this path will become a lot better at their craft.
Senior Developer (Contractor - 18 months) - 2012/214
💰 £275 per day/64K a year
I kind of had a feeling I would fail my probation in my previous role, and one Friday night I was moaning about my situation to a friend. That friend said she could get me a 6-month contracting gig. The role would be to design and implement a website for a large airport. I had never considered contracting before in my life, however, at the time I had nothing to lose so I went for the interview and got the job. The initial contract was for 6 months, which was eventually extended to 18 months. I went to the interview and agreed to the terms while I was still working in my current job. I timed it so the day after I failed my probation, I started the contracting job the day after 😉
About halfway through this first contract, I had that lightbulb AHA moment. I had spent years trying to do well at all these different jobs, however, I was not good at playing office politics. Regardless of how good at coding I could become, I was always going to hit a pay limit being a permanent employee in the town where I lived. With contracting, I could focus on the part of the job I enjoyed, being good at design and coding, while at the same time I could focus less on getting a promotion and working my way up a corporate ladder. COntracting would pay more, than any perm job I could get.
After gaining the confidence that I could do this as a career, the next step was to figure out how to land the next gig. I lived in an area in the UK where there weren't many contracting options. If I wanted to stay contracting, I needed a way to ensure I won the few interviews that came up. To help me stand out in this very limited job market, I created a blog and started explaining in articles how to build the components I designed at work. This was a time before Stackoverflow and Medium. Youtube was not really a thing yet, so a blog was the only real option.
Towards the end of my contract, I had a recruiter contact me. He had found me via my website and told me about a technical architect job in London. I took the two-hour train up for the interview and was offered the role.
Technical Architect (Contractor - 4 months) - 2014
💰 £325 per day/74K a year:
This position was the first time I was classed as a technical architect. The gig was at one of London's largest agencies. The initial ask was to design and manage a team to build a website for a supermarket. The contract was for 3 months initially and it went well. As the agency was happy enough with me, I was added to a few more projects. The company also wanted to extend my contract, however, the client whose website we were building had some problems. These problems were pretty big and they made the news.
As the client had issues, they decided to pause all their projects with the agency. With no work, the agency had to let me and a number of other people go. This type of situation is very common when contracting. This situation highlights the risks you need to live with. Despite being good at a job, you can lose a gig because of any number of outside factors. I had to find another contract!
Senior Developer (Contractor - 8 weeks) - 2104
💰 £375 per day/84K a year:
After a week or so of searching, I landed another contract. I timed it so I managed to finish one gig and start the next the following week. This job didn't go as well as the first London job. Out of the blue, in my third week, the manager said things weren't working out and he let me go.
I'm still not too sure why he let me go, but, I think the main issue was down to experience. I had slightly more than him on project delivery and I think I said a few things that made him nervous.
The background to this story is that I was hired alongside two other developers. I had built a similar system to the one this company needed in my permanent days. At the time I could only do back-end development and when we started this project we didn't really have designs finished, there was no HTML ready to be converted into a CMS, and there wasn't even a clear requirements document. The manager's job was to create the spec, he had been at the company for 6 months but there was no documentation, or anything useful. We were working as 'agile' which obviously meant no planning needed, no project management tool like JIRA, no sprints, just build stuff... hmmm.
He definitely had no realistic idea of timescales. He promised to build a system in 6 months. I told him it was impossible and would take a few years. The system was the same size as one of my first jobs. In that company 30 devs managed the system.
The three of us, with no spec and no signed-off designs, were meant to build a website with 12-15 templates from scratch, create and integrate the HTML within a CMS, add all orders to the company call centre software, set up payment processing, handle invoicing, set up and configure all the infrastructure and all the disaster recovery steps, all in under 5 months was not feasible
This happened in the days before Stripe and Shopify. Back then you had to custom-build everything. At a minimum, these projects typically took me and a team of 8-10 about 15 months.
After raising my concerns to the manager, a few days later I was let go. Years later, I learnt that after 2-3 years the project was still in development and the contractors were let go. The company got an agency involved to finish it off. The lesson, even if you can be right at times, keeping your mouth shut when contracting will make you more money. As I liked the company and I have principles, I could not agree to a 6-month contract, and pretend it would be finished in that time just to take a paycheck.
As a business owner, I live by my word. If I commit to building something in 6 months, I will make it happen. If I do not think it's possible, I will say so.
Strangely on the morning I was let go, I phoned my recruiter to tell him the news. He told me about an interview happening later that day. Within the same day, I was offered a new contracting gig for a longer period and more money! Who am I to complain?
Senior Developer (6 months) - 2014
💰 £425 per day/96K a year:
This contract is not the end of my story, however, in this blog post, I am only talking about the roles that took me to my first 100K. £425 a day results in 96K a year. This is 4k less than 100K, so you might be wondering where the extra money came from.
As I was self-employed, asides from contracting, I was also making a little bit of additional money through freelance work. That year alone, I also made a little over 10k in freelance projects.
As a contractor, you are free to work on multiple things at the same time. Granted its hard work, however, it pays more money 💰💰💰
All in all, that year I made about 108K!
While I was an employee, in four years I went from 20k to 35k. When I become self-employed, I managed to jump from 35K to 110K... not too bad for someone who was going to give up coding at one point!
The point of this story is to hopefully show people that career progression isn't linear. At the beginning of my career, I failed at three jobs in a row and nearly quit programming, however, just from job swapping so frequently, I ended up making more than the people I left behind.
Switching from being an employee to being self-employed had the biggest impact financially. This move allowed me to remove the limits found within a perm position. Making an extra 60k a year is nothing to scoff at.
If I hadn't failed my probation, I would never have taken the risk of contracting, or, I would never have taken it so soon. At the time, losing a role can seem like the worst thing in the world, but when you reflect on it years later, it can be much better to stop working somewhere where you are not happy and get forced to find a new role, compared to quite quitting and simply go through the motions just to get a paycheck.
To sum my story up, my personal takeaways from this are:
Job switching when you are a junior will result in your getting paid more
Investing time and energy in self-improvement and learning will result in your getting paid more
Learning to promote yourself in some way will help you to get paid more
Being self-employed removes barriers. These barriers will add additional risk, however, the sky is the limit in terms of how much you make. You will need to learn to live with that risk if you want to go this route!
Happy Coding 🤘