Shared ConvictionField notesAboutContact
← Field notes

Starting in Software Engineering

If you’re starting in software engineering this year, you’re walking into a different job than the one I trained for. Probably the one you trained for too. The one that you spent the last 4 years of college training for.

I learned by writing bad code and having senior engineers tear it apart in review. Well, that’s a lie. I mostly tested my shitty code directly on production, and I had angry users tear it apart by way of downtime. But the product tickets were the training program, and agents now do a lot of them.

So you start higher up, with less practice than anyone before you. In your first year you’ll read code you didn’t write, decide whether it’s correct, and defend that call to someone more senior. Here’s what I’d learn first.

Learn to read code quickly and critically. Most of your day goes to judging an agent’s output, and you can only judge what you understand.

Learn how systems fail. Run something in production, get paged, and work out why it fell over at 2am. An agent will hand you a design that passes the demo and collapses at ten times the traffic.

Learn architecture years earlier than I did. Why this database? Where does the service boundary go? What happens when this queue backs up? What will this decision cost to undo in two years? Nobody asked me those questions until I was more senior. You’ll get them in year one, because an agent can produce three designs in ten minutes and somebody has to pick one.

I can’t promise that last skill stays human for long. Models already compare tradeoffs well, and I expect them to beat most of us at it soon. When that happens, you move up again, to deciding what’s worth building and answering for it when it breaks. I don’t know how long that job lasts either.

So plan on relearning your job several times. I spent years getting good at typing code, and the value of that is heading toward zero. You get to skip the grief.

Originally published on Medium.