| ▲ | tekacs 3 hours ago |
| I've said for a long time that composability in software is a bit like playing Tetris: the lines have to clear. I feel like that gives an even more literal tower-rising metaphor, and that's what it feels like people using agents naively (and software engineers of lower skill or earlier-career), end up violating. Agents are getting better at folding things into themselves, especially if you direct them to... but unfortunately I've found that the architectural instincts, even of Fable and 5.6 Sol, are still wildly behind what I reflexively achieve, say. For sure there is an ability to have agents go back over work and try to fold it into better and better abstractions until it's sort of annealed into something good. I've done something similar on codebases that I have, but the 'high reaches' of architecture with great _prediction of how the software will evolve in the future_ in _subtle_ ways – those are, for now, out of reach of agents. There is a part of me that wonders if it's partly just how much they can hold in their head right now, though. Even with the greatest articulation and high density of feeding them, the current setups don't allow them to hold a high-quality, sparse, 'zoomable' model of the world in their head that well yet, which we can do pretty well. But the fact that I'm talking about it in terms of that kind of subtlety is itself promising, I guess? |
|
| ▲ | Animats 3 hours ago | parent | next [-] |
| The upper bound on program complexity used to be the power of the human mind.
"Vibe coding" can break through that barrier. But not because the problem being solved needs that complexity. Because the process does not drive itself towards compact abstractions. It's the AI-powered version of the scaling problem Brooks described back in "The Mythical Man-Month". The combinatoric problems get worse with scale. Concretely, multiple similar implementations of roughly the same thing appear in different parts of the project. This is a known problem of vibe coding now. We need some way to make AI-driven coding strive for parsimony. |
| |
| ▲ | conartist6 3 hours ago | parent | next [-] | | Why would it? It has optimized what it was built to optimize: this is the token-selling industry. Take note that the people hawking the dream of a gold rush are not actually mining but selling shovels | | |
| ▲ | ashdksnndck 2 hours ago | parent | next [-] | | Same issue happens in models trained by organizations who aren’t selling tokens. I believe it’s because being parsimonious is simply harder. Achieving the task at hand independently and declaring the job done is easier than building an abstraction and reconciling between every use case. | |
| ▲ | tekacs 28 minutes ago | parent | prev [-] | | Labs are trying to make long-horizon work. Even if you're a coding agent, adding more and more surface area is distracting to that goal. There is reason that RL over long traces should, at least in principle, optimize for building in ways that help the result fit in the model's context window. A meaningful risk of course is that the tools available to the model (ripgrep + fancier semantic approaches) allow it to do a good job of reasoning over things much larger than its context window, and so it doesn't pay the penalty sufficiently to fix it. | | |
| ▲ | conartist6 14 minutes ago | parent [-] | | Does that not sound a little silly to you when you say it? Should I invest in becoming a memory athlete as a way of becoming a better software engineer? ...or should I learn how to build and use tools? |
|
| |
| ▲ | TacticalCoder 7 minutes ago | parent | prev [-] | | > "Vibe coding" can break through that barrier. But not because the problem being solved needs that complexity. Because the process does not drive itself towards compact abstractions. It's the infinite AI monkeys at a computer keyboard phenomenon. Or the car on the highway that bumps left and right on the guardrails until, eventually, it arrives at its destination and nearly everybody is amazed at that great success. The AI kool-aid drinkers are going to answer: "but that's how human code too". And I'm really not sure about that. | | |
| ▲ | bluefirebrand 2 minutes ago | parent [-] | | It's perhaps how some humans code but frankly if you have those people employed to build software for you, you have big problems |
|
|
|
| ▲ | VMG 24 minutes ago | parent | prev | next [-] |
| Isn't this just an effect of what the LLMs are RL'ed for? Solving short-horizon tasks. I assume one can't benchmaxx multi-year long efforts, clean architecture, taste etc as easily as these "make tests pass" tasks |
|
| ▲ | throwaway27448 an hour ago | parent | prev | next [-] |
| > the lines have to clear. Sorry, the lines have to clear what? Surely there must be some kind of constraint on "lines" that they have to overcome. |
| |
| ▲ | edoceo 32 minutes ago | parent | next [-] | | The lines (rows) in Tetris have to become complete and then disappear to make room for the new falling pieces. In code the thing has to become stable, can't just keep packing more and more noise onto it. | | |
| ▲ | tekacs 31 minutes ago | parent [-] | | Absolutely this: and it needs to ideally become the kind of set of abstractions that mean that every new thing added uses less net-new surface area than it would without them. |
| |
| ▲ | 36 minutes ago | parent | prev | next [-] | | [deleted] | |
| ▲ | tekacs 32 minutes ago | parent | prev [-] | | I mean that at the bottom of the Tetris board, the lines need to vanish so that the Tetris board keeps moving downward and doesn't grow unbounded. |
|
|
| ▲ | Gud 2 hours ago | parent | prev | next [-] |
| Do you believe "micro services" can make a comeback?
local daemons with an exposed API, each daemon vibe coded? |
| |
| ▲ | layer8 22 minutes ago | parent | next [-] | | Microservices are about separate deployment. Regarding separating the development/maintenance of components, you can achieve that in a monolith by composing it out of corresponding modules/libraries with defined APIs. That’s good practice anyway. | |
| ▲ | swiftcoder 2 hours ago | parent | prev | next [-] | | Unless we are planning to deploy them all individually to an expensive serverless platform like Lambda, the coordination challenges and overprovisioning are going to more than outweigh whatever architectural benefit you reap (in human-centred development, micro services are solving an entirely different problem - Conway's Law) | |
| ▲ | jdlshore an hour ago | parent | prev | next [-] | | Microservices don’t reduce complexity, they just move it to the interactions between services. You have the same fundamental design problem. In other words, if you can’t design a modular monolith, you can’t design a set of microservices. | |
| ▲ | throwaway27448 an hour ago | parent | prev | next [-] | | Sure, why not? The same reasons they succeeded originally will work just as fine now. | |
| ▲ | stavros 2 hours ago | parent | prev [-] | | Please no. | | |
|
|
| ▲ | stavros 2 hours ago | parent | prev [-] |
| Agreed, and ever since LLMs started being able to write competent code, I've noticed a massive difference in quality on codebases where I knew the technology, and ones I didn't. This is because I can much more efficiently steer the LLM on e.g. backend code, which is my expertise, vs yoloing everything on mobile, where I have no idea. The codebases using technologies I have no idea about tend to quickly become unmaintainable and buggy, because the LLM still doesn't make good architectural choices, but the codebases that use technologies I'm familiar with basically never devolve into unmaintainability. The difference between the two is massive, and that's why I think that a competent engineer steering an LLM in their area of expertise gets two orders of magnitude more productive, whereas someone steering an LLM in an area they know nothing about are basically producing tech debt at the speed of thought. |
| |
| ▲ | maest an hour ago | parent [-] | | > two orders of magnitude more productive Shipping 100x more features per day? | | |
|