Join the discussion
Write your take first — we'll ask for email only when you're ready to publish.
- Hacker News
- I wouldn’t have thought that black text on a lavender background would make for pleasing reading, but it was actually quite nice.by cainxinth
- Ha thanks, it was pink a while agoby stephantul
- I probably would have agreed 50 years ago, but it's a bit hard now. Fortunately, select-all boosted the contrast nicely. ;)by jakzurr
- The counterpoint is that building software is not building a fence. When you create something in software, nothing tangible changes until that's accepted and running on all the places that you deploy to. A PR is just a hey, here's a fence that the contributor built elsewhere that proves that building something like this is possible.
The corollary is design your open source libraries so they're obvious enough that the chesterton's gaps are obvious. Anytime an AI tool submits something that breaks your expectation of things not being necessary it usually highlights that there's a missing gap in the explanation of what is necessary.
by joshka - I’m not sure I share your view of PRs. I still see submitting PRs as something that puts pressure on maintainers. Even incorrect PRs take time to verify and review.
I also don’t see how this differs between the “gap” and the “fence” part of the metaphor. Whether someone submits a rewrite/removal (fence) or a new feature (gap) for PR review, it’s still going to cost me attention.
by stephantul - Whoever built the fence should have put a sign on it saying why.
Oh, and integration tests to check that the problem doesn't recur when the fence is replaced.
by kps - Advocates of Chesterton’s Fence tend to miss that they’re applying selective pressure to favor systems that fail to document (or outright obscure) their purpose.
Of course, the much more obvious flaw of Chesterton’s Fence is that it trivially reduces to status quo bias.
by tshaddox - Context is that which is scarce.
It's hard to predict what parts of shared understanding we have today is going to be scarce tomorrow. And one can't serialize _all_ of that current shared understanding in documents and integration tests.
https://marginalrevolution.com/marginalrevolution/2021/12/co...
by ndr - Related to this, the concept of "free as in puppies" from D. Richard Hipp, creator of SQLite:
> Suppose you had a pull request for SQLite. "Hey, I've got this new feature for SQLite. Here's the pull request." When you want me to pull that into the tree, you say, "Oh, it's free."
> No, it's not free. What you're doing is asking me - you've got this cool feature, and you want me to maintain it for you, to document it for you, to test it for you, to maintain it for you for the next twenty-five years. That's not free.
> Linus Torvalds is famous for saying there's free as in beer and free as in speech. But there's another kind of freedom: free as in puppies. "Oh look, I've got a free puppy for you." You see where this is going?
> A pull request is a free puppy. And then you've just got a kennel full of puppies at the end of the day. And you can't just throw them out - you're morally obligated to take care of them for their natural life.
> I don't want any free puppies.
by ndr - FYI there are quite a few glitches in there:
> and want you want me to maintain it for you
> to to document it for you
> Linus Torvalds is famous famous
> A pool request
> They're you you're you're morally obligated
- It's normally been called a "white elephant" but this framing is a perfect completion to Torvalds' previously-two-part troika.
Thank you for sharing it!
by billbrown - Thanks! This is very similar indeed. Related: I see a lot of “drive-by” PRs by agents, who obviously have no intent of ever maintaining the code they wrote.by stephantul
- Some open source projects use PRs as an inspiration machine and just reimplement the feature themselves if they like it. I think that’s entirely sound and as a user I prefer that.
But also as a user I fork them for personally desired changes. Even keeping everything working with upstream is low cost these days.
by arjie - Something I'll call Milito's Meadow [1]. Start with a clean slate. Everything goes: fences, farmhouses, roads… Down to the bare earth.
Then build up again from scratch. Likely you will in fact put a fence here or there—but of course you'll know with certainty why it is there. (And more times than not, there will be fewer fences when you are done.)
[1] Naming this for a friend who taught me about fence razing.
by JKCalhoun - Sounds like a very expensive and time-consuming way to build something that won't work very well for a while. Is that the point?by simondw
- Unfortunately, before the fences are down you are in jail, and with you, it stays where it was.by cwmoore
- Reminds me of Ackoff’s Idealised Design [1]
[1] https://en.wikipedia.org/wiki/Interactive_planning#Idealized...
by asplake - Extreme programming in a nutshell. I like doing this to features: build it, then take it down and rebuild but better.by stephantul
- A ground-up rebuild can be wonderful, but something is lost in those US plaster-planned cities that attempt to imitate Florence or other EU cities; something about organic growth that is very hard to replicate ex-nihilo.
This likely doesn’t correlate to code as much.
by bombcar - This is addressed by the classic article by Joel on Software (which is apt, as it's a classic mistake):
https://www.joelonsoftware.com/2000/04/06/things-you-should-...
To rephrase in the language of this conversation, he answers: why are there all those fences there?
> I’ll tell you why: those are bug fixes. One of them fixes that bug that Nancy had when she tried to install the thing on a computer that didn’t have Internet Explorer. Another one fixes that bug that occurs in low memory conditions. Another one fixes that bug that occurred when the file is on a floppy disk and the user yanks out the disk in the middle. That LoadLibrary call is ugly but it makes the code work on old versions of Windows 95.
(Yes the references are a bit out of date. The article is from over 25 years ago!)
- I’ve found utility in removing code.
I feel that doing the job with the fewest lines of code, is best.
I also believe in focused/pure scope. If I write a type or API to do a job, then it should do that job, and only that job. If I want to add functionality that is out-of-scope, then I’ll often write another type, instead of adding it to the existing one. Making this type of decision is always fraught.
But, like in all things, it depends. Sometimes, reducing the overhead of things like setup and testing is a good reason to not introduce a whole new resource, but I should make it a point to document the reason for the incongruity.
This is especially true, when designing user interface. I’ve found that, usually (not all the time, though), less is more.
Josef Albers is known (amongst other things), for the quote “Sometimes, in design, one plus one is three or more.”.
- I think when somebody trains code golfing LLMs with reinforcement learning they will inadvertently be smarterby noopprod
- > removing code
Cue link to Negative 2,000 LoC [0]:
0. https://www.folklore.org/Negative_2000_Lines_Of_Code.htmlHe recently was working on optimizing Quickdraw's region calculation machinery, and had completely rewritten the region engine using a simpler, more general algorithm which, after some tweaking, made region operations almost six times faster. As a by-product, the rewrite also saved around 2,000 lines of code. He was just putting the finishing touches on the optimization when it was time to fill out the management form for the first time. When he got to the lines of code part, he thought about it for a second, and then wrote in the number: -2000.by adolph - > I’ve found utility in removing code.
> I feel that doing the job with the fewest lines of code, is best.
And that is one of my gripes with AI models and code. They are so, so verbose. It's a nightmare.
"Why don't you let AI implement that small feature, it will be faster.", they would ask.
Well, because if do, it will completely pollute my carefully crafted interface that I kept small, simple and understandable for easier maintenance and extension.
And yes, I might spare a few hours by having _it_ work for me. But then I need to spend a more hours to clean-up the code noise and complexification.
Sorry for having polluted the conversation by bringing AI in, when for once, ironically, it was not about AI.. I needed to vent, while fully approving of your take.
by fransje26 - "I can also write lines of code for free. I have the same superpowers you do..."
Boy oh boy can I tell that people have still not internalized this. Yes, your HTTP proxy with a list of features as long as my arm would have been impressive 5 years ago, at least on some level. Today, I can prompt it into existence as easily as you did, and if I am prompting it into existence I can build a custom one with just the features I need, that integrates into my logging & metrics, etc., and perhaps most importantly, I can literally do that more quickly than I can evaluate your project. AI has eliminated the space of open source projects where evaluation of your project takes longer than prompting it into existence does for me.
by jerf - So why submit a PR at all if you're not even going to try to understand the aims of the project?by notarobot123
- What about the price to verify your newly borne vibe coded project. At least the person who published it has a chance to have used their project to valid/solve their own problem and then was nice enough to publish it back to be freely used vs costing $10 to prompt it into existence
- The premise of this argument is that using AI takes no skill, and experience using AI doesn't matter, and that domain expertise in software development won't help you build better software with AI.
I don't think any of those things are true.
by rpdillon