Igor Dimchevski retweeted
Should you /grill-with-docs, /wayfinder, or just one shot the code?
1. If the diff is tiny, DON'T grill
/grill-with-docs saves you from situations where the agent built the wrong thing. But if the thing it's building is tiny, that cost drops to nothing. So one-shotting is absolutely fine when you're only making small changes.
2. Never start with /wayfinder
A failure mode of /wayfinder is that you start grilling and the solution turns out to be way simpler than you thought. Why is this bad? Because you've created the map and tickets, and you realise you don't need them.
So if the expected diff is medium-large, always start with a /grill-with-docs session. Then, if planning starts to get out of hand, just say "/wayfinder let's turn this into a map".
Igor Dimchevski retweeted
New on our Engineering blog: Creating in-house source control.
In May, we merged around 2,500 code changes per day. In September, we merged more than 30,000 per day. As a result, we became bottlenecked by developer infrastructure built for human (rather than agent) scale.
Here, we share how we built a new version control system—and fully migrated our monorepo from git—in five months: anthropic.com/engineering/re…
Igor Dimchevski retweeted
AI makes everyone a developer is true the same way cameras makes everyone a photographer.
Igor Dimchevski retweeted
Replying to @musedivision @geoffreyhinton
I said "auto-regressive LLMs, in and of themselves, will not lead human-level AI"
That statement is still totally true.
First, the reasoning abilities of current AI systems are based non-auto-regressive search (which is what I have always advocated for). But AFAICT, they do it in token space, which is limited and inefficient. I have claimed that human-like reasoning must be a search in continuous representation space. It looks like the industry is moving towards that.
Second, the self-improvement methods, as currently practiced, only work for domains where the quality of outputs can be scored without human intervention, such as mathematics, code, and scenarios that can be simulated accurately. Not anything else. Humans and animals learn new skills way more efficiently than current RL methods.
Third, the multimodal capabilities of current AI assistants generally use separately-trained encoders (that are not LLMs). This is also what I've been advocating. Except that I think the best way to do this is with JEPA trained with self-supervised learning. The research community is clearly moving towards that (3000 papers on JEPA in just 4 years).
Fourth, if LLMs were a path to human-level AI, we would have domestic robots and Level-4 or Level-5 self-driving cars for consumers by now. And we don't. We certainly don't have cars that can learn to drive in 20 hours or practice like any teenager. We're still missing something pretty huge to claim human-level intelligence (let alone superhuman).
Sure, we now have computer systems that are impressive, very useful, and whose performance is superhuman in an increasing number of domains (coding being one of them).
But that's true of the entire history of progress in computer technology.
Lastly, there is a basic confusion about what intelligence actually is.
It is not the mere accumulation and regurgitation of existing declarative knowledge (which is essentially what LLMs do).
As Jean Piaget famously said, "intelligence is not what you know, it is what you do when you don't know."
It is your ability to solve new problem without any prior training, to act in previously-unknown scenarios, and to adapt very quickly to new situations with minimal training.
We're still far from that.
Igor Dimchevski retweeted
In my normal programming work, I use AI tools in a very focused way that I've been told is "wrong," even though I'm more productive, but there we are. I'm not spewing out 20x my previous output, so maybe that's it. I'm an engineer, so when I work with an LLM, I do engineering. Shocking, I know.
I work incrementally, in small batches, with a well-defined architecture guiding the process. (People talk nebulously about "guardrails." Having a coherent AI-friendly architecture is an important one.) I do not let the AI design the program for me. I build thin vertical slices with domain value, not random features. I focus on quality, not output volume.
I tell the LLM what the code should do, of course, but I also tell it how to structure the code—how it fits into the architecture, what the APIs or messaging looks like, etc. I don't simply describe the surface behavior of a "feature" and expect the AI to do all the work under the covers. Instead, I ask the AI to write small, manageable, focused, black-box testable components that fit into an overall system architecture that it does not control. The architecture comes first, and then I tell the LLM to implement it one component at a time. (I should add that some architectures work better than others in this context. DDD nested aggregates and entities have worked pretty well for me, as have message-based components with hardened perimeters.)
I'll admit that I often don't give the output more than a cursory glance, but I'm a fanatic about testing. (There's another "guardrail.") I don't let the AI write my tests. When I first started doing this, I found that the AI would modify the tests so that the incorrect code it generated would pass. That's not testing. Also, the AI-generated tests tested the wrong things—e.g., small implementation details, not domain-level behavior.
I'm a big TDD guy, so I write my tests first and then tell the AI that the code it creates must pass them. When I do use the LLM, I'll specify the test in Gherkin format, and the results are small enough to review manually. To me, manual review of the tests is essential. There's no room for AI ambiguity in a test.
I've been told that I'm not leveraging the full capabilities of the AI by working this way, that I should just describe features or modifications and have the AI do all the work. I am, nonetheless, more productive than when I don't use the LLM, and don't seem to have the problems (e.g., lurking bugs, fragility in the face of scaling, overwhelming complexity, etc.) that seem commonplace with other approaches.
My measure for productivity is time to complete a story, which has gone down. I couldn't care less about output volume. When working in the small like this, with the work constrained by component boundaries, the LLM cannot break existing code when it makes unrelated changes. I'm not overwhelmed by a pile of code so vast that I can't understand it.
So, maybe I am doing it "wrong," but I'm happy with what I'm doing.
C# は第一級のシステム開発言語、と。
nockawa.github.io/blog/why-b…
Igor Dimchevski retweeted
I have been doing software development for nearly forty years and there is one common pattern I have seen on all successful software projects.
You get to a point near the end of the project where the number of files that need to be modified for a given change get smaller and smaller.
If your AI is modifying large number of files for small changes near the end of a project, you have a serious problem.
As the cool kids say, you are NGMI.
Igor Dimchevski retweeted
Juniors entering the field will still need to understand what code is. But they won't need most of the philosophy that we've been used to. The emphasis will all be on pragmatics and engineering. So they won't need to know OOP, but they will definitely need to know dependency inversion. They won't need to know functional programming, but they'll definitely need to understand purity and the costs of mutability. They won't need to know about structured programming, but they will need to understand modularity.
Igor Dimchevski retweeted
1/8 Lessons I keep reminding myself about using agents. Things that make me feel productive but actually make things worse. 🧵
Igor Dimchevski retweeted
Situation: A web app has no end-to-end (E2E) tests.
Solution: Consider writing E2E tests in phases.
Phase 1: Smoke test - Write E2E tests that merely visit each page and assure it loads.
Phase 2: Happy path - Write E2E tests for each feature's "happy path" (the expected, common use case).
Phase 3: Unhappy path - Write E2E tests for edge cases.
Phase 1 is generally easy and provides basic confidence that the app won't blow up when simply navigated. Consider phase 2 or 3 as the team matures.
Igor Dimchevski retweeted
This is “Mastering Programming", my list of topics for those wanting to, well, you know.
This article from @KentBeck is such a banger! Thanks for republishing it.
open.substack.com/pub/tidyfi…
Igor Dimchevski retweeted
This article from @KentBeck is such a banger! Thanks for republishing it.
open.substack.com/pub/tidyfi…
Igor Dimchevski retweeted
The untold history of web development:
1990: HTML invented
1994: CSS invented to fix HTML
1995: JS invented to fix HTML/CSS
2006: jQuery invented to fix JS
2010: AngularJS invented to fix jQuery
2013: React invented to fix AngularJS
2014: Vue invented to fix React & Angular
2016: Angular 2 invented to fix AngularJS & React
2019: Svelte 3 invented to fix React, Angular, Vue
2019: React hooks invented to fix React
2020: Vue 3 invented to fix React hooks
2020: Solid invented to fix React, Angular, Svelte, Vue
2020: HTMX 1.0 invented to fix React, Angular, Svelte, Vue, Solid
2021: React suspense invented to fix React, again
2023: Svelte Runes invented to fix Svelte
2024: jQuery still used on 75% of websites
Igor Dimchevski retweeted
Nuclear energy, if we do it right, will help us solve our climate goals. Thanks for the great conversation, @rebeccajarvis. b-gat.es/3LIlz55
Igor Dimchevski retweeted
When you find a defect, look to the system to understand why that defect was created, then change the system so that similar defects cannot occur again. Fixing the defect is the easy, and not the most important, part.
Igor Dimchevski retweeted
If the AI revolution doesn't bring about productivity changes that lead us to a 4-day or even 3-day work week, then I have to wonder WTF the point of all this tech is.
#capitalism
Igor Dimchevski retweeted
#ACMTuringAward recipient Vint Cerf warns about ethical issues of the technology behind #ChatGPT, which "can generate plausible sounding but incorrect information even when trained on a foundation of factual material." Learn more here via @CNET : cnet.co/3xmsiuO #TechNews
Igor Dimchevski retweeted
XP never had a story about scaling, which limited its reach. I get the feeling that there is a good story to be told about helping 1000s of folks coordinate their efforts & that story starts by reducing team dependencies.
tidyfirst.substack.com/p/sca…






















