Skip to main content
  1. Blog Posts/

308: The Permanent Redirect to Your Next Software Job

·3220 words·16 mins· 0 · 0 ·
market guide

Introduction #

It is important to note that the content of this blog post primarily pertains to the UK, and more specifically, the London job market. While some information may also apply to other geographical regions, my expertise and familiarity are rooted in the context of the UK.

Recently, I’ve observed a trend among my colleagues and acquaintances, primarily composed of junior to mid-tier engineers, who are opting for changes in their jobs, roles, and responsibilities. This is a common occurrence given their considerable growth potential.

Frequently, I find myself assisting individuals in understanding the intricacies of the interview process, suggesting potential platforms for job search, preparing for interviews, and providing insight into the skills needed in various sectors, such as front-end or back-end development.

The goal of this post is to shed light on the current career landscape and arm you with the essential information you need before you embark on the job application process.

Where to look for positions? #

If you are actively seeking a position, I recommend setting up accounts on the following websites #

Cord is a highly recommended platform for developers actively seeking new positions. The platform offers an intuitive filter that aids in locating jobs based on your preferred job title, experience, sector, and compensation. The quality of companies featured on Cord is generally high, and the website offers a smooth user experience. #

Indeed is another excellent resource for developer positions, particularly when using the filter function and the ‘Quick Apply’ feature. A useful tip when using Indeed is to input your sector, such as ‘Developer’, and add a filter for your preferred language. For instance, +java developer or +java engineer will yield job listings that explicitly mention java, thus facilitating a more efficient job search and application process. #

Although I have comparatively less experience with Monster, it is still a viable platform for job search. You might find less competitive positions here. Monster’s user interface is easy to navigate, and the platform has a ‘Quick Apply’ feature, making it ideal for mass applications within your specified criteria.

Streamlined Strategies for Rapid Job Search #

Many job-seekers operate under the belief that they should scrutinize every job listing and ensure their skills perfectly align with the job specifications before they consider applying. However, in the current dynamic job market, this approach might not be the most efficient or successful.

The key to securing a job promptly is to concentrate on maximizing the number of appropriate applications you send out each day. For our purposes, an “appropriate” application is one where your skills correspond with at least 60% of the job specifications.

Here are some practical steps to utilize this strategy on various job search platforms

On Cord #

  1. Employ the filter function to match your skills with the job specifications and compensation expectations.
  2. Generate a list of potential job openings.
  3. Briefly review each job listing, focusing on the requirements and compensation sections.
  4. Use a professionally crafted text template to apply to each role. This template should be generic and adaptable to cater to different recruiters.

On Indeed #

  1. Utilize the filter function to match your primary skills with the job specifications and compensation requirements.
  2. Generate a list of potential job opportunities.
  3. Click on any job listing that offers a fast apply button.
  4. Review the job specification briefly to ensure your skills align with the requirements.
  5. Use the ‘quick apply’ feature, autofill all the necessary details, and ensure that your CV is automatically attached during application.

Monster shares similar functionality with Indeed, so the same strategies can be applied to this platform.

Keep in mind, it’s impractical to fully vet every company during your initial application phase, as you have limited information about the organization’s current status or even whether they will respond to your application. A more effective approach is to maximize the number of applications you submit in a condensed time frame, then assess the potential employer once you receive a response.

Apply for That Job You Don’t Think You’ll Get #

It’s common to come across job listings that seem slightly out of reach, based on the qualifications and experience they demand. You might be tempted to skip these listings, assuming you won’t get the job. However, it is crucial to recognize the potential in these situations and consider applying, despite your initial reservations.

You may be surprised by how often you progress to the interview stage, even when you believe your chances are slim. Employers don’t only look at qualifications; they also consider a candidate’s potential, adaptability, and willingness to learn. The fact that you took the initiative to apply can reflect positively on your motivation and confidence, traits highly valued by recruiters.

Furthermore, job titles can be deceiving. They often don’t fully encapsulate the expectations of the role. An intimidating title might mask a role that aligns well with your skills and experience. By reading through the job description and responsibilities, you can gain a better understanding of the position and decide if it’s a good fit.

