Becoming a Software Engineer
Entering the industry with no prior experience
So I've seen numerous requests for articles and spoken with people on a personal level who are keen to know how to enter the industry without prior knowledge. This is aimed at individuals who have no experience with software development (i.e. haven't completed a lengthy degree or course) and want to know how to take their first steps.
I will be publishing a separate article (which is closely linked to this one) around how graduates can get their foot in the door - watch this space!
Disclaimer: I have tried to keep this post as short and to the point as possible as I don't see the point in expanding too much on the points, which for the most part are self-explanatory. However, I want to get a good balance of relevant content whilst also being to the point - hopefully I achieved this despite it being an approx. 15 minute read!
Before jumping in, it is worth highlighting that I've been in the industry for over 10 years. I'm currently an Engineering Manager at Moonpig (the UK's #1 online greetings cards and gifting site). Prior to this I've worked in various dev team leadership roles and played an active part in recruiting and mentoring others.
Step One - Gauge your passion
This one is pretty important, especially if you're considering making a career move and joining the software/web development industry. If you're starting from scratch (i.e. fresh out of school/college then the world is essentially your oyster and the risks are lessened to some degree.
Before jumping into the industry and potentially setting your career in stone (OK, maybe more like treacle), it is definitely worthwhile spending some time to ensure you have a passion for what it takes. This can be done in different ways:
Network -> Speak with some developers to understand what kind of things you will doing in the industry. Utilising platforms like LinkedIn and even Instagram can be great for networking with people who are already doing the job and can share their stories
Attend meet-ups -> Yes this one has been a bit more difficult with the pandemic that has hit the globe, but they are still happening virtually. Although most are geared around existing developers who want to learn more things, you can always tag along and maybe even pair up with someone on a coding kata.
You will quickly know whether the technology excites you enough to want to do more. If so, let's continue and look how you can go about learning more!
Step Two - Find you niche
This is probably the hardest step of the process.
So you've already found out that you're excited about entering the industry, but where should you focus your efforts? In a technological world which is constantly evolving, there are new languages, frameworks and services becoming available on a seemingly-monthly basis. It can be very overwhelming, so where should you start?
Front-end, back-end - what?!
So for those who aren't familiar with the industry, you might find that there simply isn't a 'developer' role as such. They often have different titles attached to them, which ultimately defines the types of technologies you will aim to master within that part of the profession.
Here is a whistle-stop tour of the roles:
If you like the thought of bringing designs to life, making accessible and intuitive user interfaces for the end users of an application to use then this is the role for you.
The description of the role on indeed.com as of 2021 states:
A Front End Developer, or Front End Web Developer creates user interfaces for websites. Their duties include coding, using content management tools and liaising with Web Designers.
Over the last decade, front-end engineering has really taken off as a discipline of it's own. You may see jobs advertised as 'full-stack' which are looking for a jack of all trades (developers who dabble in back-end and front-end). I'm not saying it is impossible, but it is definitely worth focussing on a particular discipline to become a true master of the craft.
If you love the thought of handling complex business logic, integrating systems with each other and ensuring systems are built in a way that they can scale to meet the demands of the business, this is the role for you.
Indeed describes the back-end engineer role as the following (somewhat wordy):
A back-end developer is a software professional who develops applications by implementing code on a company's server. While front-end developers work with customer-facing application content, like user interfaces, back-end developers are responsible for connecting data channels or functions on a company's server to actions that allow the application to run successfully. Sometimes, back-end developers work with databases to ensure that applications can retrieve information. Other times, they build components that are essential for the basic functioning of a piece of software.
Similarly to front-end engineering, there are a wealth of different technology stacks which are commonplace within the industry:
- Java & Spring Boot
- C# & .NET Core
- PHP & Laravel
- Python & Django
Unfortunately I can't provide any advice on which path to go down. It is worth looking at which language and framework excites you the most (Python and Go are famed for being easier to learn), but it also comes down to job availability.
Stack Overflow's annual developer insight is a useful way to see metrics from within the industry and can be used to gauge the popularity of certain tech. Check it out here!
As a final note, it is increasingly more common for back-end development teams to handle the infrastructure (collection of systems/platforms) of the systems they are working on. This includes learning more than just the above set of languages and frameworks, so it's definitely worth looking in to ( Amazon Web Services , Microsoft Azure , & Google Cloud Platform are the three market leaders in order of popularity).
Conclusion about roles
Even thought I've just rattled through some of the roles you might expect to become competent in, don't let this deter you.
In short, I know of very competent developers who were originally in one discipline (e.g. front-end) and managed to successfully move into another (back-end), becoming very good at what they do. My emphasis here is to ensure you don't overload yourself with too much.
Step Three - Start Learning in anger
I think it's important to make a quick point - in the software development industry we are ALWAYS learning. When entering the industry, we're more focussed on learning the fundamentals of the technologies we are going to be using, and everything else can stem from there.
With this in mind, there are different ways you can approach learning the technologies and ultimately get yourself ready for entering the industry.
Coding bootcamps such as those run by Northcoders are effectively a crash course in development. They are pretty much always a paid course and provide a great way for those who want to deep-dive into software/web development within a relatively short space of time (circa 14 weeks).
I speak about Northcoders because I have worked with many teammates who are successful graduates of their course - I have no affiliation with them or the content they teach.
The benefit of these types of courses include:
- No prior knowledge required
- Mentors are usually provided as part of the course for a personalised experienced
- Learning alongside like-minded individuals who are as passionate as you are about learning
- Great as a career conversion option for those who don't want to go through a full degree path
- Cheaper than a computer science degree (which ultimately looks at a lot more than just development skills)
Some cons to be aware of:
- They are very fast-paced when you consider the amount of material you will cover
- Some of the deeper computer science theory might be lacking that you would get from a degree
- They cost money, so you will need to make a financial commitment
- There's an inherent risk that you might not get a job at the end of it - be sure to look at the support that bootcamps offer to help you make that next step
See more here:
Online Courses / Self-taught
It goes without saying that there is a wealth of information available to you on the internet in the form of YouTube videos, learning platforms and websites.
Unlike a bootcamp or completing a degree, this option requires a lot of self-control in order to maintain the motivation required to keep learning. Thankfully there are a lot of platforms like Udemy , LinkedIn Learning , Pluralsight plus many more which provide quality content and learning paths for all.
Some pros for online courses:
- Lots of up-to-date courses
- Mostly free (when you consider the likes of YouTube, W3Schools, FreeCodeCamp etc.)
- You can learn at your own pace
Some cons for online courses:
- Quality of content can vary drastically, especially on unmoderated platforms like YouTube
- You probably won't have an experienced developer to lean on for advice, as a result you can pick up bad habits
- You miss the networking / social aspect of an in-person or remote classroom environment
- You can quickly lose motivation when life gets in the way or a problem becomes too tough
So in short, there is a lot of material you can use online. They might not carry the same weighting in an interview as those individuals who have completed a bootcamp, so there will be a larger emphasis on demonstrating your skills through personal projects.
Apprenticeships aren't limited to your trades such as plumbers, electricians or brick-layers. More and more tech companies are offering apprenticeship positions to allow talent to enter the industry.
This method kind of kills two birds with one stone (I prefer to say 'feeds two birds with one seed' as it sounds less cruel 😂) in that:
- You actually get a role within a business
- You can learn whilst on the job
In essence this method of learning the ropes of the industry can be an amazing way to get your foot in the door. The fact that you're already within the industry with an apprenticeship, you've managed to overcome one of the major hurdles of entering the industry in the first place. With this said, you will still have to go through an interview process to achieve your place as an apprentice, which in itself is a challenge and competitive depending on the companies you apply for.
Some pros of being an apprentice developer:
- You're already within the industry
- You will earn while you learn (this is a legal requirement within the UK)
- You can learn from peers as you will be surrounded by other developers who will help mentor you
- You will get to work on real-life production code rather than abstract katas & example applications
Some cons of being an apprentice:
- Your success very much relies on the culture of the company you work for (choose wisely and do your research)
- You will have a lot more responsibility as an individual given it is still effectively a job
- Competition is very tough - getting onto an apprenticeship is remarkably difficult and requires a lot of preparation and commitment to demonstrate your worth. Employers are ultimately taking on a risk in hiring you, so prove you have the potential and drive to learn
This is probably the option which is mostly off the cards, especially for those who are seeking to change career with as a little overhead as possible.
It goes without saying that degrees often provide high-quality content and a nice piece of paper at the end of it. With this comes some greater commitments from yourself from both a time and financial perspective.
Depending on your age and prior learning, you may be eligible to funding assistance in order to achieve a degree in computer science (as an example). It is always worth checking in with the student finance provider in the country where you reside to understand what support is available.
Pros of degrees:
- Provide well-rounded learning of the theory within a subject area (i.e. you will learn more than just how to program, with a focus on things such as set theory, digital logic, algorithms, artificial intelligence etc.)
- You have the support of personal mentors/tutors during your entire time at university
- There's a great social element to being at university
- Degree qualifications are highly-regarded in the industry (probably less so that a decade ago, but still a requirement on most jobs)
Cons of degrees:
- Exceptionally expensive. Most courses in the UK are circa £9000 per annum, which for a minimum 3-year degree will put you in £27,000 student debt. With this said, there are regulations around when you start paying this back through your salary, plus the interest rates are much lower than a conventional loan
- They usually take 3 years to complete, which is a big commitment to undertake (especially if you're still unsure if its the right path for you)
- Some content can be slightly outdated. Due to the nature of the course syllabuses and the bureaucracy around signing the content off, technology will have probably moved on a fair amount by the time you undertake your course
- Courses often overlook some of the wider skills/tools that are used in the industry (source control, build/deploy pipelines, system architecture principles etc.)
To conclude, I'm from a degree-educated pathway into the industry. My first role was a graduate position which sought to build on the foundational programming skills I had learned during my course. I can honestly say that even with a degree, moving into the industry was a massive leap and a shock to the system. In hindsight, I think a bootcamp would have probably made me even more prepared and understanding of principles than my degree itself.
Step Four - Apply for jobs!
By this point, you will have:
- Identified that you absolutely love technology and development
- Identified the area of development you enjoy the most
- Spent some time learning the technologies within your chosen area and feel pretty comfortable with flexing those skills
Now is the fun part, securing your first role! So let's have a look at some of the things you should expect when going through a developer interview process and some tips!
The current job market is excellent. As we are coming out of COVID-19 restrictions (in the UK), there is a plethora of developer roles on offer at varying levels. Finding these roles is your first challenge.
There are some popular platforms that you can use to whittle down to the job of your dreams:
- LinkedIn (I love this platform for its networking capabilities, plus the built-in job board which is becoming more popular than ever)
Top Tip 💡: When searching for a role, don't be put off applying simply because you're lacking a couple of the key requirements of the role. If you have a solid understanding of some of the things, you should be able to demonstrate the right aptitude to learn within the initial phone screen and interview.
Most platforms offer a quick application process through their site. You can create an account, upload your CV and save some of the effort of typing the same thing over and over again.
Top Tip 💡: Try to tailor your CV to the role you're applying for. It helps highlight the strengths you might bring to a particular role. Also stand out of from the crowd and use tools such as enhancv to create an impression.
The application process
Application processes vary between companies, but there is a general rule of thumb that the following stages will happen:
1. Initial phone screen
During the phone screen, the employer (usually a lead developer or hiring manager) will give you a call lasting somewhere between 15-30 minutes. Ultimately they will want to know:
- What attracted you to their company and role?
- What your current skillsets are and where you passions lie
- What you can bring to the business
- Any questions you might have about the role that aren't on the job description
2. Technical test
This is probably the most daunting part of applying for a developer role. Here, you are asked to demonstrate you ability to use the language of your choice (usually relevant to the role) and complete some form of activity that is time-bound.
Again, the tests vary in their complexity, duration and format. For the most part you can expect something like the following:
- Test to be completed in your own time
- Time-bound to no more than 2 hours
- Small activity such as "write an algorithm which calculates whether a word is a palindrome, returning true or false as the return value"
Depending on the role you're applying for, you may even be asked to create some simple APIs with a UI that consumes data from the API and displays it visually on the screen. For a junior/graduate/apprentice-level test, most companies will be looking more at your ability to process the problem and work through logical steps to achieve the end result.
Top Tip 💡: If you don't fully meet the brief within the desired timeframe, don't go overboard and spend longer than asked. There should be opportunity within the follow-up discussion for you talk about your process, where you struggled and how you would continue if you had more time. When I have been interviewing, I'm much more interested in the thought process and the self-reflection that a developer has done during a technical test rather than the end result alone.
3. Technical test debrief & technical chat
Providing you impress during the technical test, you should be invited to some form of debrief session where you can meet some more members of the development team you will be joining.
Some companies offer a "pairing session" where you get to go over your technical test code and maybe even make some amendments or improvements. This presents an opportunity to know what your colleagues are like, how nice they will be to work with, as well as a chance to receive some (hopefully) useful feedback in the process.
Following a debrief, things are usually followed up with a short chat around your understanding of certain technical points. Depending on your niche, this may involve talking about things such as:
- Basic syntactical behaviours within a language
- Simple architectural discussion (think monolithic vs microservice )
- Benefits of an object-oriented language
- Benefits of functional programming
- Benefits of cloud-first approach to infrastructure
Top Tip #1 💡: If you don't understand something during questioning, maybe ask the interviewer to re-phrase it. Sometimes technical language can mask something which you might actually know. If you still don't understand when it has been re-phrased, don't be afraid to say so and use it as an opportunity to ask questions about it and learn in the process - it shows you're honest and willing to learn!
Top Tip #2 💡: Practising your coding technique and seeing how a simple problem can be solved in many different ways can help excel your thinking as a developer regardless of skill level. Completing challenges and coding katas on sites such as Code Wars and Leetcode can help sharpen your skill.
4. Offer made - negotiation time
For the most part, this stage will come after a successful technical test and chat around general themes. Some companies might offer an opportunity to meet the team or even spend a day on-site to get a feel for the culture of the business (something I'd recommend!).
Regardless of your role, you have some negotiation power on your side. Just because you might be entering the industry for the first time, don't take a low-ball offer just because you think you should. You have worked hard to get to this position.
Use tools such as Glassdoor to understand the average salary for your position and location (although remote-first positions are currently shaking up salaries at the moment). Don't feel rude in asking for more that an initial offer.
The rule of negotiation can be seen as:
- Ask for the highest you think you're worth
- Use the market research you've done to justify your worth
- Expect the company to come back with an offer lower than your asking value
- Generally meet in the middle
As you start getting experience in the industry, you might find that businesses start snapping you up and offering more than you originally thought. Every process is unique, so work with your gut.
Firstly I want to apologise for the length of this post. As I mentioned in the introduction, there is a tonne of things to think about when looking at entering the industry.
Each one of the key points I've spoken about here could be (and might soon be) blog posts in their own right. I've tried to cover as much detail as possible to provide people with an insight into what to do and expect, saving some time and confusion along the way.
In short you need to do the following:
- Be certain you have a passion for the craft (dip your toe in the water)
- Think about what area of the industry you feel most passionate about (front-end, back-end, testing etc.)
- Find a mechanism of learning that works for you, your budget and time-constraints
- Apply for roles and be confident in your ability
Thanks for taking the time to read my short book! I really appreciate feedback on the things I write and I am always keen to know what other things might be of interest.