Software engineering is about managing complexity

(hack8s.com)

69 points | by justorius 1 hour ago

15 comments

  • zug_zug 29 minutes ago
    The complexity stuff is all absolutely true.

    However I think it's aggrandizing what human engineers actually do with remarks like "Engineers own tradeoffs." My experience is that certainly less than half of the employed software engineers don't actually give a real analysis to questions like:

    "Given these constraints, this team, this business, this infrastructure, this budget, these risks, and the expected evolution of the product, what is the most appropriate way to implement X, today?"

    Thus I think AI is more able to replace the average engineer more than this article admits, however the inadequacy of "average engineering" will be much more apparent now: codebases can become large/complex enough to be unwieldy in months now when it used to take 5 years [a timescale where accountability is effectively impossible].

    • KronisLV 14 minutes ago
      > this team, this business

      These get overlooked so often. The way you build software if you’re at the helm vs the way you need to build it when dealing with a more/less capable team and business, especially if someone else will be doing the deployment and will need lots of consultations, is way different.

      • hn_go_brrrrr 6 minutes ago
        This is my favorite part of software engineering. It's not just a set of rules you can apply to get the right answer. You need to use your judgement to make a context-appropriate decision.
  • cobbal 59 minutes ago
    Lost me at the first assumption. People can argue about how useful AI is, but it's obviously not essential because we somehow managed to write code without it a few years ago. I would even say the code was better back then.

    The two tasks of writing code and engineering software cannot be separated without damaging the integrity of the mental model of the engineer. Having architects who didn't interact with the code always produced map/territory mismatches.

    • sunshowers 3 minutes ago
      This whole week I've been dealing with incidental complexity created by shortcuts taken and edge cades not handled in code written in the before times, both in mine and in others'. I realized at some point yesterday that these kinds of shortcuts would no longer be accepted with competent LLM use.
    • ratelimitsteve 30 minutes ago
      We built houses before we had nailguns but now that we have them they're pretty essential to building a house.
      • mainmailman 2 minutes ago
        Hammer and nail still works, it’s just not as fast and strains the builders.

        Problem with the analogy is that the strain in software engineering is necessary for an in depth understanding of the code.

        The question is whether that depth of knowledge is ultimately more helpful than the speed that we can build with AI.

    • p0w3n3d 44 minutes ago
      Sadly many managers decided to do so and the damage is done

      I love to say that

        Some managers didn't pass the Turing test
    • bluegatty 31 minutes ago
      Have you looked at the machine instructions your compiler produces?

      No? Why?

      Because software languages are a pretty good abstraction.

      To the extent that good abstractions are in place, you can avoid looking at code specifically.

      Those don't perfectly well exist, so it takes a lot of self discipline and the right tools/methods, but invariably, AI will produce better systems.

      That said, its very easy to produce slop, so well see much more of it.

      But mostly, it will be AI from here on in, as a matter of productivity. There are some arguments on the margins but those will fade over the next few years.

      'At minimum' - the 'power tools' are here to stay.

      • shhsshs 2 minutes ago
        A compiler translating high-level code to machine code is a predictable and repeatable process.

        An LLM translating a prompt to to high-level code has a much lower degree of predictability. To say an LLM prompt is a comparable abstraction is unfair, though I admit it's getting very close.

      • kriro 10 minutes ago
        Higher level languages are still formal languages. I think there's a conceptual difference between moving from one formal language to another (machine instructions to asm or asm to C) and moving from a formal language to natural language. So yes, developing, looking at and understanding a formal description of your system has benefits for an engineer compared to handing off this step completely.
      • marginalia_nu 29 minutes ago
        Anyone who is involved in any sort of performance critical work looks at compiler output on a regular, if not daily basis.
        • bluegatty 1 minute ago
          Yes, but even HFT traders use Java and don't look at the compiler output.

          Looking at the compiler output is a totally valid concept, but it's definitely a niche case.

        • znnajdla 7 minutes ago
          Sure but you only look at it when optimizing some performance critical code, usually the hot path. That is usually a tiny fraction of the codebase. I also use AI to generate large amounts of code but I only inspect the actual code when critical, delicate or architecturally important stuff is involved.
      • cautiouscat 12 minutes ago
        > Have you looked at the machine instructions your compiler produces?

        > No? Why?

        > Because software languages are a pretty good abstraction.

        No, it’s because compilers produce deterministic output. I am so tired of this argument.

        If I’m not concerned with the performance of my code, I can be 100% confident that that exact code will produce the correct assembly every time. That’s why I don’t read it. Not because I don’t care.

        • bluegatty 2 minutes ago
          No - perfect determinism is absolutely not required.

          It's entirely the nature of the abstraction.

          You want it to work as expected, it does not have to produce the same thing each time.

  • karim79 10 minutes ago
    Always reminds me of why OOP came about in the first place; it was a way to manage complexity and led to much better and grander software. Now nobody talks about OOP because abstractions are built into just about everything.
    • huijzer 5 minutes ago
      It was sold as a way to manage complexity but then made everything complex in a different way. For some problems, OOP makes sense, but for many I think it doesn’t. Unless you have a Rust like trait system that looks a lot like OOP but isn’t. That works well. Essentially don’t put state inside your classes, or you will be spending lots of refactoring time on moving variables up and down in the class hierarchy or throwing computer out of the window because a variable on second thought shouldn’t have been added near class Y.
  • a2ff6eeb0 1 hour ago
    AI can also generate the architecture for you based on the requirements, and ask the necessary clarifying questions.

    It's not as good at system design as writing code, yet. But it feels like it's better than most of my coworkers.

    I think in a few months, system architecture will have its Claude Code moment, and humans will be outclassed.

    • VohuMana 28 minutes ago
      I don’t know, I could be wrong but I think one of the key aspects of system design which I don’t know if there is a lot of training data for us the “why” behind decisions. Separating out good design from bad isn’t always black and white and like the article mentions it’s about managing complexity and trade offs. It’s hard to capture in code/training data “we designed everything in a certain way but compromised in this one area because we were under time constraints and assumed we could fix it later”

      A fun little exercise you can do is design a system and write some code and then ask LLM to explain why you wrote it that way. Results are varied and interesting but in my experience rarely capture the actual why behind decisions.

  • softwaredoug 17 minutes ago
    Sometimes these tradeoffs involve half a dozen over a few lines of code. And that’s where I’m hesitant to let an agent work. It’ll do fine with creating correct code. And you can somewhat constrain it to think about one other thing. But it loses track, ignores constraints, cheats, and do you layer complexity on top to prevent this? Or just look at a dozen lines of code to fix it?
  • zerolayers 12 minutes ago
    AI writing code is a force multiplier and amplifies an orgs existing practices. In other words, if you lack structure and are a fan of chaos engineering, then that gets way worse. On the other hand, if you already have god workflows and an overall structure, it'll help you get things done more quickly.
  • coredev_ 33 minutes ago
    Thanks, might be the best blog I've read in 2026. AI can of course do architecture as well but oh boy will you have a bad time when your application breaks and neither you or AI can fix it.
  • raevn 32 minutes ago
    One question missing from the list, and it’s the first one I tend to ask… do we really need this? I’m not sure I’ve ever seen an agent pushing back on a request.
    • godwinson__4-8 26 minutes ago
      You can tweak them to do so. I personally tweak mine to act like a disappointed stack exchange veteran.

      I personally recommend, but I understand many people do not want to be pushed back by something they see as little more than a servant.

      This setup does work to also have agents argue with each other. That can be very interesting, though you have to set them up to be very skeptical. Otherwise they will tend to read another agents assertion as authoritative off the bat.

      I am convinced much of the harness/prompt engineering we are doing now will also be automated away. Within 5 years the best practices for the most popular use cases will have been found, automated and fully baked in.

    • zer00eyz 26 minutes ago
      Bing Bing Bing...

      How often do engineers get a say in product direction?

      Every one keeps saying that AI isnt moving the needle on the bottom line.

      Well duh, code doesn't move the bottom line, features do, products do.

      If you're building all the wrong things faster, all your doing is performing a speed run to a legacy code base.

  • thi2 30 minutes ago
    I started to look around the site and opened this: https://hack8s.com/409/ziglings-all-exercises-solve-v0-16-0

    The site just goes into a reload loop on iOS?

  • intrasight 31 minutes ago
    All modern engineering is about managing complexity
    • bluegatty 30 minutes ago
      Fair, but Software is very different from mech or chem eng though - enough so that it's worthy characterizing.
      • ratelimitsteve 27 minutes ago
        This. Software hypothetically can permit unlimited complexity. There are only so many ways you can try to build a bridge such that it won't collapse. There are an infinite number of ways that a set of instructions can reach a desired state given enough time, processing and memory resources. This, combined with our relative naivete in how to design and build software that does not approach infinite complexity compared to other engineering disciplines means that the primary thing about building software is managing complexity.
  • imhoguy 23 minutes ago
    Is it only me who gets eye pop by just how the font is rendered on that website?
    • brianritz 20 minutes ago
      Same here, it was really tough on my eyes.
  • skiing_crawling 37 minutes ago
    It is revisionist to say that software engineering was never about writing code. It was, in fact, a huge component, and it also wasn't easy. Sure most code is glue but even the glue was tedious and the actual hard and novel parts still aren't really done that well by AI (yet).

    It's less about writing code now but we're lying if we try to pretend it was a distraction and not a big part of the real work.

    And every claim about what the job actually is or was all along has an implied (for now) at the end of it.

    • tchalla 33 minutes ago
      Software engineering was never about writing "just" code. Simply writing code was not enough in most business environments.
      • skiing_crawling 31 minutes ago
        I didn't use the word "just"
        • tchalla 5 minutes ago
          I did. I am adding on to your argument. In general, a reply to you never needs to be a counter. It can be a build up too.
  • threethirtytwo 18 minutes ago
    These software engineering analogies are getting tiresome.

    People are shouting “yeah the hard part was never writing code, it was managing complexity” as a sort of last hurrah before AI engulfs them.

    This is reality: not only can AI write code. It can manage complexity.

    Prompt: read the article in this thread then execute its principles on my codebase. Write a harness and programmatic procedures that will trigger you to respond with the articles philosophy to code changes. Be vigilant and monitor every aspect constantly.

    I would say for the above prompt, AI is about 60 to 70 percent as a good as a human now. A year ago it was 20 percent. The gap is closing.

    • znnajdla 2 minutes ago
      No the AI cannot. Did you even read the article? The principles in the article are not rules that can be applied or handed to a prompt. They are questions, not answers. Questions that are impossible to answer and that have no right answer except by human judgement in a concrete context.
  • mermadicsolutio 16 minutes ago
    [flagged]
  • bananaflag 27 minutes ago
    I have no idea why people believe AI will not be good at all the other things. It's a general reasoning machine, it surely can reason on many things beside the actual code.

    I've been hearing this "writing code is not what being an enginner is" mantra for years like some sort of gotcha. (It was prevalent even before AI, and I think people underestimated a lot how many people were simply incapable of writing code even given all the specs and design choices.)