paint-brush
How I Received 3 Front End Engineer Offers in a Tough Market as a Non-CS Graduateby@jereyee
1,096 reads
1,096 reads

How I Received 3 Front End Engineer Offers in a Tough Market as a Non-CS Graduate

by jereyeeNovember 15th, 2023
Read on Terminal Reader
Read this story w/o Javascript
tldt arrow

Too Long; Didn't Read

Discover how a non-CS background led to securing multiple offers as a Frontend/Software Engineer, overcoming challenges in job hunting.
featured image - How I Received 3 Front End Engineer Offers in a Tough Market as a Non-CS Graduate
jereyee HackerNoon profile picture


The market is tough these days - just look at all the CS doomsday posts on Reddit and the hundreds of other applicants ahead of you on LinkedIn. Landing a job can prove to be an uphill challenge, especially if you aren’t from a traditional CS background. In this post, I will share my journey of how I managed to secure three offers as a Frontend/Software Engineer (including one at a social media tech giant, which I eventually chose) despite not having a traditional computer science background.

The Beginning

My forays into coding and web development began when I first took the CS50 and CS50 Web courses by Harvard as enrichment modules in my first year in university (where I majored in Communications). After completing a few initial personal projects, I ventured into freelance work to further hone my skills. Following an internship and an assortment of more polished projects, I believed I was ready to start searching for a full-time job.


By The Numbers

  • Applications Sent Out: 33
  • Heard Back From: 7
  • Did Not Pass HR: 4
  • Did Technical Interviews For: 3
  • Total Rounds of Technical Interviews: 8
  • Offers: 3 (1 startup, 1 mid-sized firm, 1 big tech firm)
  • Total Preparation Period (before first offer): 1.5 months

Setting The Stage

Before starting to look for a full-time job, I would advise any non-CS applicant to begin by getting your feet wet. The grind doesn’t start when you prepare for interviews. It starts the moment you decide to take this path. Learn the basics (through courses and such), get some projects done – and be sure to finish them! After that, seek out exposure.


And by exposure, I mean both in the work sense (through internships/freelancing / contributing to open-source) and the networking sense (getting to know people from the industry, actual CS students, and other developers). Exposure is important because this is a big part of what I’m missing out on without a CS degree. I think I’ve been really blessed to know some really smart and talented people over the years, and they have helped me a ton in my journey.

The Training Ground

Grind75 for Leetcode

Before diving straight into the grind, I went through a couple of online courses and books on algorithms and data structures (if you’re a beginner, I highly recommend Stanford’s Design and Analysis course as well as the book Grokking Algorithms). After gaining confidence in my foundational knowledge, I tackled the Grind75 on Leetcode, completing over 100 of 169 questions. Heaps and recursive patterns like backtracking and top-down dynamic programming were particularly challenging for me. Although my interviews mainly focused on arrays and stack/queue structures, knowledge of tree/graph/linked-list traversals proved invaluable, especially for domain-specific understanding like DOM traversal and how React hooks are implemented. Overall, while Leetcode-style questions only appeared during my first rounds, practicing daily honed my problem-solving skills and got me used to those mind-boggling coding challenges.

Utilizing GreatFrontEnd

For anything front-end related, I used GreatFrontEnd extensively. It’s like a Leetcode for frontend engineers, except that it comes with a wealth of knowledge that helps you both in interviews and in becoming a better developer. I began with the JavaScript utility questions and tried to complete every single easy and medium question. This really helped me solidify my JS fundamentals. In hindsight, starting here was probably the best choice I made.


I think as job-seekers, we’re incredibly fortunate to have such carefully curated resources like these at our fingertips. But sometimes, it can leave us stranded with the paradox of choice. When I set out to find the best prep material (for myself) and weighed all the different options, two main things informed my decision:


  • Credibility (whether the people behind the source have the necessary credentials to be teaching others).

  • Organization (whether the platform/site is organized in a manner suitable for structured, disciplined learning)


GreatFrontEnd checked these two boxes, and I decided to use it as my main platform for learning. It was still essential to supplement my learning with complementary resources.

Bridging Knowledge Gaps

While working through the exercises on GreatFrontEnd, I became aware of specific areas in JavaScript where my understanding was lacking (such as promises, async-await, and various ES6 features). GFE’s structured exercises served as a mirror, reflecting to me the areas where I needed to improve.


