Join the discussion

Write your take first — we'll ask for email only when you're ready to publish.

  • Hacker News
  • I feel like I’m watching developers speed run project and product management learnings.

    We’ve moved to seeing that specs are useful and that having someone write lots of wrong code doesn’t make the project move faster (lots of times devs get annoyed at meetings and discussions because it hinders the code writing, but often those are there to stop everyone writing more of the wrong thing)

    We’ve seen people find out that task management is useful.

    Now more I’m seeing talk of fully doing the design work upfront. And we head towards waterfall style dev.

    Then we’ll see someone start naming the process of prototyping, then I’m sure something about incremental features where you have to ma age old vs new requirements. Then talk of how really the customer needs to be involved more.

    Genuinely, look at what projects and product managers do. They have been guiding projects where the product is code yet they are not expected to read the code and are required to use only natural language to achieve this.

  • Title says

    > back to writing code by hand

    But what they are doing is

    > doing the __design work__ myself, by hand, before any code gets written.

    So... Claude still is generating the code I guess?

    And seriously, I can't understand that they thought their vibe coded project works fine and even bought a domain for the project without ever looking at source code it generated, FOR 7 MONTHS??

  • I always find these kinds of posts interesting, to compare the velocity that people seem to get with Ai, vs what I get by just coding by hand

    Coincidentally I've been working on a project for about 7 months now: its a 3d MMO. Currently its playable, and people are having fun with it - it has decent (but needs work) graphics, and you can cram a few hundred people into the server easily currently. The architecture is pretty nice, and its easy to extend and add features onto. Overall, I'm very happy with the progress, and its on track to launch after probably a years worth of development

    In 7 months vibe coding, OP failed to produce a basic TUI. Maybe the feature velocity feels high, but this seems unbelievably slow for building a basic piece of UI like this - this is the kind of thing you could knock out in a few weeks by hand. There are tonnes of TUI libraries that are high quality at this point, and all you need to do is populate some tables with whatever data you're looking for. Its surprising that its taking so long

    There seems to be a strong bias where using AI feels like you're making a lot of progress very quickly, but compared to manual coding it often seems to be significantly slower in practice. This seems to be backed up by the available productivity data, where AI users feel faster but produce less

    by 20k
  • That’s the same story I had.

    The swindle goes like this, AI on a good codebase can build a lot of features, you think it’s faster it even seems safer and more accurate on times, especially in domains you don’t know everything about.

    This goes in for a while whilst the codebase gets bigger and exploration takes longer and failure rate increases. You don’t want it to be true and try harder so you only stop after it practically became impossible to make any changes.

    You look at the code again and there is so much code spaghetti is an understatement it’s the Chinese wall.

    You start working…, and you realize what was going on

    I deleted 75,000 of 140,000 lines of code and I honestly feel like the 3 months I went hard into agentic coding I wasted and I failed my users by building useless features increasing bugs, losing the mental model of my code and not finding the problems I didn’t know about the kind of hard decisions you only see when you in the code, the stuff that wanders in your mind for days

  • When it was Copilot tab-completing lines, people would say, "yea, but you still have to make sure you're the one writing the whole functions".

    Then when it was completing functions, people would say, "yeah, but you still have to make sure you're the one writing the logic around the functions"

    Then when it was completing the logic around the functions, people would say, "yeah, but you still have to make sure you're the one writing the features"

    Now it's completing features and people say, "yeah, but you still have to make sure you're the one writing the architecture"

    I don't know if architecture is a solvable problem for these models, but it is interesting watching the expectations moving over time.

  • > The other change is simpler: I'm doing the design work myself, by hand, before any code gets written. Not a vague doc. Concrete interfaces, message types, ownership rules.

    That’s the hard part of coding. If you have an architecture then writing the code is dead simple. If you aren’t writing the code you aren’t going to notice when you architected an API that allows nulls but then your database doesn’t. Or that it does allow that but you realize some other small issue you never accounted for.

    I do not know how you can write this article and not realize the problem is the AI. Not that you let it architect, but that you weren’t paying attention to every single thing it does. It’s a glorified code generator. You need to be checking every thing it does.

    The hard part of software engineering was never writing code. Junior devs know how to write code. The hard part is everything else.

  • I've set a few rules for working with coding agents:

    1. If I use a coding agent to generate code, it should be something I am absolutely confident I can code correctly myself given the time (gun to my head test).

    2. If it isn't, I can't move on until I completely understand what it is that has been generated, such that I would be able to recreate it myself.

    3. I can create debt (I believe this is being called Cognitive Debt) by breaking rule 2, but it must be paid in full for me to declare a project complete.

    Accumulating debt increases the chances that code I generate afterwards is of lower quality, and it also feels like the debt is compounding.

    I'm also not really sure how these rules scale to serious projects. So far I've only been applying these to my personal projects. It's been a real joy to use agents this way though. I've been learning a lot, and I end up with a codebase that I understand to a comfortable level.

  • Yep. The only people I've heard saying that generated code is fine are those who don't read it.

    The problem is that the mitigations offered in the article also don't work for long. When designing a system or a component we have ideas that form invariants. Sometimes the invariant is big, like a certain grand architecture, and sometimes it’s small, like the selection of a data structure. You can tell the agent what the constraints are with something like "Views do NOT access other views' state" as the post does.

    Except, eventually, you'll want to add a feature that clashes with that invariant. At that point there are usually three choices:

    - Don’t add the feature. The invariant is a useful simplifying principle and it’s more important than the feature; it will pay dividends in other ways.

    - Add the feature inelegantly or inefficiently on top of the invariant. Hey, not every feature has to be elegant or efficient.

    - Go back and change the invariant. You’ve just learnt something new that you hadn’t considered and puts things in a new light, and it turns out there’s a better approach.

    Often, only one of these is right. Often, at least one of these is very, very wrong, and with bad consequences.

    Picking among them isn’t a matter of context. It’s a matter of judgment, and the models - not the harnesses - get this judgment wrong far too often. I would say no better than random chance.

    Even if you have an architecture in mind, and even if the agent follows it, sooner or later it will need to be reconsidered. What I've seen is that if you define the architectural constraints, the agent writes complex, unmaintainable code that contorts itself to it when it needs to change. If you don't read what the agent does very carefully - more carefully than human-written code because the agent doesn't complain about contortious code - you will end up with the same "code that devours itself", only you won't know it until it's too late.

    by pron

Explore Birbla archives