I’d argue Kudzu has visibility bias. It grows on sunny roadsides, railway corridors, and disturbed land. Basically all the places where people see it so attribute it to being more pervasive than it is.
Bad code is the inverse. It’s more pervasive than people think it is and builds up precisely in the places that are not disturbed. More like Privet than Kudzu. But that isn’t nearly as catchy.
If you want to dig into the quasi redemption story of why Kudzu isn’t this terrible evil we’ve given it to this was a decent episode of 99%PI at around the 18 minute mark[1].
Bad code as an invasive species is the freshest take I've heard. I have a hard enough time arguing with people that tech debt isn't about bad code, but shifting priorities and requirements. This is going to be a really useful analogy for me going forward, thanks!
FWIW, I've seen the flip-side as well; solid coding patterns are easy for a person (or an LLM) to copy. To abuse the analogy a bit, your gardeners are happy copying whatever happens to be there, bad code will dominate that process unless actively removed, and the exponential nature of that arrangement favours removing trash code (weeds) early, much earlier than you might otherwise think.
I thought we solved the kudzu problem by having goats graze on them and rip them out by the roots, right? So maybe we should set goats on legacy git repos as well.
The article abridged the history too much.
It was first imported as an exhibition of plants from Japan in 1876. It's usefulness as a ground cover in the US was understood later, and in the 1930s (Dust Bowl times) the USDA advocated farmers intentionally plant it as a way to hold down the soil. After that, you might say, it far exceeded its usefulness as a ground cover.
The other thing is that its coverage estimation was off by at least an order of magnitude. It is a transition zone species. So they cover trees that are at the perimeter of forests or stands along highways. Back in the 70s aerial estimations were not as good as today’s. Their visual extrapolations were thus way, way off. It’s still a pest but it’s not “swallowing the South”.
This is beautiful. It succinctly articulates a very subjective issue I’ve had with a variety of PRs that I’ve been unable to triangulate on.
Once bad code is in, it’s so easy to propagate through the rest of the codebase for a variety of well-meaning but ultimately harmful reasons. Every month I witness colleagues with their heart in the right place open PRs containing code that ultimately I feel will become a long-term burden and source of pain, even if it delivers immediate business value. I’m going to share this with them not as something to use to reject their PRs, but as a common language so that I can share with them them how I want them to approach the software I’m responsible for delivering and maintaining. I think this is a good way to address low-quality human and LLM code.
Bad code is the inverse. It’s more pervasive than people think it is and builds up precisely in the places that are not disturbed. More like Privet than Kudzu. But that isn’t nearly as catchy.
If you want to dig into the quasi redemption story of why Kudzu isn’t this terrible evil we’ve given it to this was a decent episode of 99%PI at around the 18 minute mark[1].
[1] https://99percentinvisible.org/episode/roman-mars-describes-...
I heard it differently. I heard that it was imported for aesthetic reasons (like starlings).
Nasty stuff. We're starting to see it up here, in New York. I remember it well, from Maryland.
Yay climate change!
I often "hit the reset button" on projects. It used to be waiting until the pain was great enough, but LLMs make it a lot easier.
The other thing is that its coverage estimation was off by at least an order of magnitude. It is a transition zone species. So they cover trees that are at the perimeter of forests or stands along highways. Back in the 70s aerial estimations were not as good as today’s. Their visual extrapolations were thus way, way off. It’s still a pest but it’s not “swallowing the South”.
Once bad code is in, it’s so easy to propagate through the rest of the codebase for a variety of well-meaning but ultimately harmful reasons. Every month I witness colleagues with their heart in the right place open PRs containing code that ultimately I feel will become a long-term burden and source of pain, even if it delivers immediate business value. I’m going to share this with them not as something to use to reject their PRs, but as a common language so that I can share with them them how I want them to approach the software I’m responsible for delivering and maintaining. I think this is a good way to address low-quality human and LLM code.