Lastly, companies often urgently need to fill positions, and your application might arrive at the perfect moment. Even if you’re not an exact match for their ideal candidate, the employer may be willing to provide training or accept alternative experience to ensure the role is filled promptly.

In summary, don’t let self-doubt or fear of rejection prevent you from exploring potential opportunities. Apply for that job you don’t think you’ll get; the result might just surprise you.

Crafting an Effective Resume Tips and Strategies #

Crafting a comprehensive and engaging resume is a critical step in your job application process. Given the volume of resumes that recruiters process daily, it’s essential to present your information clearly and concisely.

Optimising Your Resume for Automated Software #

One effective strategy is to include a table listing tools and technologies in your resume. This is particularly useful when automated software scans your CV, as it provides a clear overview of your skills.

Here’s an extract from my CV:

Java (8 to 17)Spring BootMicronaut
MicroservicesAgile DevelopmentTest Driven Development
Distributed SystemsPostgres, MySQL, OracleJUnit 5

Articulating Your Experience Clearly #

Companies often use pay bands when determining compensation. Hence, it’s important to clearly articulate your experience across different technology sectors. Doing so makes it easier for the company to evaluate your expected compensation.

Consider creating a section titled ‘Experience’, where you specify the cumulative experience you have garnered through formal and informal education, contracts, client projects, and full-time work. You can present this information in a table format.

For example:

Front-end Development9 years
Back-end Development8 years
Cloud (AWS)4 year
Development Operations2 year

This approach was instrumental in a personal experience when I applied for a Senior position. The company, after considering my comprehensive experience and skills, encouraged me to apply for a Technical Lead role instead.

Initial calls with recruiters #

On applying for a position, the first stage typically involves screening by a recruiter or a member of the company’s HR team. Although these individuals may not have technical backgrounds, they usually possess a reasonable understanding of technology. Hence, it is essential to articulate your technical knowledge in a language that both parties can understand.

During these calls, you will typically discuss high-level information about your experience, tools, technologies, notice period, and expected compensation. You might be asked about your current salary, but remember, you are not obligated to disclose this information if you do not wish to.

If successful in the initial call, you will usually progress to one of the following stages:

  1. A take-home test.
  2. A technical interview, which may include systems design.
  3. A culture fit interview.

I will not delve deeper into these stages as the expectations and process can vary widely across different companies.

What job title should I apply for? #

The expectations for different sectors and companies can vary substantially, but the following should serve as a general guide

Junior Software Engineer #

Responsibilities #
  1. Assist in the design, development, and implementation of software systems as per the given specifications.
  2. Write clean, scalable, and efficient code using software development best practices.
  3. Perform software debugging using appropriate testing methodologies.
  4. Collaborate with other team members and stakeholders to meet organisational objectives.
  5. Participate in code reviews under senior guidance to learn about common mistakes and best practices.
  6. Document technical knowledge in the form of notes, manuals, and flowcharts.
  7. Understand and meet the deadlines set for the completion of a part of or the entire project.
Skills #
  1. Knowledge of one or more popular programming languages (e.g., Python, JavaScript, Java).
  2. Basic understanding of data structures and algorithms.
  3. Familiarity with the software development life cycle (SDLC).
  4. Problem-solving and logical thinking skills.
  5. Basic understanding of version control systems (e.g., Git).
  6. Good written and verbal communication skills.

Mid-Tier Software Engineer #

Responsibilities #
  1. Design, code, test, and debug complex software while developing new functionality, and enhancing existing functionality, in order to satisfy customer requirements, both internal and external.
  2. Participate in full development life cycle including requirements analysis and design.
  3. Review the design and code of junior engineers and provide feedback.
  4. Collaborate with other software developers, business analysts, software architects, and IT professionals to implement solutions.
  5. Mentor junior software engineers and share knowledge to improve team skills.
Skills #
  1. Proficiency in multiple programming languages.
  2. Solid understanding of data structures, algorithms, and software design principles.
  3. Experience with database management and proper database design.
  4. Experience with testing frameworks and quality assurance.
  5. Strong problem-solving skills and attention to detail.

Senior Software Engineer #

