Over the last two years, I’ve conducted over 400 interviews for software engineers. I have hired engineers into their first jobs, some self taught and others out of boot camps or CS degrees.
To land a job in software engineering, you need 3 things - the technical skills, the soft skills, and someone willing to take a bet on you.
Technical Skills
The best chance you have at a software engineering job is going to be web development. There are so many startups that just need someone to come in and crank out widgets. React is the number one most useful thing for you to learn if you need a job.
When I say “learn React,” what I mean is build fluency in:
React - Functional Components and Hooks
Typescript
NextJS/Remix
A CSS Framework (Tailwind, DaisyUI, SCSS)
A state framework (Zustand, Jotai, Recoil)
A test framework (Jest, Storybook)
An authentication framework (JWT, Firebase, or NextJS built-in)
“Build fluency” means that you should be able to tell me in an interview what all of these things are, when and why I would use them, and construct demos quickly.
Some tips:
Absolutely use the internet to learn, but don’t use it as a crutch when you are writing code. It’s good to schedule time for coding without references.
Under no circumstances should you ever copy and paste anything. Use the opportunity of “borrowing” someone else’s code to type it out yourself and build fluency.
If you struggled with something, delete it and do it again. It can be motivating to see how much easier it is the second or third time, and odds are you’ll learn something new.
Work on very small projects. I usually recommend a calculator and a login page to start, then games like tic tac toe or minesweeper. After that, build something small that you think would be interesting.
When you’ve gotten sufficiently far along, go back and redo an early project. You’ll probably be horrified at how bad the original one is, and that’s good! This is a good exercise to measure your progress.
Some tactical tips for absolute beginners:
Just use VSCode to edit your project
Follow the tutorials (always, for every technology you use)
Read the documentation (always, for every technology you use)
Constantly ask questions to ChatGPT and Stack Overflow
Basic git and terminal skills are absolutely required. You’re going to be collaborating with other engineers, and this is how you’ll do it, so learn these commands like the back of your hand.
Now you have front-end skills down, which should be sufficient to get a job. If you want to juice your chances though, you should learn some backend skills as well, so you can present as a fullstack1 engineer.
Lucky for you, NextJS and Remix both have fairly easy to adopt patterns for backend. Again, read the docs.
Here, what employers are going to look for is mainly “does it work”? If you have never had a job before, it’s quite impressive to have a good looking personal site hosted2 with any working fullstack application on the site. I recommend Vercel if you want to host something, it’s very popular and they have a generous free tier.
Here’s some of the questions I would expect a junior backend engineer to answer:
What is a database? Why would I choose one database over another? What is a relational vs non-relational database?
What is a data model? What are some data model best practices?
What is an API? What is a request/response? What is request middleware?
How does authentication work?
If all of this seems quite overwhelming to start, I understand. Do your best to find someone who has done it before who is willing to mentor you, review your code, and answer some of your questions along the way. If you don’t know what you’re doing, start small and say “I’m going to build XYZ,” and then google your way to the solution.
I also highly recommend the following for learning the fundamentals:
Soft Skills
You’ll also need a couple of non-technical skills to get (and keep!) your first job in tech. These are: communication, willingness to be flexible, and grit.
Communication
Communication is obviously important in the interview, but also before and after. Before the job, you’ll need to cultivate relationships, not to mention send dozens of applications and emails. The quality of your outbound helps you stand out. I notice immediately when someone sends me an email or linkedin message that’s custom and shows that they’ve done their research, so they go immediately to the top of the pile. On the other hand, I immediately reject people if they send me an obvious cookie cutter email - I really don’t need more spam in my inbox.
Communication is even more important after you get the job. The number one reason I have let go of junior engineers is because they fail silently. I don’t expect junior engineers to know everything, but I do expect them to tell me when they are confused or stuck. The best thing you can do when you start your first job is to grab a notebook and write down absolutely everything that you don’t know, and then ask all of those questions at the beginning or end of the day. I give all of my new hires a notebook for this purpose.
Willingness to be Flexible
You might be the lucky one that gets the perfect gig. Unfortunately, most people breaking into tech, especially from a non-traditional background, probably aren’t going to get everything they want. I had to move to Canada for my first tech job! If you don’t have a good network or community to lean on, it’s going to be tough to get the six figures in the location and industry and company that you want.
The biggest thing you’ll have to flex on early is location and company. Startups are usually a better bet than big companies because they want people who are hungry and capable, and they are willing to be a little more flexible too. The amount of these jobs that open up to you are going to be significantly higher if you’re in a major tech hub like SF or NYC. The reality is many early founders want to build their startup in-person. For juniors, there’s almost no chance of a remote job out of the gate.
Working with your team in office is actually a good thing - you learn so much more this way. If you aren’t in a major hub, you may need to move to a major hub, but take advantage of the opportunity you get to soak up experience from the people around you.
You’ll also need to be a bit flexible once you take the job - usually junior engineers are hired to do the work that nobody else wants to do. Normally this is fine to start, because there is still so much to learn, but it can definitely get a bit dull in the first year for quick learners who get stuck with menial tasks. Stick to it, and just make sure to ask for larger and more complex tasks when you can, so that you can keep learning.
Grit
Up until you get that first acceptance letter, it can be a hard and lonely experience. Self study, in particular, is where I see most people fail. I strongly recommend getting a mentor, a coding buddy, or even joining a bootcamp3. A support structure results in significantly better (and faster!) outcomes.
Once you have the skills, you have to start the job hunt. This is another grind. Expect to send out 10-15 emails per day, 10-15 follow ups per day, and a 5-10% response rate, if you’re lucky. Even with well crafted emails and LinkedIn messages, it can be tough to get a response. It’s a volume game, and it can be tiring but it’s worth it. You have the skills now!
My tips here are:
Do your best to get a warm intro. If you don’t have a warm intro, ask your network for intros. If your network doesn’t have intros, reach out to people on twitter or linkedin for help. An introduction is almost always the easiest way to get an interview, and they usually convert to jobs at a higher rate.
Targeting is important. Look for companies that just raised a seed, Series A, or Series B round, these startups are most likely to be hiring for someone like you.
Include a link to your personal site. Also include a link to a hosted project.
If you get radio silence, follow up after 4-5 days, it’s possible that they are just busy (startups are crazy).
If you get an interview, always ask “What could I have done better?” at the end. That not only shows a desire to improve, but also is typically more informative than “How did I do?”
Again - Some of your messages should be reaching out to someone who works at the company but isn’t necessarily a hiring manager. Ask them if they would be willing to do a quick 15 minute chat and answer some questions about the company.
Now you have the job - congrats! The first 3 months are going to be a whirlwind. The best thing you can do to prove your worth is to start shipping on day 1 and don’t stop. The best junior engineering hires I’ve made have shipped ~4-5 PRs a day. I had one engineer ship 9 PRs in a day in his second month, and that cemented his reputation as a hard worker and a good hire.
A Bet
Someone has to take a bet on you. You are someone who hasn’t ever written code in a production environment, so they have to hire your potential to be the ideal engineer. For better or for worse, often people are willing to place a bet on someone that they know over someone they don’t. That means if you want a job in tech, your best bet is to get to know people early on.
Try to get a mentor, try to talk to people who already have software engineering jobs. Share with them what you are doing, the progress you are making, and get feedback. Go to events, make friends, join a community. The tech scenes in SF and NYC are full of awesome people, and if people see you as a hard worker they are generally happy to refer you to their network. Software engineers are people too, so don’t be shy about reaching out to someone about their experience (hint: non-traditional backgrounds love non-traditional backgrounds).
If you aren’t in a major city, it is definitely harder. There are communities you can join on Twitter or Discord with a bit of digging. It’s perfectly fine to learn how to code from anywhere, but once on the job search it might be worth moving to (or visiting) the city you want to be in, unless you have good connections locally.
I was really lucky to have a good friend from college give me feedback on my early projects and ultimately introduce me to my first job, otherwise I might not be where I am today!
Wrapping Up
There’s a lot to digest here, but if I could leave you with just one piece of advice it would be this: prioritize finding a direct mentor who works in tech, or a bootcamp (or equivalent program) that will provide you with one. Breaking into tech requires a lot of perseverance, and the guidance and feedback from a strong support network is often the difference between success and failure. And don’t give up!
Good luck!
A “fullstack” engineer is an engineer who is competent in both frontend and backend, which is very useful. Usually fullstack engineers are more autonomous and flexible in their work, which can make them more valuable on the job market.
“Hosted” just means that the project is available on the internet. You can think about it like making fries at home (your personal computer) versus selling them at the supermarket (the internet) - you have to package your fries and put them on a shelf.