Avatar

Jambo, I'm Julia.

How I Got 4 Software Developer Job Offers In 4 Weeks

#career #reflections

21 min read

I started my first formal software development role about 6 months ago, right in the middle of the pandemic. After taking some time to deliberate over whether software engineering was truly a career I wanted to pursue, I kicked off the process and managed to receive 4 jobs offers, just under a month after starting the application process. A few of my friends have asked how I managed to do this, so I thought I'd write a blog post about my process. I'm as surprised as anyone as to how this all worked out, so I've written this post for posterity - this is as much for me as for anyone else who's about to embark on their own software dev journey. ๐Ÿค“

Let's go back in time

For context, we need to rewind to around the start of September 2020. This may take a while, so feel free to skip to the next section if you just want to read about my job hunting process!

I had exited a tech startup I had co-founded at the start of 2020, and after a month's break, had decided to jump straight into starting another business with one of my co-founders, in a completely different industry. We gave it a good go, but decided to call it a day about 6 months in, after a lot of user and market testing.

Honestly, I was feeling extremely lost at this point and had no real plan of what to do next. I had effectively been running companies up to that point for the last 6 years, and whilst I had learnt a lot from being an entrepreneur, the skills I had painfully gained don't necessarily translate well to specific jobs in other companies which tend to ask for specialised skills and X years of professional experience, working in that role. So what to do?

I knew that of all the hats I had worn during my time as an entrepreneur, the one I enjoyed the most was software development. Prior to co-founding my first startup, I had actually left my finance job, to first go on a 6 month solo travel adventure, before returning to London to attend a full time, 3 month, intensive coding bootcamp. This was 100% one of the best decisions of my life as I discovered a real love of programming there and also ended up meeting 2 pivotal friends who would end up becoming my co-founders. Upon graduation, using our new-found programming powers, we built up our tech platform that would form the core of SaaS mar-tech business.

The first 2.5 years of my startup life was mostly spent building the product, using Ruby on Rails and Angular v1. As we started growing the business, raising more funding and growing the team however, I transitioned away from mostly writing software, to focus on running the operations and growth teams (HR, finance, legal, sales, marketing and customer success). There were more than enough things to keep my hands busy, and it made a lot more sense for the company to hire other engineers who could solely focus on building the product. It was a sad, sad day when I finally retired my code editor, but it was the right thing to do.

For the next 3 years, I didn't really write much code at all. I had my own personal website, written in Ruby, using Middleman, that I updated maybe 1-2 times a month, and that was pretty much it. Life as a startup founder was intense to say the least, and all of my waking moments were spent figuring out how we could take the company to the next level.

Fast forward to the final 3 months of the business however, as we were gearing up to sell and exit from the company, I started contributing to the code base again as the immediate focus at this time was to transition our assets (essentially our code IP), to our buyers. There was definitely a warming up period and a lot of re-learning to be done, considering how quickly programming languages and frameworks progress, but once I got into the flow of programming again, I knew that this was really what I wanted to be doing. It was also at this point when I was first introduced to React.

Fast forward a good few months when I was now working on the second startup. Entrepreneurship was something that I was still enjoying but I was also spending my evenings and weekends learning Javascript and React. Why? Because it was just something fun to do, and I really enjoyed the process of learning, writing code and actually building something anyone can interact with in real time. ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป

By the time we decided to close down the second business, I had to make a choice on what to do next, having been out of "normal" employment for the last 6.5 years. Do I try to go back to finance? Try to find another co-founder to work with? Start another business idea? Try to find an operations role at another startup? None of these felt right to me... but the clue was in what I was spending my leisure time doing - programming! Now was the time to finally get that software development role I had been hankering for since signing up for that coding bootcamp all those years ago, before I was side-tracked into becoming a startup founder. ๐Ÿ˜†

Which finally brings me to the meat of this blog post - how I got multiple job offers in 4 weeks despite not having held a formal software engineering role before.

TL;DR

  • Formerly an investment banker, then graduated from a 3 month coding bootcamp and ran a couple of startups for over 6 years.
  • Wrote production code for the first 2.5 years of my first startup. I then stopped completely for the next few years, before contributing to our code base again in the final 3 months of the business as we were preparing for an exit.
  • After exiting the first startup, I started learning React during my leisure time, as a hobby, as I was working on my second startup.

Preparation phase

Step 1

