Generating tonnes of documentation is easy, but it can easily get outdated and so much that no one would read it. Ideally, code should be the single source of truth. Documentation should be generated dynamically and upon request to not go stale. The amount of detail and how far to dig in should be up to the end user.
Right, this seems like an obvious conclusion - what is the outcome of the person writing the docs in either case:
1. Immediate better output from the machine OR...
2. Being sidelined for career promotions because you spent so much time making sure documentation was accessible while everyone knows they can ask you instead of reading it, and you will answer.
It's bad for us, but I imagine the tech writers feelings are even darker. They spent years being demonstrating how important good docs were, nobody in management cared, they were mostly laid off and discarded before there was even a credible replacement available.
One of the clients I’m consulting with has one of the best cloud onboarding docs I’ve ever seen. Lays out exactly the services supported. Who does what pieces. What is self service. They break out latency differences between the cloud environments and on-premises. A serious amount of good work that’s incredibly useful working within their system. I use it frequently. Their head of cloud engineering has a permanent “away” message on Teams pleading with people to check the cloud docs first instead of just asking him directly. I would be frustrated too.
For me, the primary purpose of documentation is to help myself in the future.
I don't view it as something I'm writing for someone else anymore.
Ultimately, I think that's helped me write better documentation.
Writing for an imaginary audience is typically harder than writing for a concrete one, and things you might think "someone else" might need to know - they either 1) don't, or if they do 2) won't read your docs anyway, most of the time.
People rag on StackOverflow for being mean, but it was a good training ground for developing habits that satisfy the social contract of professional spaces.
Always fun collaborating with someone on a project and having them surprised you actually read their documentation and checked out their code instead of expecting them to explain everything from the ground up.
If it helps, I have found the attitude that writing is mostly for the writer to be healthy in continuing the practice. And it largely tracks with how I feel I have had better understanding of things I have documented than those I have not.
At some point I started to include jokes in documentation to encourage people to read it. For the most part, this only entertained whoever the knowledge or project admin was.
Exactly. I recently found out I can use Atlassian‘s ROVO to ask questions against our Wiki and Jira. I now forward consultants to ROVO first and only if they can’t find an answer then I’d look at their questions. Saves me a good chunk of time. They never read my docs otherwise.
I’ve recently had a massive productivity boost in my Claude workflow simply by asking it to search for and review: relevant PRs via `gh` search, relevant Slack threads, relevant Confluence pages (+edit history), relevant Jira tickets, relevant Sharepoint docs, and relevant Teams transcripts. I ask it to do this comprehensively before the task, during the task, and after the task. It feels like a superpower.
But you can tell it to once (in CLAUDE.md for example) and it will nearly every time (it's getting much better at that). Since opus 4.7 (which I consider a downgrade overall) it's been much better at following CLAUDE.md . I even have an intentional contradiction in my user-level CLAUDE.md and the project levels, so I can tell which one is taking precedent or if both are disregarded, and it follows at least one of them most of the time, and it follows the local one 95% of the time.
While they absolutely do fail as you say (though in my experience not by default), this failure mode is still a massive improvement over the frequent human case of guessing based on the function/class/property/argument names.
Now, a really good human collaborator who reads all the stuff and thinks carefully, that was still better than what I saw from AI models at the start of this year. But I've also worked with my share of idiots, and been one too.
I'm not going to get into if *current* models can or can't reliably do any particular thing to any particular standard; previously my comparison was the same conversations with regard to video game computer graphics in the 90s always being "photorealistic" when they really weren't*; now, I'm starting to feel such discussions have the same vibes as Tesla fans insisting that "FSD-{insert current version here} solves all the problems and is a real breakthrough and the Rototaxi will totes conquer the marketplace this time for real bro, just one more version bro", etc.
I have a project where I asked the coding agent to write a design doc for each new feature. It now has 80 or so design docs, which aren’t kept up to date, so it’s a historical reference that we don’t go back to in practice. At some point I will probably delete them.
In a different project, I instead have it maintain a project overview and a couple other docs, and we delete plan.md once the work is done and the docs updated. I like that better.
In my experience the text for the Claude has only one requirement - the intent and meaning must be there.
The text for Claude doesn't need structure. Doesn't need style. Doesn't need formatting. Doesn't need deeper thought. The only important thing is that it includes somewhere somehow the relevant bits of information.
The quality of prose I throw at him is below what I would show to any other human. I just turn on my microphone, keep dictating whatever comes to my mind and I think might be relevant. After this is done I may or may not ask Claude to rephrase what I wrote before keeping it as memory.
On the other hand people judge you for what and HOW you type. They complain about it.
It's in my experience that people will generally judge a programmer much more for the quality of his outputs than the number of them. So if your target are other humans - it's better to have no docs than bad docs. For claude it's the other way around.
I've always tried, but usually work demands make it difficult to stop and finish. At least these days I can hand off documenting to an LLM. If anything, I have to tell it to back off a little to make it more readable for human eyes.
A lot of developer documentation is effectively write only. It gets written, often at great cost. But it doesn't get read a lot. It doesn't get a lot of feedback. It's typically out of date. And the lack of documentation is not really blocking anything important anyway.
If you are ever on a project where somebody goes "Somebody should write some documentation for X", you should counter it with "Great idea, get on it!". Mostly nothing will happen. It's rather thankless work. Some people are more proactive on this.
I actually tend to write documentation for myself. Because I'm old and wise enough to realize that if I come back to a project in two years, I will have forgotten most that I would need to get back up to speed quickly.
With agentic coding tools, it's different. The documentation helps. And it gets added to even if you don't ask for it. Which is nice. And you can get a lot of documentation added with a few simple prompts. Which makes it cheap and easy to generate.
It's not just documentation. Everything that makes programming easier is now suddenly valued, because wasting tokens is obviously worse than wasting your employees' time.
Because there will not be any point of explaining for humans, it has to be explained so AI have all the context necessary to re-explain to a human, adapted exactly to match current skill/personality and so-on.
I used to write extensive docs, now I solely write docs (I mean, the typical automated model Zoo do it for me) so AI know what to do later. Even inside the team, we don't really explain (except very high level concepts) anything for onboarding because the onboarding is directly on the harness, the file structure of a repo isn't even really checked anymore (probably no point, soon enough) as most people will end-up entirely on a chatbot anyway, it's start to be hard for me to even justify going out of our own internal harness windows (I have 16 to 32 of them open with 8 monitors).
I genuinely think a massive wave of depression will hit "tech workers" when they might realize that all our greatness (programming, arguing, planning...) will just be to prompt all day long and we will just be all in a "chatbot" in the end.
As a human, I'd rather just explore the code (which I tend to trust more than anything written beside it) myself.
The bot though- I don't want it to waste a bunch of tokens exploring nonsense. If I can write a few lines of text that will help it get straight to where I need it to go for 99% of work, that's a win.
It feels hand-holdy when done for the bot. I don't want to hold my follow human's hands.
Because Claude actually reads what I wrote. Other programmers, not so much.
I had an online art class right before Stable Diffusion came out. After SD workflow got well known among the art community, I asked the teacher what's the difference between AI image-gen and human artists. His answer (paraphrased): It's easier to make AI learn.
Programmers aren't documenting for Claude. Claude is documenting for Claude. Programmers are, at best, reading the documentation Claude wrote for itself to ensure there are no glaring mistakes.
I came to this realization after seeing developers churn out 30 minute long reads of slop documentation. It's for the agent, and the human interface to it is through the agent. Over the last week the plans that Claude has been writing for issues have been largely a single massive unreadable paragraph of awkward sentences, but it's working, the implementations from it have been solid.
the key to avoiding slop in this context is to have it write inline documentation (e.g. jsdoc), so that you can quickly review if it matches the required implementation/interface
We are now writing specs for important components and algorithms, and spend quite a bit of time aligning on them before implementing the production version. Those specs are often informed by vibed prototypes, but usually it’s also two or more people really thinking through an algorithm, and aligning with interfaces to the adjacent systems. They are usually very information dense.
I don’t believe spec driven development is a good idea though. The architecture should be made with intention as well, or I feel we‘d end up with whatever happens to be ranked highest in the latent space. But the specs are great to align cross platform teams behind shared concepts, and they are a good input to automatic reviews.
I get the feeling specifications documents are going to become the hot new programming language. I suspect, over time, we'll see special syntax and semantic conventions get published for specifications docs that result in the best chance for a coding agent to get the implementation right the first time and with minimal tokens.
Documentation is worth it only if it is read. If your coworkers don't read/remember/respect the documentation process then people tend to not keep the docs up to date. Unless the docs are for users who you don't want to come to you at all for support.
Claude is a better reader. I have to just tell it to read the docs/specs sometimes.
This is so true. I hate it. I document the same way for myself as I do with claude/codex and it's great it wasn't to much of a difference to be more verbose outside maximizing tokens.
> I keep seeing programmers say how angry it makes them that people are willing to write detailed CLAUDE.md and PROJECT.md files for Claude to use, but they weren't willing to write them for their coworkers.
Similar for adding static type checking, which makes it easier for AI and coworkers to understand the code, catch mistakes, and to refactor. And now there's coders willing to add static type checking to help AI but didn't see the benefit before.
I noticed this while programming with LLM assistance. It's easy to put effort in for the LLM because there is immediate positive feedback: improving the context gets better results. Folks have mentioned other reasons LLMs get better support like docs for humans don't get read and don't improve KPIs.
I think this might lead to more literate programming. The main challenge with LLMs is humans understanding the code, which lp helps with. Also, it includes the relevant context with the code itself. Both of these things help humans and LLMs.
I've been trying it myself and I think it's working pretty well. The only challenge right now is that it is difficult to get models to output code literate style. The output from LLMs tends to open a code block and put everything in it with a ton of long comments, rather than create several blocks with prose in between. [A caveat is that I don't have access to SOTA models.] My plan is to add an agent that just focuses on the style.
Don’t take it personally. Programmers are not documenting “for Claude”. They are documenting for anyone using Claude.
Writing and reading docs used to be incredibly time consuming, and programmers often didn’t read them. Now you can all but guarantee a doc will be found and read and followed if it’s relevant. The ROI on docs is high now.
Unfortunately, companies often measure developers by their own PRs.
An unfortunate outcome of this is that writing docs for other developers isn’t really incentivized properly (and with stack ranking, you might even say it’s disincentivized). Writing docs for Claude, however…
most issues in my company are just automatically solved now, we are at a point where the issue is just writing the issue (that's what requires mental effort).
Some people like to brag about how productive they have become with AI, but I see them spending a few hours a week adjusting which model to use, trying the new shiny harness or writing Claude skills.
Are you really more productive if instead of coding you are spending your time tweaking the AI to do what you want?
“Modern kids don’t program, they just play with frameworks”
Well of course people adjust their harnesses, skills and whatnot - that is how programming looks like now. You don’t touch the code, you build a machine that builds the code instead.
The question is how much people can produce this way. Me, personally, a ton - right now I feel I can do in a week what would take me a month-two. And I’ve had 20 years of experience in programming.
The problem I have had is other developers expecting me to maintain documentation for their tools. To the point that they wage stupid inter office wars because they don't want to learn a command line utility with 20+ years of documentation itself.
Truth be told, I wrote docs for other programmers but now I have Claude Code write docs for itself but if you looked you might conclude that I wrote docs for Claude.
I learned a long time ago to avoid writing long emails because people don't read them. LLMs are quite the opposite, and will have 'attention' for every word you prompt it with.
I've noticed that things like "decision documents" and complete feature or service {proposals,white papers,"one pagers"} have become acceptable since the start of the AI {boom,bubble} in a way that they weren't before. It's now seen as valuable for an engineer to lock themselves in a room and write 4 pages of specs for something they're working on, since the expectation is that this will speed things up when doing the actual coding. I have personally always liked to work this way, but have had to hide it. Now, even if I'm not really leaning on the AI for implementation (and not at all for writing the {spec,vision document}), I'm seen as some kind of LLM whisperer, even if I'm more on the Luddite side.
In engineering of all kinds (or at least the ones I'm familiar with), nothing really beats calmly sitting with your thoughts, stating a problem, then getting up and walking around while you think about it, then sitting back down to write down a possible solution, and then asking colleagues to read it.
I get claude to write a context.md for any github project i'm working on. It helps keep my context up to date, or else claude keeps telling me to build things I've already built.
Why make this about Claude? People are free to use any agentic coding LLM.
Documentation is firstly for yourself, secondly for your coworkers and/or users, and only last for AI. It is the art of writing it that strengthens one's understanding, so it doesn't make sense to have an AI write it.
Yes, I've already "abused" this a couple of times to get some docs written that we had needed for years but hadn't been written. All kinds of docs; code documentation, deployment documentation, overview documentation, architecture documentation. APIs that we kicked around as being useful for years are now actually on track to be written because we can't integrate non-existent APIs into MCP servers or skills.
On the one hand, I also feel like "come on, couldn't we have done this earlier?"
On the other hand... the costs of the docs have decreased. Simply firing a frontier model at your code base doesn't always produce perfect docs but it's a heck of a good start. I do recommend some tuning in the request, e.g. I like to explicitly ask the AI to document data flow rather than the usual list of "here's this component, here's this component, here's this component", but it's pretty easy.
And the utility of docs is now much higher. I really just recently moved into the classical "architect" role and in some ways I'm glad it wasn't much sooner, because my GenX cynicism tells me that nobody ever reads the architecture docs. OK, OK, sure, technically nobody is a bit too strong. Sometimes, some particularly intrepid or conscientious souls surely read them at some point. But from my own experience I could count on being able to hand out API docs, structure docs, flow docs, and their primary utility was that when someone tried to deflect responsibility with "but but but they didn't provide any docs" they couldn't, because I had. People eventually learned to stop doing that because I always provided the docs because I saw that coming. And they made a great background on the shared screen as I had to walk someone through the entire thing in a meeting anyhow. They were more a really specialized meeting transcript than something I could provide in advance and expect much out of.
But now, if nothing else, AI will read the documentation. I can tell people to pull it in, and while it doesn't mean all my problems go away, there is now a much cleaner path for me from "writing an architecture doc" -> "lines of code in somebody's repo" than there was pre-AI. My architecture docs are now somebody else's prompts. The utility of this sort of documentation skyrockets compared to the old days.
So, when the costs decrease and the benefits increase, it isn't a surprise that suddenly, it's easier to get some of these things done that we "knew" we needed for a long time, but now with the new cost/benefit ratio can cross the action threshold.
Wait until you realize that MCPs are just the APIs that we've failed to write before, and skills are just the documentation and simple CLIs we've failed to write before
Claude A) reads the documentation and B) needs the documentation C) can write the documentation quickly. None of which is true for your and your coworkers, at least not consistently.
> well parse for autocompletion, not actually "read", unless you are under AI-psychosis
A cheese-grater Mac is not a door stop either, yet look at it go.
Will people ever let go of being hung up on how exactly an LLM produces text, or do I really have to keep listening to this shit for the next several decades? As if being a program didn't already prohibit them from reading to begin with!
Tell me how you don't think a plane should be characterized as "flying" unless one is in "avionics-psychosis" or something. Surely you can appreciate how this narrow requirement for avoiding anthropomorphism and metaphors is entirely performative, and that engaging in them is in no way a sign of any mental illness.
And I get the performance aspect behind it, people wish to reject the metaphor to tear into the thing even that way. Or they come from a religious or spiritualistic background, and find the mere comparison insulting. But fuck it's so cringe. It's not news, and it's not insightful. Nobody who's ever had them shit out a page per second via like a dozen subagents, or utilized them being stateless and seed-bound, has any actual illusions about them being anything more than "just text generators". If they nevertheless assign intelligence, understanding, or similar traits to them, then clearly they simply don't agree with the anthropocentric philosophical insinuations performed. It's not some mistake or psychosis. Come on.
There was a growing consortium of developers who bought into the idea of "self-documenting code." They actually considered you incompetent for writing documentation and relegated this to roles they deemed inferior. I wonder what these types of developers think of this?
I'm one of those developers, and I think it makes sense to write documentation for Claude and I have no issues with that.
The point of self-documenting code isn't to get rid of the documentation. Instead, it's to integrate it into the code. This fixes the two biggest problems with documentation. First, that the code will often be updated and documentation left behind, making it useless. And second, that English and code are intertwined in the same document, making you constantly switch mental contexts of how you are reading. So no, I don't consider developers who write documentation to be inferior. If anything, I value documentation even more, and the purpose of self-documenting code is to make the documentation better, not get rid of it.
With Claude, the documentation you make for Claude is just fine as it doesn't run into any of the above two problems. The documentation isn't being left behind, because you add to it instead of the code. And it's not intertwined with code, because you are just writing English for Claude, you are not writing code in-between.
I have large doc file from a feature and everytime i tell claude to do something (read it) it consumes a shitton of tokens. Better to have small focused facts for ai instead.
I've been noticing that too. "Hey, the normal documentation for our software of a crude API list describing what each command is and each of its parameters isn't good enough for the AI. We need to provide the AI with instructions on how to use the software to solve common problems"
Uh, you needed to do that for humans too. You just didn't. There's a reason everybody scrolls to the bottom of man pages ASAP.
I haven't had too much problem with information in summaries being wrong, but there have been times the LLM will miss the most important details. Then when you tell it, the response is "Nice catch!" or something like that.
The key thing that makes a summary valuable is it retains the most important details while being shorter. Missing those details makes the summary wrong.
When you say "you haven't had much problem" one can only assume you're _not actually reading the output_. In fact, like most things in modern times, one has to assume you arn't actually reading the output. You're skimming it; you're finding what makes sense and extrapolating that. This is the 70%.
The problem with non-deterministic models is that the output can't be deterministically assessed. You're harboring a delusion that you're getting real good output.
Most likely you're doing the baby extrapolation: you make it do a small, tightly scoped project and it's does 99% right. Just like a baby doubles in size in a year. Extrapolating, that baby will double again; but it doesnt.
Your human compensation limits does not extrapolate to the size and knowledge that's fed into the model and the context it extrapolates.
When someone created a CLAUDE.md, then changed some stuff around and when I later had to touch that repository my claude was hallucinating classes, functions and architecture that was already long gone!
I just deleted the CLAUDE.md, since I had no mood to "fix" it.
If you have Claude write down notes, check them into the repo when you're done. It probably can't hurt and it might help.
LOL. It didn't even cross the author's mind to consider reading the notes himself to decide if they make sense.
AI is sending us down a path of anti-social behavior. It will be bad for us, of course, but AI is only as good as it is because it was able to be trained on info from github, stack overflow, etc. Without socializing interesting info, humans and AI will both suffer.
Generating tonnes of documentation is easy, but it can easily get outdated and so much that no one would read it. Ideally, code should be the single source of truth. Documentation should be generated dynamically and upon request to not go stale. The amount of detail and how far to dig in should be up to the end user.
I've written so much documentation over the years, and humans always come and ask me questions that the documentation answers, but never ever read it.
Right, this seems like an obvious conclusion - what is the outcome of the person writing the docs in either case:
re: #2: I'm in this description, and I am anguished by how much I do not like it.
(reference: https://knowyourmeme.com/memes/im-in-this-photo-and-i-dont-l...)
It's bad for us, but I imagine the tech writers feelings are even darker. They spent years being demonstrating how important good docs were, nobody in management cared, they were mostly laid off and discarded before there was even a credible replacement available.
One of the clients I’m consulting with has one of the best cloud onboarding docs I’ve ever seen. Lays out exactly the services supported. Who does what pieces. What is self service. They break out latency differences between the cloud environments and on-premises. A serious amount of good work that’s incredibly useful working within their system. I use it frequently. Their head of cloud engineering has a permanent “away” message on Teams pleading with people to check the cloud docs first instead of just asking him directly. I would be frustrated too.
For me, the primary purpose of documentation is to help myself in the future.
I don't view it as something I'm writing for someone else anymore.
Ultimately, I think that's helped me write better documentation.
Writing for an imaginary audience is typically harder than writing for a concrete one, and things you might think "someone else" might need to know - they either 1) don't, or if they do 2) won't read your docs anyway, most of the time.
When someone asks me a question that is or should be documented, I like to ask where they looked for it (link or search query).
* Sometimes, this prompt is enough for them to find the answer.
* Sometimes, they tell me a spot that makes sense to them, and I make it have the answer. (Maybe just by adding a cross-reference.)
* If they refuse to look at the docs, I can't help them.
The answer has always been “I asked Bob and Bob half remembered you worked in it once”, without any attempt to look for info, in my experience :(
That's when you direct them to the docs.
People rag on StackOverflow for being mean, but it was a good training ground for developing habits that satisfy the social contract of professional spaces.
Always fun collaborating with someone on a project and having them surprised you actually read their documentation and checked out their code instead of expecting them to explain everything from the ground up.
If it helps, I have found the attitude that writing is mostly for the writer to be healthy in continuing the practice. And it largely tracks with how I feel I have had better understanding of things I have documented than those I have not.
At some point I started to include jokes in documentation to encourage people to read it. For the most part, this only entertained whoever the knowledge or project admin was.
Exactly. I recently found out I can use Atlassian‘s ROVO to ask questions against our Wiki and Jira. I now forward consultants to ROVO first and only if they can’t find an answer then I’d look at their questions. Saves me a good chunk of time. They never read my docs otherwise.
I’ve recently had a massive productivity boost in my Claude workflow simply by asking it to search for and review: relevant PRs via `gh` search, relevant Slack threads, relevant Confluence pages (+edit history), relevant Jira tickets, relevant Sharepoint docs, and relevant Teams transcripts. I ask it to do this comprehensively before the task, during the task, and after the task. It feels like a superpower.
Turns out all this time you were writing for AI to read!
It's been this way since the beginning.
That's why Usenet is full of posts reading "RTFM."
For some reason, instead of telling people to do that, which solves the problem, we just stopped writing manuals altogether.
Yup. Claude will rtfm. Most humans won't.
If you tell it to. Otherwise you might get the classic "You're absolutely right – I made that up. Let me look at the documentation"
Sometimes you get lucky and it both looks up the documentation and then ignores it and makes stuff up.
But you can tell it to once (in CLAUDE.md for example) and it will nearly every time (it's getting much better at that). Since opus 4.7 (which I consider a downgrade overall) it's been much better at following CLAUDE.md . I even have an intentional contradiction in my user-level CLAUDE.md and the project levels, so I can tell which one is taking precedent or if both are disregarded, and it follows at least one of them most of the time, and it follows the local one 95% of the time.
While they absolutely do fail as you say (though in my experience not by default), this failure mode is still a massive improvement over the frequent human case of guessing based on the function/class/property/argument names.
Now, a really good human collaborator who reads all the stuff and thinks carefully, that was still better than what I saw from AI models at the start of this year. But I've also worked with my share of idiots, and been one too.
I'm not going to get into if *current* models can or can't reliably do any particular thing to any particular standard; previously my comparison was the same conversations with regard to video game computer graphics in the 90s always being "photorealistic" when they really weren't*; now, I'm starting to feel such discussions have the same vibes as Tesla fans insisting that "FSD-{insert current version here} solves all the problems and is a real breakthrough and the Rototaxi will totes conquer the marketplace this time for real bro, just one more version bro", etc.
* https://archive.org/details/nextgen-issue-26
Very often that is a sign of poor UX, or that the documentation is in the wrong place.
I have a project where I asked the coding agent to write a design doc for each new feature. It now has 80 or so design docs, which aren’t kept up to date, so it’s a historical reference that we don’t go back to in practice. At some point I will probably delete them.
In a different project, I instead have it maintain a project overview and a couple other docs, and we delete plan.md once the work is done and the docs updated. I like that better.
Claude never complains.
In my experience the text for the Claude has only one requirement - the intent and meaning must be there.
The text for Claude doesn't need structure. Doesn't need style. Doesn't need formatting. Doesn't need deeper thought. The only important thing is that it includes somewhere somehow the relevant bits of information.
The quality of prose I throw at him is below what I would show to any other human. I just turn on my microphone, keep dictating whatever comes to my mind and I think might be relevant. After this is done I may or may not ask Claude to rephrase what I wrote before keeping it as memory.
On the other hand people judge you for what and HOW you type. They complain about it.
It's in my experience that people will generally judge a programmer much more for the quality of his outputs than the number of them. So if your target are other humans - it's better to have no docs than bad docs. For claude it's the other way around.
But the critique is good! I strive for feedback when I write docs. Usually they are just ignored though.
I've always tried, but usually work demands make it difficult to stop and finish. At least these days I can hand off documenting to an LLM. If anything, I have to tell it to back off a little to make it more readable for human eyes.
A lot of developer documentation is effectively write only. It gets written, often at great cost. But it doesn't get read a lot. It doesn't get a lot of feedback. It's typically out of date. And the lack of documentation is not really blocking anything important anyway.
If you are ever on a project where somebody goes "Somebody should write some documentation for X", you should counter it with "Great idea, get on it!". Mostly nothing will happen. It's rather thankless work. Some people are more proactive on this.
I actually tend to write documentation for myself. Because I'm old and wise enough to realize that if I come back to a project in two years, I will have forgotten most that I would need to get back up to speed quickly.
With agentic coding tools, it's different. The documentation helps. And it gets added to even if you don't ask for it. Which is nice. And you can get a lot of documentation added with a few simple prompts. Which makes it cheap and easy to generate.
It's not just documentation. Everything that makes programming easier is now suddenly valued, because wasting tokens is obviously worse than wasting your employees' time.
Employees get paid either way, so weirdly that makes it less motivating. Costs aren't lower if you put more work into writing a good spec.
When you're paying piecework style, suddenly the work needed to write a good spec has a bottom-line payoff.
Because there will not be any point of explaining for humans, it has to be explained so AI have all the context necessary to re-explain to a human, adapted exactly to match current skill/personality and so-on.
I used to write extensive docs, now I solely write docs (I mean, the typical automated model Zoo do it for me) so AI know what to do later. Even inside the team, we don't really explain (except very high level concepts) anything for onboarding because the onboarding is directly on the harness, the file structure of a repo isn't even really checked anymore (probably no point, soon enough) as most people will end-up entirely on a chatbot anyway, it's start to be hard for me to even justify going out of our own internal harness windows (I have 16 to 32 of them open with 8 monitors).
I genuinely think a massive wave of depression will hit "tech workers" when they might realize that all our greatness (programming, arguing, planning...) will just be to prompt all day long and we will just be all in a "chatbot" in the end.
As a human, I'd rather just explore the code (which I tend to trust more than anything written beside it) myself.
The bot though- I don't want it to waste a bunch of tokens exploring nonsense. If I can write a few lines of text that will help it get straight to where I need it to go for 99% of work, that's a win.
It feels hand-holdy when done for the bot. I don't want to hold my follow human's hands.
Because Claude actually reads what I wrote. Other programmers, not so much.
I had an online art class right before Stable Diffusion came out. After SD workflow got well known among the art community, I asked the teacher what's the difference between AI image-gen and human artists. His answer (paraphrased): It's easier to make AI learn.
Programmers aren't documenting for Claude. Claude is documenting for Claude. Programmers are, at best, reading the documentation Claude wrote for itself to ensure there are no glaring mistakes.
I came to this realization after seeing developers churn out 30 minute long reads of slop documentation. It's for the agent, and the human interface to it is through the agent. Over the last week the plans that Claude has been writing for issues have been largely a single massive unreadable paragraph of awkward sentences, but it's working, the implementations from it have been solid.
the key to avoiding slop in this context is to have it write inline documentation (e.g. jsdoc), so that you can quickly review if it matches the required implementation/interface
We are now writing specs for important components and algorithms, and spend quite a bit of time aligning on them before implementing the production version. Those specs are often informed by vibed prototypes, but usually it’s also two or more people really thinking through an algorithm, and aligning with interfaces to the adjacent systems. They are usually very information dense.
I don’t believe spec driven development is a good idea though. The architecture should be made with intention as well, or I feel we‘d end up with whatever happens to be ranked highest in the latent space. But the specs are great to align cross platform teams behind shared concepts, and they are a good input to automatic reviews.
I get the feeling specifications documents are going to become the hot new programming language. I suspect, over time, we'll see special syntax and semantic conventions get published for specifications docs that result in the best chance for a coding agent to get the implementation right the first time and with minimal tokens.
Documentation is worth it only if it is read. If your coworkers don't read/remember/respect the documentation process then people tend to not keep the docs up to date. Unless the docs are for users who you don't want to come to you at all for support.
Claude is a better reader. I have to just tell it to read the docs/specs sometimes.
This is so true. I hate it. I document the same way for myself as I do with claude/codex and it's great it wasn't to much of a difference to be more verbose outside maximizing tokens.
> I keep seeing programmers say how angry it makes them that people are willing to write detailed CLAUDE.md and PROJECT.md files for Claude to use, but they weren't willing to write them for their coworkers.
Similar for adding static type checking, which makes it easier for AI and coworkers to understand the code, catch mistakes, and to refactor. And now there's coders willing to add static type checking to help AI but didn't see the benefit before.
I noticed this while programming with LLM assistance. It's easy to put effort in for the LLM because there is immediate positive feedback: improving the context gets better results. Folks have mentioned other reasons LLMs get better support like docs for humans don't get read and don't improve KPIs.
I think this might lead to more literate programming. The main challenge with LLMs is humans understanding the code, which lp helps with. Also, it includes the relevant context with the code itself. Both of these things help humans and LLMs.
I've been trying it myself and I think it's working pretty well. The only challenge right now is that it is difficult to get models to output code literate style. The output from LLMs tends to open a code block and put everything in it with a ton of long comments, rather than create several blocks with prose in between. [A caveat is that I don't have access to SOTA models.] My plan is to add an agent that just focuses on the style.
yeah, because claude will actually read the docs
Don’t take it personally. Programmers are not documenting “for Claude”. They are documenting for anyone using Claude.
Writing and reading docs used to be incredibly time consuming, and programmers often didn’t read them. Now you can all but guarantee a doc will be found and read and followed if it’s relevant. The ROI on docs is high now.
It’s all about the incentives.
Unfortunately, companies often measure developers by their own PRs.
An unfortunate outcome of this is that writing docs for other developers isn’t really incentivized properly (and with stack ranking, you might even say it’s disincentivized). Writing docs for Claude, however…
most issues in my company are just automatically solved now, we are at a point where the issue is just writing the issue (that's what requires mental effort).
Some people like to brag about how productive they have become with AI, but I see them spending a few hours a week adjusting which model to use, trying the new shiny harness or writing Claude skills.
Are you really more productive if instead of coding you are spending your time tweaking the AI to do what you want?
That's just what the people that liked to put a lot of effort into customizing their IDEs or WMs have moved to.
“Modern kids don’t program, they just play with frameworks”
Well of course people adjust their harnesses, skills and whatnot - that is how programming looks like now. You don’t touch the code, you build a machine that builds the code instead.
The question is how much people can produce this way. Me, personally, a ton - right now I feel I can do in a week what would take me a month-two. And I’ve had 20 years of experience in programming.
eh, that seems like the least harmful part of this entire thing, we've had that for decades https://www.youtube.com/watch?v=urcL86UpqZc
I've never had this problem.
The problem I have had is other developers expecting me to maintain documentation for their tools. To the point that they wage stupid inter office wars because they don't want to learn a command line utility with 20+ years of documentation itself.
Truth be told, I wrote docs for other programmers but now I have Claude Code write docs for itself but if you looked you might conclude that I wrote docs for Claude.
I learned a long time ago to avoid writing long emails because people don't read them. LLMs are quite the opposite, and will have 'attention' for every word you prompt it with.
Ah, I had that realization too. Then I started writing short emails and they still didn't read them.
Managers will document for employees. That’s maybe the better comparison.
I've noticed that things like "decision documents" and complete feature or service {proposals,white papers,"one pagers"} have become acceptable since the start of the AI {boom,bubble} in a way that they weren't before. It's now seen as valuable for an engineer to lock themselves in a room and write 4 pages of specs for something they're working on, since the expectation is that this will speed things up when doing the actual coding. I have personally always liked to work this way, but have had to hide it. Now, even if I'm not really leaning on the AI for implementation (and not at all for writing the {spec,vision document}), I'm seen as some kind of LLM whisperer, even if I'm more on the Luddite side.
In engineering of all kinds (or at least the ones I'm familiar with), nothing really beats calmly sitting with your thoughts, stating a problem, then getting up and walking around while you think about it, then sitting back down to write down a possible solution, and then asking colleagues to read it.
But Claude will actually read it
I get claude to write a context.md for any github project i'm working on. It helps keep my context up to date, or else claude keeps telling me to build things I've already built.
Why make this about Claude? People are free to use any agentic coding LLM.
Documentation is firstly for yourself, secondly for your coworkers and/or users, and only last for AI. It is the art of writing it that strengthens one's understanding, so it doesn't make sense to have an AI write it.
unlike programmers, claude understands programmers.
You don't need a theory of mind to effectively manage or collaborate with a chatbot. You do for other humans.
Yes, I've already "abused" this a couple of times to get some docs written that we had needed for years but hadn't been written. All kinds of docs; code documentation, deployment documentation, overview documentation, architecture documentation. APIs that we kicked around as being useful for years are now actually on track to be written because we can't integrate non-existent APIs into MCP servers or skills.
On the one hand, I also feel like "come on, couldn't we have done this earlier?"
On the other hand... the costs of the docs have decreased. Simply firing a frontier model at your code base doesn't always produce perfect docs but it's a heck of a good start. I do recommend some tuning in the request, e.g. I like to explicitly ask the AI to document data flow rather than the usual list of "here's this component, here's this component, here's this component", but it's pretty easy.
And the utility of docs is now much higher. I really just recently moved into the classical "architect" role and in some ways I'm glad it wasn't much sooner, because my GenX cynicism tells me that nobody ever reads the architecture docs. OK, OK, sure, technically nobody is a bit too strong. Sometimes, some particularly intrepid or conscientious souls surely read them at some point. But from my own experience I could count on being able to hand out API docs, structure docs, flow docs, and their primary utility was that when someone tried to deflect responsibility with "but but but they didn't provide any docs" they couldn't, because I had. People eventually learned to stop doing that because I always provided the docs because I saw that coming. And they made a great background on the shared screen as I had to walk someone through the entire thing in a meeting anyhow. They were more a really specialized meeting transcript than something I could provide in advance and expect much out of.
But now, if nothing else, AI will read the documentation. I can tell people to pull it in, and while it doesn't mean all my problems go away, there is now a much cleaner path for me from "writing an architecture doc" -> "lines of code in somebody's repo" than there was pre-AI. My architecture docs are now somebody else's prompts. The utility of this sort of documentation skyrockets compared to the old days.
So, when the costs decrease and the benefits increase, it isn't a surprise that suddenly, it's easier to get some of these things done that we "knew" we needed for a long time, but now with the new cost/benefit ratio can cross the action threshold.
Wait until you realize that MCPs are just the APIs that we've failed to write before, and skills are just the documentation and simple CLIs we've failed to write before
Another blogger goes down. Of course programmers have documented important software for each other.
Claude emits garbage, so documentation will be garbage as well. It doesn't matter, because everything will be rewritten and tokenmaxxed anyway.
In other words, the blogger now has a job where Claude is foisted upon him and he toes the line.
Claude A) reads the documentation and B) needs the documentation C) can write the documentation quickly. None of which is true for your and your coworkers, at least not consistently.
1. Claude's productivity is your productivity, but team's productivity is not your productivity.
2. Claude will actually read what is written (well parse for autocompletion, not actually "read", unless you are under AI-psychosis).
> well parse for autocompletion, not actually "read", unless you are under AI-psychosis
A cheese-grater Mac is not a door stop either, yet look at it go.
Will people ever let go of being hung up on how exactly an LLM produces text, or do I really have to keep listening to this shit for the next several decades? As if being a program didn't already prohibit them from reading to begin with!
Tell me how you don't think a plane should be characterized as "flying" unless one is in "avionics-psychosis" or something. Surely you can appreciate how this narrow requirement for avoiding anthropomorphism and metaphors is entirely performative, and that engaging in them is in no way a sign of any mental illness.
And I get the performance aspect behind it, people wish to reject the metaphor to tear into the thing even that way. Or they come from a religious or spiritualistic background, and find the mere comparison insulting. But fuck it's so cringe. It's not news, and it's not insightful. Nobody who's ever had them shit out a page per second via like a dozen subagents, or utilized them being stateless and seed-bound, has any actual illusions about them being anything more than "just text generators". If they nevertheless assign intelligence, understanding, or similar traits to them, then clearly they simply don't agree with the anthropocentric philosophical insinuations performed. It's not some mistake or psychosis. Come on.
There was a growing consortium of developers who bought into the idea of "self-documenting code." They actually considered you incompetent for writing documentation and relegated this to roles they deemed inferior. I wonder what these types of developers think of this?
I'm one of those developers, and I think it makes sense to write documentation for Claude and I have no issues with that.
The point of self-documenting code isn't to get rid of the documentation. Instead, it's to integrate it into the code. This fixes the two biggest problems with documentation. First, that the code will often be updated and documentation left behind, making it useless. And second, that English and code are intertwined in the same document, making you constantly switch mental contexts of how you are reading. So no, I don't consider developers who write documentation to be inferior. If anything, I value documentation even more, and the purpose of self-documenting code is to make the documentation better, not get rid of it.
With Claude, the documentation you make for Claude is just fine as it doesn't run into any of the above two problems. The documentation isn't being left behind, because you add to it instead of the code. And it's not intertwined with code, because you are just writing English for Claude, you are not writing code in-between.
I have large doc file from a feature and everytime i tell claude to do something (read it) it consumes a shitton of tokens. Better to have small focused facts for ai instead.
I've been noticing that too. "Hey, the normal documentation for our software of a crude API list describing what each command is and each of its parameters isn't good enough for the AI. We need to provide the AI with instructions on how to use the software to solve common problems"
Uh, you needed to do that for humans too. You just didn't. There's a reason everybody scrolls to the bottom of man pages ASAP.
sure, but those documents are generally just as useless because they're 70% complete, 10% indirect and 20% wrong.
Unstrutuced slop is no better at best, and much worse at worst.
> 70% complete, 10% indirect and 20% wrong
I haven't had too much problem with information in summaries being wrong, but there have been times the LLM will miss the most important details. Then when you tell it, the response is "Nice catch!" or something like that.
The key thing that makes a summary valuable is it retains the most important details while being shorter. Missing those details makes the summary wrong.
normal human reading speed is 35 WPM. Here's what that looks like, assuming 1 word equals 1 token: https://mikeveerman.github.io/tokenspeed/?rate=35.7&mode=cod...
When you say "you haven't had much problem" one can only assume you're _not actually reading the output_. In fact, like most things in modern times, one has to assume you arn't actually reading the output. You're skimming it; you're finding what makes sense and extrapolating that. This is the 70%.
The problem with non-deterministic models is that the output can't be deterministically assessed. You're harboring a delusion that you're getting real good output.
Most likely you're doing the baby extrapolation: you make it do a small, tightly scoped project and it's does 99% right. Just like a baby doubles in size in a year. Extrapolating, that baby will double again; but it doesnt.
Your human compensation limits does not extrapolate to the size and knowledge that's fed into the model and the context it extrapolates.
Slop in, slop out. The new GIGO?
Ahh yes, the documentation for claude.
When someone created a CLAUDE.md, then changed some stuff around and when I later had to touch that repository my claude was hallucinating classes, functions and architecture that was already long gone!
I just deleted the CLAUDE.md, since I had no mood to "fix" it.
Couldn't you have claude correct the CLAUDE.md?
Thats what "autoresearch" does, init?
If you have Claude write down notes, check them into the repo when you're done. It probably can't hurt and it might help.
LOL. It didn't even cross the author's mind to consider reading the notes himself to decide if they make sense.
AI is sending us down a path of anti-social behavior. It will be bad for us, of course, but AI is only as good as it is because it was able to be trained on info from github, stack overflow, etc. Without socializing interesting info, humans and AI will both suffer.