Software Engineering Fundamentals Matter More Than Ever

Amid the hype around AI agents, a software engineer argues that the core craft of building maintainable, testable software is more critical than ever. While LLMs can generate code and follow instructions, they lack true reasoning, making human judgment essential for designing clean interfaces and managing complexity. The author shares practical tips for using AI tools effectively and warns of the risks of over-reliance.

It’s about picking, or reworking to move to a better choice, the right abstractions.
  1. Alien1Being

    AI generated code is like IKEA furniture.

    IKEA furniture embodies many elements of good cabinet making but skips many nonessential elements. And does this more consistently than cabinet makers who can be bored, incompetent, depressed, burnt out, resentful, tired, having a bad day.

    In the future AI code inevitably will embody most good software engineering practices. And will do this more consistently than software engineers who can be bored, incompetent, depressed, burnt out, resentful, tired, having a bad day.

    Just look at the messages on HN or around you at your colleagues to see how mediocre the average software engineer is..

    Today's IKEA is good enough for most people.

    Tomorrow's AI coding will be good enough for most corporations.

    Good enough to vastly reduce the need for fine craftsmen and women / software engineers.

    Good enough to deskill those who call themselves cabinet makers / senior software engineers. These days the cabinet makers I personally know just do contract kitchens for project builders.

    But IKEA is and AI will be, bad enough that at the high end with special requirements / taste / money / an inflated sense of self worth, some furniture makers still exist and thrive.

    Perhaps 1% percent of current software engineers of today will be needed in the future when AI code inevitably has the ability to follow good software engineering practice.......

    And as usual it will mainly be the mediocrities that remain ( so there is hope for you too ), with occasional isla […]

  2. brabel

    > Making software debuggable, maintainable, layered, and composable – that’s still quite a trick. Quite a lot of that work requires extensive, thoughtful reasoning. And that’s where the LLM’s today, even the leading edge of the “capability” from frontier models, fall short.

    It’s been my quest during my career to figure out what is maintainable software, what is composable or not, and how the two things, and many other things, are in direct conflict. There is no single answer. If your goal is to take over the market quick, as many here would like, maintainability is a very low priority aspect of your code base. Composability may matter for integrators but can be entirely ignored in your CRUD backend.

    Beyond that, I don’t know of a good way to measure most of these intangible properties. Highly competent software developers disagree in even basic things, like whether OOP is a good idea, should we all be using pure functional programming etc.

    Hence, how would you expect an LLM to get good at figuring this out for you? If you describe exactly what trade offs you are willing to make, and give it ways to measure how well it’s doing, then I do think LLMs will be able to not fall short. Given the current state of things, it’s just a matter of opinion whether LLMs fall short, or humans fall short for that matter.

  3. mortalapeman

    With generated code, the directory structure, interface design and general state management is usually a haphazard mess. Even with the best frontier models. But what really gets me is the model often tries to make assumptions for me that I didn't specify in the prompt. Subtle things like which error states are "oh shit we need to bail" vs "this isn't a deal breaker." Sometimes it will ask, but more often than not it will just make a decision and it's often the wrong one. If I don't have a fully kitted out test suit and a good type checker to verify the final product against, the the whole looping thing is just useless to me and I'm back to reviewing every line of code it puts out and having to draw on my years of architecture experience to make sure we don't build a giant pile of trash.

  4. tomwuu

    Time will tell.

  5. dmitrijbelikov

    LLM is the new Excel

  6. mstank

    I have an open question for software engineers out there:

    As someone that has never studied CS but has written basic code most of my life (accelerated now with AI), where is the best place to learn software engineering fundamentals?

  7. theteapot

    > It helps to know that LLMs don’t “reason”. They predict ..

    Semantics. Prediction is the training objective. The ability to reason can be, and very arguably is, an emergent property of that.

  8. amelius

    But do the same SWE fundamentals apply if the one doing the programming is many times smarter than us?

More from this day

2026-08-16