Responsibilities #
  1. Lead the design, development, testing, and debugging of software applications.
  2. Develop high-level system design diagrams for program design, coding, testing, debugging and documentation.
  3. Coach and mentor junior engineers and provide code reviews.
  4. Interact with stakeholders to understand their requirements and guide the team in product development.
  5. Research and introduce new technologies and ideas for software improvements.
Skills #
  1. Mastery of several programming languages and ability to pick up new ones quickly.
  2. Excellent understanding of data structures, algorithms, and software design principles.
  3. Experience in leading a software development project.
  4. Strong problem-solving skills and attention to detail.
  5. Excellent communication skills to interact with stakeholders and team members.

Team Lead #

Responsibilities #
  1. Lead a team of software engineers in the development of software applications.
  2. Coordinate with the project manager for necessary resources and project needs.
  3. Identify, track and communicate project progress, milestones, and risks.
  4. Review and approve code and design work of team members.
  5. Provide technical guidance and mentorship to the team.
Skills #
  1. Technical proficiency in software development and familiarity with various languages and frameworks.
  2. Strong leadership skills and experience in leading a team.
  3. Excellent problem-solving skills and ability to make decisions under pressure.
  4. Excellent communication skills to interact with team members and stakeholders.
  5. Understanding of project management principles.

Technical Lead #

Responsibilities #
  1. Guide the technical direction of the team, including the technologies used, coding standards, and development processes.
  2. Oversee technical aspects of project delivery and solution delivery.
  3. Solve complex technical issues and make decisions on the use of resources and performance trade-offs.
  4. Collaborate with stakeholders to understand their technical needs and develop solutions.
  5. Mentor team members to develop their technical skills.
Skills #
  1. Extensive technical knowledge and experience in software development.
  2. Leadership skills and experience in leading technical teams.
  3. Strong problem-solving skills and the ability to make decisions on complex technical issues.
  4. Excellent communication skills to convey technical decisions and their reasoning to non-technical stakeholders.
  5. Ability to learn and adapt to new technologies quickly.

Engineering Manager #

Responsibilities #
  1. Manage a team of software engineers, including their training and development, guidance, and performance evaluations.
  2. Oversee the design, development, and implementation of software systems.
  3. Collaborate with other teams, stakeholders, and customers to define the product roadmap.
  4. Allocate resources effectively for projects and manage budgets.
  5. Drive the adoption of best practices in software development within the team.
Skills #
  1. Strong technical background with a solid understanding of software development processes.
  2. Strong leadership skills with the ability to manage, mentor, and develop a team.
  3. Excellent communication and interpersonal skills.
  4. Strategic thinking and problem-solving skills.
  5. Experience in project management, including scheduling, budgeting, and resource allocation.

What should you revise? #

As a general rule of thumb it’s good to revise the following sectors, I have also attached some example questions to help you revise further:

Your language(s) of choice #

  • Review and practice fundamental syntax rules, operators, and data types.
  • Build a small project from scratch without using any resources or references.
  • Read a piece of complex code written by someone else and try to understand it.
  • Explain to someone else or write down how memory management works in your preferred language.
  • Question: How would you handle exceptions in your preferred language?

Your framework(s) of choice #

  • Develop a small application that utilizes the most common features of the framework.
  • Review the documentation to understand the core principles and best practices.
  • Try to contribute to an open-source project that uses the same framework.
  • Question: How would you manage state in your preferred framework?
  • Question: How would you implement unit testing in your preferred framework?

Data structures #

  • Write functions to implement basic operations (insert, delete, search) for each data structure.
  • Compare the time and space complexities of different data structures in different scenarios.
  • Draw diagrams to visualize how each data structure works.
  • Question: Why would you choose a HashTable for fast lookups and what are its disadvantages?
  • Question: When would it be more appropriate to use a Tree instead of a LinkedList?

Algorithms #

  • Implement basic sorting algorithms from scratch.
  • Solve problems on platforms like LeetCode and HackerRank.
  • Analyze the time and space complexities of different algorithms.
  • Study about greedy algorithms, dynamic programming, divide and conquer strategies.
  • Question: Can you explain the differences between breadth-first search and depth-first search?
  • Question: How would you approach solving a problem using dynamic programming?