To bridge these gaps, I engaged in focused and targeted study sessions. I scoured through documentation, online tutorials, and coding exercises, practicing extensively until I felt confident in each area. This wasn't just about solving problems; it was about understanding the ‘why’ and ‘how’ behind each solution.

System Design

I really wanted to study both backend and frontend system design (see the differences here) to get a more holistic overview of how software architecture works. Daily concerns we face, such as performance, latency, reliability, and data transfers, stem from system design principles.


Understanding the mechanics behind these interfaces often led to enlightening 'ohhhh' moments for me. I began my preparation with a foundational study of databases, delving into various types, from relational to NoSQL, and key concepts like indexing and sharding. This foundational knowledge served as the backbone for my next step: understanding the broader architecture of software systems. I immersed myself in overall system design, learning about component interactions, load balancing, caching, and microservices to grasp how all the pieces of a system fit cohesively.


With a solid understanding of general system design in place, I shifted my focus to frontend-specific design patterns, utilizing the resources provided by GreatFrontEnd. These materials guided me through topics such as rendering patterns in React, performance optimization, and accessibility best practices. To supplement my learning, I used sources like patterns.dev, which offered invaluable insights into front-end design patterns and best practices.

Practicing building User Interfaces in JavaScript

When time permitted, I tackled user interface questions on GreatFrontEnd to apply the concepts I had learned in a practical context. I did not manage to get much done here, but I read through many of the provided solutions.

Finally, The Actual Interviews

These were some of the topics tested for me:

  • System Design (e.g., URL shortener, GraphQL and REST APIs)

  • Object-Oriented Programming (e.g., Todo list, Interface design)

  • Leetcode Mediums

  • Frontend Knowledge (e.g., JS utilities, React, Async JS programming, CSS, React hooks, Redux, Rendering patterns)

  • Practical Challenges (e.g., Design a 3D editor)


In my experience interviewing for frontend roles, Leetcode questions generally don’t appear past the first round. Frontend knowledge and mastery over JavaScript fundamentals proved to be the clinchers. Also, I do believe that questions will be more tailored toward your job scope. Suppose you’re applying for a role in the e-commerce team (i.e., if you’re applying for a role in an e-commerce team, you might expect more async JS questions). The three companies that I interviewed for had very different business objectives and scope, so I faced a wider variety of questions. Testing OOP principles was surprising to me, but it made a lot of sense as it serves to demonstrate your understanding of structured programming, design patterns, and how to effectively model and organize complex software systems.

Insights Along The Way

Be Consistent

Consistency is key. I think I put in around 8 hours on a good day and 3 hours on a bad day. It’s better to study a little every day than to cram all at once. Spaced repetition helps in retaining information.

Revise and Review

Even if you’ve studied a topic thoroughly, go back and revise. Memory is fleeting, and regular revision helps to reinforce your knowledge.

Aim for Understanding, Not Memorization

Strive to deeply understand concepts instead of rote memorization. This understanding will shine through in your interviews and in your work.

Always Ask for Help

Use all the resources at your fingertips. Whether it’s asking on Reddit/Discord/Github/Stack Overflow/ChatGPT, never be afraid to ask and look for help. I’m thankful for these resources at my disposal, for the help from the geniuses at GreatFrontEnd and a couple of awesome friends (and brother) who gave me mock interviews and curated feedback.

Acknowledge Your Knowledge Gaps

It’s important to recognize and admit what you don’t know. This is not only a sign of humility but is also crucial for your learning process. It also helps in interviews, where you can demonstrate self-awareness when asking questions and solving problems.

Be Confident

While it’s important to be humble and aware of your weaknesses, it’s equally important to be confident in your skills and the work you have done. Know your worth.

Luck Matters

Who you meet, the type of interviewers you get, how successful your projects are, etc. – there’s a small element of luck in everything. Recognizing this allows me to not dwell too heavily on my setbacks and instead focus on the things that I can control to further improve my chances.

Some Concluding Thoughts

The last four points were especially important for me, as I struggle a lot with imposter syndrome. Benchmarking myself, my skills, and my projects against my peers and the wider industry, I find myself falling short every time. In this ever-changing field, what you know almost always feels like a speck of dust in an infinite universe. Yet, pushing through the doubts and putting in the work, I still managed to land multiple offers and a job package that I'm happy with in a tough market. If you’re someone looking to embark on the same path but intimidated by the uphill battle against the odds, I hope my journey can inspire you to push forward.