on system design, algorithms, and software careers
teaching data structures & algos to hundreds of students made it clear what's missing
this writeup was inspired by my dear friend Khader - somebody who's always pushing me to grow
"it can't be me; it's the market"
I won't gaslight you. The job market for software professionals in the US is undeniably down, but it's not the market's job to fix your life.
live data, so maybe it'll be up by the time you see this?
Software "engineering" is far too broad a term. It includes everyone from embedded C driver wizards to a guy who built a website a year ago.
There is no degree, comittee, or professional exam to check if you know how software is built.
Enter: System Design
A core feature of software development is the architecting of software systems. Coding agents reduce the marginal cost of each LoC, making elegant architecture all the more important for capturing the benefits of AI.
I won't bore you. If you have no idea what system design is you should check out hellointerview.com. It's a great starting point for understanding what Redis vs Cassandra vs S3 vs . . . is all about.
System Design is best learned in production. My years working on AWS S3 definitely helped, but it's tough to land those opporutnities without understanding the basics.
At this stage focus on understanding, not completing. The goal of system design interviews is to break down the depth of your knowledge. We're looking for those who have the knowledge but can also use it creatively & come up with novel insights on the fly.
Data Structures & Algorithms
I've taught hundreds of students the gambit of data structures & algorithms.
The truth of this stage is, you need to do the reps.
The students I had that didn't excell were largely not putting in the work. Resources-wise, this is the most saturated space in all of software education content.
leetcode remains a gold standard for problem sets and new entrants have sprung up to deal with the understanding of DS&A. I hear neetcode.io is really good.
If you're in a hurry - go through the Blind75. It's meant to be as exhaustive as possible for the fewest questions required.
When I was practicing DS&A years ago, I dedicated my days just to problems. If you put in the work, you will develop a "second sense" for which solution is appropriate to the problems.
Don't focus on memorizing the problem, just focus on understanding why the optimal solution was optimal. If you do this reliably and with enough volume - you win.
Closing out
People lament software interviews for "not resembling the job". In reality, the 2 basic topics above are great for morphing your brain for the thinking required in backend systems development. System design in particular will make you a much more aware developer. I would consider it the closest thing we have to actual "engineering".
Before you start, put together a strict calendar and treat System Design like a college course - learning and evaluating constantly. DS&A is a craft - set aside lots of training windows and you'll fly through problems before you know it. Focus a week on DS&A literature at most before diving head first into problems. Don't overthink that part.