Communication #

  • Practice active listening: Fully understand what others are saying before responding to prevent misunderstandings and to show respect to the speaker.
  • Give clear and concise explanations: Try explaining a piece of your recent code or a technical concept to a non-technical friend or family member.
  • Engage in group discussions and debates: Join programming communities, forums, or local groups to share your ideas and get feedback.
  • Write effectively: Improve your writing skills by documenting your code, writing technical blog posts, or articles.
  • Improve your presentation skills: Practice explaining a project or concept to a group of people. Record your presentation and review it critically for improvements.
  • Question: How would you explain a complex technical problem to a stakeholder with no technical background?
  • Question: Describe a situation where you had to convince your team or manager to accept your idea. What was the outcome?
  • Question: What steps would you take to deal with a misunderstanding between team members on your project?
  • Question: Can you explain the concept of ‘recursion’ in simple terms as if you were speaking to someone without a computer science background?
  • Question: How would you handle a situation where you and a colleague have different views on how to solve a problem?

Tools and Technologies #

The necessity of updating one’s knowledge and skill-set regarding external tools and technologies pertinent to your specific technology stack cannot be overstated. The specific tools and technologies that one should focus on, of course, depend greatly on the particular type of engineering work one is involved in. However, a good initial focus might include open-source tools and technologies that are universally beneficial, irrespective of the technology stack. Examples include Docker and other containerization tools, as well as monitoring and observability tools like the ELK stack or DataDog. For those engaged in backend development, distributed computing tools such as ZooKeeper and Kafka are worthy of investigation.

While it isn’t crucial to comprehend the minute technicalities of how each tool operates, understanding the capabilities of these tools and their practical applications is of paramount importance. The familiarity and ability to use these tools can, at times, be a deciding factor in securing a position within a company.

Take, for example, a previous systems design interview I attended where I was asked to discuss distributed scheduling. Fortuitously, I had been working on a personal project that involved solving this exact issue and had developed a compact application to demonstrate my understanding of ZooKeeper’s capabilities. If I had not invested in researching this area beforehand, I could have faltered in my response, even though I had never implemented such a system at the production level. The learning from this experience underscores the importance of staying updated with relevant tools and technologies in your field.

Strategies for Revision #

One of the most effective ways to revise and assimilate new knowledge is by actively engaging with it. Here are some strategies that can help you cement your learning

Develop Personal Projects #

Practical implementation of concepts is an excellent way to not only test your understanding but also to consolidate your learning. By developing personal projects or demonstration applications, you can experience firsthand the challenges and intricacies involved. These hands-on projects can not only deepen your comprehension but also provide tangible evidence of your abilities, which can be beneficial when job hunting.

Document Your Findings #

Regularly documenting your findings or starting a blog about your learning journey can help structure your thoughts and reinforce your understanding. This practice enables you to reflect on what you’ve learnt, articulate it in your own words, and identify any gaps in your knowledge. Moreover, it can serve as a useful reference for future studies and might even help others who are embarking on a similar journey.

Share Publicly #

Social platforms such as Twitter, LinkedIn, or GitHub provide an avenue for you to share your learning journey with a broader audience. Publicly sharing your progress can garner feedback from a diverse range of individuals, potentially providing new perspectives or insights that you might not have considered. It also helps build a sense of accountability, which can motivate you to stay consistent and diligent in your learning journey.

Teach Others #

If possible, consider teaching someone else what you’ve learned. The process of explaining a concept to someone else requires a deep understanding of the topic and can uncover gaps in your knowledge. It’s often said that “to teach is to learn twice”, and this can be an extremely effective method to solidify your understanding. It also allows you to give back to the community and help others learn, creating a virtuous cycle of knowledge sharing.

Conclusion #

The journey to securing a desirable position in the London tech job market may appear challenging, but with the right approach, tools, and mindset, it becomes significantly more manageable. Remember to utilise the wealth of resources available, from online job platforms to community networks, all while refining your skills to align with market demands. Most importantly, don’t limit yourself. Apply for jobs that might seem slightly out of reach, keep learning, and show resilience in the face of rejection. This is a dynamic field, and the opportunity to learn, grow, and succeed is immense. I hope this guide provides you with some clarity and equips you for your job search. Best of luck with your career pursuits in the exciting landscape of the London tech job market.