I started by spending a good amount of time really thinking about whether software engineering was what I wanted to pursue. Things that helped:

  • Writing a pros and cons list and giving myself the time to identify the downsides.
  • Remembering all of the times I felt frustrated when programming hobby projects and how I would feel if that was my day job.
  • Thinking through what I wanted my daily life to look like in 5 years, and asking myself if this next step as a software engineer would get me part of the way there.

Step 2

The next step was to make a list of the industries and companies that I was interested in. Things that helped:

  • Knowing that a massive criteria for me is personal passion and working for a mission-driven company, I wrote down all of the brands that I interact with and use on a daily basis.
  • Listing all of the topics and industries I read about / listen to / watch content from, in my free time.
  • Jotting down industries / companies that I thought could find relevant and value in the experience and skills I already have.
  • Browsing through specific, curated job boards to see if any previously unconsidered industries or companies caught my fancy.

Step 3

I then set up a way to track my progress. The tool I settled on was using a simple Notion table, where I listed out all the companies I was interested in. The column headers I tracked for each were:

  • Interest level - how much did I want the role? Options:
    • Low
    • Medium
    • High
  • Status of my application - what action did I have to take next, if any? Options:
    • To apply
    • In progress
    • Hiring process on hold
    • Waiting to hear back
    • No response - assume dead
    • It's a No for now (aka "Rejected" - this was how I chose to spin it positively ๐Ÿ˜)
    • Offer received
    • I turned down
  • Application date - the date I applied
  • Stages in the application process (I would continuously update this column as I progressed through each company's funnel, by filling in the date and the stage).
    • e.g. 1st round - 20 Oct - Online coding test.
  • Advertised salary
  • Application deadline
  • About - a brief description of the company
  • Company website link
  • Job description link

Step 4

At this point, there was an element of research to be done to fill in my table of opportunities. Essentially, this step involved going through the career pages of each of the companies I was interested in and finding if there were open opportunities I could realistically apply for.

Knowing that I was particularly interested in working at a startup, I also perused startup job boards to identify companies with software engineering roles I may not have been aware about.

At this point, I now have a good long list of opportunities to go after.

Step 5

Just one last thing, but probably the most important thing - making sure you've got your basic CV updated, along with your other social profiles you plan on going to market with. For me, this was GitHub, LinkedIn, Angel.co and my personal website. The thing I really focused on here was how I could stand out from the sea of other developers. For me, that meant NOT focusing on my programming skills, but the myriad of others skills I'd gained from my past lives in finance and as a start up founder. I think the most interesting thing about me is the fact that I'm a unique intersection of:

  • Someone with investment banking skills;
  • Someone with entrepreneurial skills in both marketing-technology and food waste / climate change;
  • Someone with an executive coach diploma, who works with clients in my free time, and who's used these skills in my time as a manager of teams;
  • Someone who's had a track record of trying new things and sometimes succeeding and sometimes failing;
  • Someone who LOVES all things health and fitness, and has done things for the sheer fun of learning and pushing myself like running 8 international marathons, getting a holistic nutritionist certification etc etc. I think you get the gist - what are the skills that only you have because of your unique experiences?

Execution phase

Setting goals to optimise towards

Having come up with a long list of companies (I had about 10 to start with), it was then time to do the actual applications. The number one thing I had top of mind was how to maximise my chances of being able to dictate the role I wanted, rather than just accepting whatever was offered. The 2 goals I therefore tried to optimise for were:

  1. Giving myself adequate time to find a job I was truly excited and motivated by. By this, I meant that I explicitly set myself a deadline of 4 months to find a job. Anything sooner would be a bonus. This allowed me to mentally prepare myself to be comfortable with rejecting job offers or opportunities that didn't feel right, or more like, to not freak out if I didn't have any offers before my 4 month deadline.
  2. Competitive tension. How could I run the process in a way that meant I had multiple options to consider and pit against each other. It's a lot easier to negotiate when you've got fallback options. You'll also suddenly be a lot more in demand when a company finds out other companies are chasing after you as well.

To be clear, with both of the above, I had no idea starting off if I would even have any say or choice in the matter. Who knew? Maybe I'd find it hard to even get one job interview, let alone one offer, but I set out with those lofty goals anyway, because it's better to shoot high and fail, rather than not trying in the first place.

Planning what a typical day looks like

I knew I'd go crazy if I just did applications all day. At the same time, I knew I'd also feel guilty if I didn't feel like I was spending every waking hour and more trying to get my dream role. To solve this, I set some ground rules for myself...because I'm the type of person that likes rules that reduces my need to make decisions.

My personal rules were:

  1. To do a minimum of 2 job applications a day, and a maximum of 3. This perhaps took a maximum of 2 hours a day depending on how much of a tailored application I needed to do. It started off a lot longer, but the more applications I did, the faster it went as I started collating a good range of preset paragraphs I could copy & paste and quickly edit to match particular roles. After my daily applications were sent off in the morning, I would also do a quick scan through of new job openings on the various job boards I was watching and add any particularly interesting ones to my Notion table.

  2. To spend at least 2 hours a day working on coding problems. I used codewars for this.

  3. To spend at least 2 hours a day working on my React side project (I was targeting front end engineering roles). I was building out a COVID tracking dashboard which was very topical for the time. This served as great conversation fodder in interviews.

  4. To spend the rest of my free time doing interview specific preparation. This mostly meant:

    (i) Watching a lot of YouTube videos and generally brushing up my knowledge on the fundamentals of front end development. i.e. HTML, CSS, Javascript.

    (ii) Consuming as much content as I could around software engineering interviews - types of questions asked, how they are structured, what interviewers look out for etc.

    (iii) Keeping up with the latest industry trends through blog posts, podcasts and industry leaders e.g. opinions on React hooks, Typescript, CSS utility classes etc.

    (iv) Crafting my personal story and really nailing down how to sell myself when talking to anyone in the industry. Part of this was also figuring out how to communicate my wider set of skills beyond my limited programming-specific ones, since I knew I'd mostly be on the losing end if I made that the key focus of any job interview conversation.

  5. Synthesising my daily learnings into cheat sheets centred around certain topics and / or interview stages. So for instance:

    (i) Cheat sheet topic examples might be programming fundamentals (what is OOP, inheritance vs. composition, Javascript hoisting, etc.) or React (Redux vs. React context, lifecycle methods, hooks, CSS in JS etc.).

    (ii) Cheat sheets oriented around the interview stages might be for e.g. myself (my personal story, skills, what I'm now looking for etc.), live coding challenge (most commonly used array and object methods, how recursion works etc.), architecture interviews (reminders to myself to start by restating the problem, talking out loud, typical things to look out for like scalability, accessibility, cost, tradeoffs and compromises etc.)... hopefully that gives you some ideas.

Ordering my applications

The order in which I did my applications was extremely important. This is what I did, which I felt definitely led to the competitive tension I was aiming for in the end.

  • The very first thing I did was to activate inbound requests on specific job market places. By that I mean setting up my job seeker profile on Hired.com and Cord, and enabling companies to contact me. I got a lot of conversations started with companies in this way.
  • Applying for roles in companies that were not in my top tier first. This is somewhat obvious I think, because the main thing I first needed was a ton of interview practice after not having been in the game for the better part of half a decade. I obviously didn't want to be practicing on roles that I actually really really wanted.
  • One thing I found really tough was knowing how to benchmark my current programming skill level with the market's. Should I be going for junior roles or mid-level roles (I definitely wasn't a senior, that much I knew!). Speaking to some other engineers I knew, I ultimate set myself the goal of mid-level engineer...thought I actually thought it was completely ridiculous at the time, feeling like I knew nothing at all about programming. I therefore started by applying for junior roles, interspersed with mid-level roles, to get a sense of what the market was expecting. Read on to see how that turned out...

Timeline of events

Alright, so all of this in place, I started making my first applications on the 18 September. The reality of what then happened took me by absolute surprise. Here's the gist.

  • Applications for about 1.5 weeks, with first couple of responses coming in a day or so after applying for online tech tests.
  • First interview was scheduled for the 28 September, for a mid-level full stack role.
  • From the 28 September to 16 October, I was averaging 2 interviews every weekday, non-stop. The maximum I scheduled was 3 a day.
  • It all got a little crazy at one point, where at the height, I had open conversations going with 16 companies. Each company's interview process tends to have a minimum of 3 and an average of 4 stages. The most I experienced for a single company was 8 stages. Talking to 16 companies was therefore getting seriously unmanageable, so I stopped making applications and accepting in-bound requests on 30 September.
  • I received my first job offer on the 14th October. It was a great offer and one that was a genuine contender, so I used this to speed up the rest of my ongoing conversations, with the aim of gathering all job offers by 16 October, in order to make a decision over the weekend by 18 October. I was sleeping about 5 hours each night, barely stopping for breaks during the day in order to cram all the interviews AND interview prep in daily, so I was really ready at this point to take stock, make a decision and end my search process. ๐Ÿ˜ช
  • Also useful to note that once I felt I had gotten enough "interview practice", I really prioritised my top tier companies, by accepting their interview appointments faster, whilst taking longer to respond to companies where my interest level was a "medium". There's a fine balance to be had though, because there are different types of interviews and I needed practice with each different type, so I always tried to have at least one, say architecture-type interview with a medium tier company, so that I wasn't going in cold to my top-tier interviews once I reached that stage in the process with them.

Conclusion

Reflections on the overall process and what I learnt

  • I'm really glad I applied to both junior and mid-level roles. Turns out that all of my offers were for mid-level roles, and I failed to pass the first filter for all the junior roles. ๐Ÿ˜‚ If I had only applied for junior roles, I would've lost all hope and confidence very early on. I'm guessing the reason I failed was because I possibly had too much experience for a junior position, despite not having lots of formal software development experience. I would not have applied for mid-level roles if not for the encouragement of my friends, so I'm writing this as a reminder to myself to not let self-limiting beliefs dictate my actions in the future.
  • I'm lucky enough to have had a lot of experience from my past lives, at playing the role of interviewer and having to hire for different positions. Traits that I really value in a candidate centre around how much I feel I can trust them, how they react to difficult questions / opposing viewpoints and their passion and love for continuous learning. I therefore tried to communicate all of these traits, as best as I could, in my conversations.
  • Regarding trust, I think what worked really well for me was just being super honest about the level of software development experience I did actually have, whilst highlighting all of the areas that I still felt needed improvement. This saved the interviewers from having to probe and find out about my weaknesses themselves, and instead, allowed them to just quickly come to a decision on whether they could accept my current skill level as is and make a judgment on whether they felt I could make up my knowledge gaps in the amount of time they could allocate for this.
  • The reason I felt comfortable doing this was because ultimately, I treated every interview I had as a 2-way appraisal. It wasn't just the company assessing whether I would be a good fit for them, but me also assessing whether the role / company was one that would be a good fit for me. I was lucky that I didn't have a looming deadline over my head (I had enough savings to see me through) so I appreciate that this is perhaps not easy for everyone to do, but I did find this extremely empowering. It really does shift the dynamic of the conversation when a company realises that you're not just a taker, but that they need to sell themselves to you as well. I did this by being forthright about what I was looking for in this next role and company, and knowing my limits. For example:
    • Knowing I wanted to work for a mission-driven company;
    • Wanting to understand the investment that company makes into continuous learning and development of its employees;
    • Adoption of industry best practices like pair programming, code reviews and deployment processes;
    • Company's approach to structuring teams and flexibility in allowing engineers to move across the code base / front and back end; etc.
  • It's ultimately a numbers game. The more applications and open conversations you have with companies, the higher your chance of getting offers! My final stats were as follows (as you can see, there's a bunch of rejections too!):
    • I applied to 10 companies and was approached by 9 companies. That's 19 companies in total.
    • I turned down interview requests / declined to proceed with 7 companies.
    • I got offers from 4 companies.
    • I got rejections from 8 companies.
  • I ran my process in a short and sharp way, basically trying to cram as much as I could into a very intense process. This meant applying, preparing for interviews and learning new things at the same time, which didn't leave a lot of time for proper rest, exercise or any kind of social life really. I was fairly stressed out over this period of time to say the least, but I prefer this way of working to having a more dragged out process. It's not sustainable long term though, so I'm really glad it worked out successfully within a month, but this may not be the best way of working for everyone (there are definitely healthier ways of doing this!).

Final remarks

I've put all of the above in writing not because I think this is THE way to go about a job hunt, but just the way that I did it, based on what made sense to me. This won't work for everyone depending on your unique circumstances, but hopefully offers some snippets of useful ideas. ๐Ÿคž๐Ÿป

To summarise:

  • Be intentional about the role / company / industry you're looking to work in.
  • Create a process and draw up ground rules that you can apply methodically.
  • Treat interviews as a conversation - they need you as much as you need them.
  • Be honest and communicate your weaknesses upfront so they don't need to probe you for them.
  • Focus on your unique skills. This may not necessarily be programming-specific (in fact, having now been a software engineer for 6 months, I've realised a big part of the role has nothing to do with writing code).
  • Allow your passion for the industry to shine through, be curious and communicate your love of learning and progression.
  • Good luck, and keep persevering! It's not easy but keep going!

I'd love to hear what you think. Are you going through a job hunting process at the moment? Do you agree or disagree with anything I wrote? Let's chat on Twitter @bionicjulia.

Web Mentions

Tweet about this post and have it show up here!

ยฉ 2016-2021 Julia Tan ยท Powered by Next JS.