I wonder: if the AI is writing all the code, what value am I bringing?
In an attempt to keep my critical thinking and coding skills sharp, I sometimes foolishly try to debug errors or implement a feature myself. But it feels like wasting time when an agent can do it in a fraction of time.
What is gonna be sought after in the coming years: someone that persevered with manual coding and debugging but is slow and uncomfortable around agents, or someone that has little coding and debugging skills left but knows how to orchestrate dozens of agents effectively?
I'm curious to hear what other software engineers on HN's approach is.
AI opens up new forms of debugging. You can trace through a bug on the OS level and understand what it's really happening - we traced some bugs to how Android handles wifi based around location access on different versions. We give it a 20k line log to reproduce the exact flow when certain bugs happen. We make it write hypotheses on why it's happening and how to fix it, and break that down into logs.
There's plenty of engineering work to do with production code, especially on front end where you're dealing with different manufacturers, multiple cultures (some using , or . as decimal separators), RTL languages, broken abstraction layers, hardware permissions, etc, etc.
Someone needs to fully understand the big picture around how all these pieces go together. AI is still poor with writing larger things. Your uniqueness is in how quickly you can pick up the big technical picture.
Anyway, when it comes time to make a project, I first figure out what I want to build. Then I research the steps I would need to take to build it. For example, if I wanted to make a webapp that has a deliberate SQL injection for a CTF, I would need a database, a login page, and a dashboard to navigate to after logging in. For larger projects, I might use AI to help me figure out the components required.
Then I save those notes and then focus on a single component. Continuing with this example, I'll start with the login page. I'll get AI to generate the code on that. Sometimes it doesn't cooperate and makes the SQL query secure, so I have to manually go in there and fix it myself, rather than ask it to redo it again. I get serious imposter syndrome whenever I use AI to generate code, so I make sure I can understand some of it before I run it, and I try to manually fix bugs before I ask for help.
Once all the components are built, I tie them all together and start testing the program.
What wouldn't an average person off the street be able to do?
I think you're mistaking typing characters on a keyboard for coding. Designing a system is coding. Knowing what refactorings to do to ensure things evolve in the right direction is coding.
Being able to recall all the syntax has lost value due to AI, but designing and leading the feature development hasn't and that can't (yet) be trusted to AI.
I'm not too worried about keeping skills sharp - if I'm ever put in a situation where they become relevant again I'm confident I can just relearn them.
Where it does not helps, software engineering is a field where you have to actively practice it to make sure your mind remembers the trade offs, different paths you have evaluated before, sort of building muscle memory. Using LLMs mean that eventually your debugging skills, ability to understand some one else code would degrade and moving to the next level in terms of software competency may never happen for you.
A concrete example, the ability to remember 10 digit phone numbers was really normal before smart phone, try to push your mind now to see if you are still able to do that?
Lastly, at any given point of time 90% of the engineers were working on managing the existing code base, so career wise with so much code being written the job safety should not be an issue if you have skills to understand and debug some one else code
But would you tell anyone in the early 2000s to keep practising 10 digit phone number memorisation knowing that it will be completely useless skill in the coming future? How do you know what telling OP to be more hands on and spend time on active practice isn't the same thing?
Doesn't happens that often, though I have seen them struggling when maps are unavailable, same for people struggling to call some one in need if their phone battery is out or if they loose their phone.
People are kidding themselves thinking they fully understand what is going on at a deep level for 3-4 (or more) parallel tasks constantly context switching. It's also an anxiety-inducing way to work and has led to a proliferation of agent management tools enabling max efficiency.
Focusing on systems thinking/observability/knowing when NOT to build something/using agents to fix/learn new things quickly seem to be where I see devs still bringing the most value compared to any other cowboy.
Frontend stuff for me, which I'm bad at, I let agents do all of and I test the end result.
Other things are in-between, but time wise it's probably mostly me writing code. Lines of code is the LLM for sure.
to answer directly, i live in claude code now. and while it's a different shape of daily work, i'm still engineering, still evaluating those 3 factors and figuring out how to triage and solve user-problems much faster than i could 5 years ago.
So its still fairly involved and low level but a lot less manual typing
I also don't use auto-mode when they write code, I review the diffs immediately as they come and approve/deny as I find it stops the agents going too far down the wrong path.
I think the term automated programming captures it best