Maybe someone can tell the LLM's about these anti-patterns, like, seriously, would it help?
I'd prefer of course if people just actually themselves wrote the text that they expect me to read my human self.
It’s ok to be selective about your target audience. Most of us are writing for free anyways so we’re not losing revenue by not explaining what a computer is in an article about optimizing LLM throughput. You might be writing to other engineers who are familiar with the topic but not the particulars of your project.
Put the most important thing above the fold. If you catch someone’s attention in the first 10 seconds, it buys you another 30.
Add visuals. Boxes and arrows, charts, videos where appropriate.
If you must write a meandering narrative, put it at the end, not the beginning.
This applies to almost everything in the software space. New tool? New design pattern? New library? Language idiom? Language? Or, for more modern takes, new model? New harness? New harness option? New use pattern? Give a brief summary of what a project looks like without it, to convey the problem that its existence alone is solving. Then go into the details of how it might compare to other solutions.
Maybe it's just a specific way of how my brain works that finds this sort of information intuitive, and the lack of it particularly annoying.
> “The reader knows everything I know except this one thing”
Because as the article says, it's hard to know what your audience already knows, and far too easy to take 'shortcuts' when helping them by forgetting how many things you've assigned to muscle memory.
Teaching people is difficult, and it's really easy to leave a lot of crucial information out if you're not careful.
That said, I do have one more antipattern (and one more recommended design pattern) worth considering here too.
For the antipattern, it's when the tutorial doesn't work anymore because of updates to the subject in question. I remember this being a big issue when I was trying to learn Angular a few years back, since the official tutorial was clearly written for a long obsolete version of the framework that functioned very differently from the current one.
The number of times I've had issues like that is far too high online, and it's usually because the person that wrote the tutorial didn't check back in on it whenever the language, framework or relevant dependencies got a major update.
So, if you write about a topic and things change significantly, go back and check your work from before. If you can, update the article, and if you can't, at least put a notice at the top saying the article is now obsolete and should be skipped.
On a different note, a good pattern to keep in mind is that you don't need to be chained to a specific format. Way too many people assume that because they're providing a written tutorial, there's no place for images or video content there.
But the truth is that in many cases, an image is literally worth a thousand words. In other cases, showing people how a step should go in video or GIF format can be more helpful than just providing a list of bullet points.
So, take that into account. Provide all the information in your chosen format for sure, but provide relevant images and videos when the info is clearer in that format, or for when people need a visual cue. That way, you can check them if you're struggling with the written instructions, and figure out whether your setup is wrong (or the tutorial has left out some crucial information) based on how similar the author's screen is to your own at that point.
Just because you're using text doesn't mean you have to treat your guide like it's going on GameFAQs in a .txt file in the mid 90s.
I find that LLM-written software blog posts generally spend like 3x as many words as would be ideal, but of course take a lot more editing and care.
Not only the intro. Many bloggers try to write as if they'd writing a story, building suspense and all. For technical writing, don't bury the lede.
But also in the case where the writing is actually not technical, then... obviously the parent comment's complaint wouldn't apply? C'mon.
It is a massive turn off for me and I just simply close the window if I find they don't get start getting to the point.
I am much more forgiving if the meandering intro is done by someone that is clearly just someone writing up their own work.
If you're writing on your personal blog then take all of this with the size of salt crystal you feel it deserves. Personally, that's about the size of an Acme safe hanging over a cliff waiting for an unsuspecting listicle writer^h^hcoyote.
I personally prefer articles that link to other(better) sources for definining concepts instead of trying to explain everything.
So several times I read articles like a stack, starging with A, then in the middle going to B and after finishing B going back to A. It doesn't bother me at all. It actually says to me that the author understands they cannot be experts on everything and recognize other articles.
I also enjoy articles with reveal their twist late if they are not super long.
On my personal blog I am actually writing both styles (just explain right away, or build up to something that will become clear later in the article)
I start with the conclusion in the first paragraph[1], and the user can decide if it’s worth their time or not. Unless you’re Gabriel Garcia Marquez, no one’s going to read your rambling.
Bezos has a sharp mind and often got impatient with the paper for not getting to the point quickly enough. He would deal with the boredom by highlighting all the mistaken assumptions and errors in the paper, which would often derail the meeting.
One VP came up with a way to deal with that. His advice was to write the paper as if the reader was an expert in the field--no definitions, no preamble, just assume the reader already knows.
Then remove every other paragraph.
The result was a paper that forced Bezos to focus and think about every sentence just to understand it. That made it easier to get his agreement at the end.
An effective strategy for lots of higher tier management. For both good and bad reasons - often they don't want the details, they want to know that you know the details. You're being paid to know those details, after all.
People are not using it any more as any AI assistant will give you the answer in seconds, perfectly adapted to your use case and with an easy way to ask follow up questions.
Anyway, I'm learning so much more so much better than I ever have before. Turns out the ultimate slop tools are also the ultimate learning tools if you use 'em right.
Today LLMs have completely replaced the original role of StackOverflow.
If the LLMs could get the same results by just reading documentation and source code, then the content on programming forums would be worth nothing, yet AI companies scrape them constantly... why?
Do we have reason to think that they scrape them more often than they scrape other stuff? (Honest question, I have no idea.)
Doesn't Stackoverflow exist because people can in fact not read the documentation or source code, at least not to the point where it helps them understand their problem.
Yes; not sure how this is relevant to LLMs. One of the most impressive things I've seen change in the last few months is that they don't think twice about cloning a repo of linked-to-my-app code to analyze it to determine a solution. Or even disassemble closed-source object code to find an answer!
With agentic speed/capability, the calculus of "eh let's experiment and explore from the outside a little first" vs. "let's just read the dependencies (whose codebases I'm not familiar with), potentially including the binary itself, and figure out exactly what's going wrong" changes. So I think what's valuable in terms of ancillary info for technical topics is changing.
"The sole purpose of the first sentence is to get you to read the second sentence. The sole purpose of the second sentence is to get you to read the third sentence… and so on."
(quoted from https://thehustle.co/write-like-hustle-boring-stuff-writing-...; the original idea is apparently from Joseph Sugarman)
Otherwise you end up with an article whose sole purpose is getting you to read it to its end, without accomplishing anything other than wasting your time.
Or write something that actually provides value to your reader, communicate that value effectively, and trust your reader to recognize that value. Which would you rather read: writing that was optimized for psychologically capturing your eyeballs, or writing that was optimized for providing you something of value?
I really didn't mean to encourage emotional manipulation, soulless optimization, listicles, etc., although I agree that a lot of writing online falls in that bucket, and it's even likely that the advice I uncritically quoted was aimed at that bucket.
I obviously should have thought more carefully and written more clearly.
But I don't think that "Write each sentence to give the reader a reason to keep reading" and "Actually provide value to the reader" have to be mutually exclusive. Instead, I think of it as (like you said) communicating the value effectively: dispense with the throat-clearing, meandering intros, irrelevant personal details, weak thesis statements, etc., and write tight, well-crafted prose that respects the time and honestly maintains the interest of those who'd benefit from the value you can provide. (I certainly don't claim to be an expert here! Appreciate the video link.)
It does not matter how small this community is because, at least for me, it is the only engineering community that actually matters going forward.
Not everything is a product.
Happy to take any feedback or questions about this post or hear your favorite software blogging anti-pattern.
When bloggers say, "I don't want to write about topic X because person Y already wrote the definitive post about it," I say, "However good the existing article is, there will still be people that prefer yours." Even if the other person is smarter, more knowledgeable, whatever, you're going to explain it in your own way, and that's going to resonate with a distinct set of people than any other article out there.
I think your anti-patterns apply very well to the stereotypical SWE or HN reader, and if that is who you are targeting, you should absolutely follow these. But the biggest anti-pattern of all is following these anti-patterns while hoping to appeal to the untypical SWE or HN reader.
> I think your anti-patterns apply very well to the stereotypical SWE or HN reader, and if that is who you are targeting, you should absolutely follow these. But the biggest anti-pattern of all is following these anti-patterns while hoping to appeal to the untypical SWE or HN reader.
Can you share more about what you have in mind?
I feel like these recommendations apply outside of software/HN. Like if I had a way to reach knitting bloggers, I'd imagine most of the concepts would be the same with different specifics.
Do you have a software blogger in mind that writes well but doesn't match what I describe in the post?
My thinking there is PhDs/researchers a lot of the time like to dig deeper and are also pretty skeptical of new information and want to see it backed up by someone else unless the claims are completely novel, then they want the raw evidence typically in line or near what was stated as novel.
If you click on a blog post, and the writing is poor or seems LLM-generated, you keep reading? Or do you mean that you're willing to forgive more superficial things like meandering or excessive formality if the post has other redeeming qualities?
As an example, I clicked a post a few weeks ago about orchestrating Claude Code sessions[1], as that's a topic I'm interested in, but I found the writing so poor that I felt like the post was either LLM-generated or written for someone who had different needs than I did. Would you read a post like that to completion if the topic interests you?
[0] https://lobste.rs/s/youq7y/how_write_blog_posts_developers_r...
This! Well, kind of!
I definitely do some type of screening for pieces that I read: I may look up who the author is or what they've worked on; the piece may have been recommended by someone else I respect on social media; the topic itself may have little other writing on it online which signals that it may contain original thought, it may have been up-voted on HN and had interesting comments, etc.
That is to say, I try to evaluate whether it's worth my time reading the article in full, even as I start reading it. I do have a habit of saving URLs of things I read, and typically jot down a few personal notes in a local .md as I read along.
I do use LLM writing as a negative signal: it could be that the author hasn't spent that much time thinking about the issue, and I can spend that time reading something else from my reading list. But there's definitely been a few cases where I read pieces in full, even though they were clearly heavily LLM assisted, only because the material just seemed worth tanking through for.
Perhaps, rephrased: I seldom drop pieces because of the prose, more often I do so because it lacks substance. And, to add, it could entirely be my selective process that leads me to dropping articles less!
I'd rather read something that shows any semblance of personality than yet-another engagement/reach/marketability-optimized "article" that just follows all the established tropes and could be written by any drone or clanker.
And, allow me to add antipattern no. N, in full display in the posts below: A 1:1 ratio of main body to footnotes, because we want some place to put all the spicy asides and hot takes.
What to do, my brain struggles with brevity :)
Exhibit A:
Over ten thousand ~~words~~ tokens on bitemporal data modeling (in SQLite and Clojure), which has a preamble and a postamble: https://www.evalapply.org/posts/poor-mans-time-oriented-data... (Plus, this one breaks on mobile portrait view because I couldn't figure out the CSS-fu needed to stop one pesky table from overflowing, and I am not going to fix it because the post reads fine in landscape mode). Exhibit B:
More thousands of words, urg no, tokens... on Terraforming one's infra: It opens with a Harvey Specter meme. https://www.evalapply.org/posts/systems-approach-to-infrastr... Exhibit C:
Another giant post on web stacks from first principles, and this one has a whole parable as well as a preamble: https://www.evalapply.org/posts/clojure-web-app-from-scratch... Exhibit D:
A six part series, because this one got too long (re-making your dotemacs from scratch tends to go that way). Um, and each post gets progressively longer and preambly-er: https://www.evalapply.org/tags/emacs/index.html#main(edit: reorder + fix formatting for clarity)
I can understand the position that you do care about other people reading your post, but you weigh your own enjoyment of your posts more heavily than anything else, but I'm skeptical of the claim that you don't care who reads your posts.
Also, the posts are structured to the way I have come to arrive at some conclusion, or some understanding. So it is very much written for my own benefit, and incidentally shared because well why not. Surely I'm not the only one who was confused, or ignorant, or just curious about $Topic... Just don't expect that I will rewrite the thing for some abstract audience persona and how their brain works. If something is weird or unclear or plain wrong, search is at hand. And if something is annoying, well there are certainly lots of other places to go to instead. So, no, I don't really think about who reads my stuff. These days, it must be all bots anyway. So be it.
But I do like to also "learn generously", and I love to share and talk the about stuff I end up publishing from my drafts and notes (which far exceed the stuff up there in public view). So when I feel like it, I share links in various places. Usually its crickets. Sometimes there is conversation.
The "share to HN" etc. stuff is in service of prompting people to share if they feel so inclined. And honestly, I don't think people share via those links. No data, just gut feel, given how long the site has been up, and how uncommon it is for not-me people to post links to HN.
As for the prominence of said links. It has been an eyesore and a long-pending thing to delete. Sometimes I use the site as a playground. That time, I wanted to see if what "they" say is true about putting sharing links up top, prominently. So I slapped that section in, during one of the layout refactors.
And so, the top of the posts got way too busy with those "see me! pick me! choose me!" links, and stayed because I couldn't bring myself to refactor yet again. (Also because there's not much to lose because someone got annoyed at the eyesore click-share links. Yeah, friend, I'm annoyed too. Sucks to be us.)
(edit: expand comment to clarify some thoughts)
Not uncommonly, people are salty in the comments. Mostly it's fun to ignore the salt, and let the community do its thing, while also trying to observe what's going on with my feelings. Sometimes it's fun, or necessary, to show up and respond to flip the thread from destructive to constructive. This is a skill I can get better at, and I feel my odds of being better are higher with topics I've thought about for a good long while, and so that balances out in favour of taking the risk to self-share.
It so happens the eyesore "pick me!" links are gone now, except they are in a draft layout refactor. But please don't ask I know when it's going to go live. Could be tomorrow (or rather today---it's 2am here---and in that delicious sleep-deprived fugue state say eff this, I'm done, send it).
Or it could be next year.
(:
In my own writing it's like, I'm mostly trying to put something out in the world that I, and sometimes my friends, enjoy. The rambling is not exactly the point, but not exactly not the point either. If other like-minded people find it, great. Once somebody tipped me a thousandth of a Bitcoin or so, and that was fun too.
For half a second I read the rest of it as "a thousand Bitcoin", and immediately thought "okay, so there's a story here about how it was way early and how you tipped someone else, and now, just look at them, wow".
(edit: also, cool blog yourself... subscribed!)
Honestly, I think there is value in having lived in "idiot mode", because that is the feeling I walk around with most of my life. And thinking is hard, so I don't want to, most of the time, but then I have to, because who will pay my bills otherwise?
Some of those posts are, in fact, because I felt like an uncomprehending idiot, about the blog post's topic, for the longest time ever. And it turned out that I was holding it completely wrong, or had pop-cultured myself into a prejudiced (therefore uninformed) opinion. Then, once some clarity arrived, I wanted to spool it to disk before it evaporated again. And lo and behold, post emerges.
This is something I see a lot too, and I almost covered it in the post. I think it goes hand in hand with excessive formality where people think that if you're writing a blog post about something, you have to be an authority on the topic, but that's not true.
It's valuable and useful to write about things when you're still a beginner as long as you present yourself as a beginner. Julia Evans does this extremely well. My favorite example is "Some notes on using nix,"[0] which got me to start using Nix when I'd seen lots of other posts from more experienced Nix users that were too in the weeds for me to understand. But the way Julia approaches it is that she's learned a little bit more than someone who's never touched it, so you can read her progress and get a slight head start from where you would have started without her notes.
[0] https://jvns.ca/blog/2023/02/28/some-notes-on-using-nix/
I understand what you're saying, but often well-written articles end up getting passed around and relied upon as if they were well supported documents. I don't know if it's as common now, but the Rails community went through waves of fads as someone wrote an article and then everyone read it, and started following what it said, when often it wasn't good advice in the first place.
It got the point where, if you looked at an old enough codebase, you could get a rough sense of how old some code was by looking at whatever fads it contained, and look back to see when that coding quirk was popular.
One way to make this even better is to include your questions about things you don't know. "I wonder if that means X or Y, perhaps one way to tell would be investigating it with method Z, whihc I haven't had time to do yet, I wonder if anyone else has or knows."
LLMs have made this problem extremely worse. Imagine how'd you'd explain what an MCP is in a couple words and technically, then try to look it up. There's phone books worth of pages and text that never end up getting to the point.
A lot of Paul Graham and Joel Spolsky posts don't get straight to the point and usually do not follow an intro -> body -> conclusion format. A lot of them start with a story that makes the direction of the post unclear[0] or include long digressions whose value isn't immediately obvious.[1]
For a while, I struggled with this contradiction because I think good writing should quickly demonstrate the value a reader can expect, but I think Graham and Spolsky are excellent writers that frequently take their time in getting to their point.
The easy answer is that Graham and Spolsky are famous, so they can do whatever they want, and people will still read. I've come to think it's actually that writers like Graham and Spolsky are so good that the quality of the writing itself is the thing of value that keeps you interested even if you don't know what point they're going to make.
[0] https://www.joelonsoftware.com/2000/04/06/things-you-should-...
[1] https://paulgraham.com/worked.html
But to take Spolsky's "Things You Should Never Do" as an example, obviously nobody's Googling, "things to never do," clicking Joel's article, and then getting annoyed at Joel for not telling them immediately. They're finding the post on HN, RSS readers, forums, etc., where they didn't have a specific goal in mind beyond learning/entertainment, so the author has more room to take their time.
Right, all good (human) communication boils down to both the author and the reader having a theory-of-mind for one-another. The writer must anticipate what a reader will be thinking, and a reader must imagine [0] what the writer wanted to convey.
That's part of what makes the modern epidemic of LLM slop so frustrating: The correctly-formed words make us waste effort trying to reconstruct a mind that was never really there. Like some animals encountering an extremely realistic plastic fake that we cannot eat/mate-with.
0) https://users.ece.utexas.edu/~perry/education/SE-Intro/fakei...
I don't know if it's still there, but Grammarly used to have an AI feature that specifically made text longer. It was literally a button that says "Make longer."