TE
TechEcho
Home24h TopNewestBestAskShowJobs
GitHubTwitter
Home

TechEcho

A tech news platform built with Next.js, providing global tech news and discussions.

GitHubTwitter

Home

HomeNewestBestAskShowJobs

Resources

HackerNews APIOriginal HackerNewsNext.js

© 2025 TechEcho. All rights reserved.

Accidentally Load Bearing

441 pointsby jamessunalmost 2 years ago

39 comments

TheCapnalmost 2 years ago
Huh. Finally a name for it.<p>I do a lot of support work for Control Systems. It isn&#x27;t unheard to find a chunk of PLC code that treats some sort of physical equipment in a unique way that unintentionally creates problems. I like to parrot a line I heard elsewhere: &quot;Every time Software is used to fix a [Electrical&#x2F;Mechanical] problem, a Gremlin is born&quot;.<p>But often enough when I find a root cause of a bug, or some sort of programmed limitation, the client wants removed. I always refuse until I can find out <i>why</i> that code exists. Nobody puts code in there for no reason, so I need to know why we have a timer, or an override in the first place. Often the answer is the problem it was solving no longer exists, and that&#x27;s excellent, but for all the times where that code was put there to prevent something from happening and the client had a bunch of staff turnover, the original purpose is lost. Without documentation telling me why it was done that way I&#x27;m very cautious to immediately undo someone else&#x27;s work.<p>I suppose the other aspect is knowing that I trust my coworkers. They don&#x27;t (typically) do something for no good reason. If it is in there, it is there for a purpose and I must trust my coworkers to have done their due diligence in the first place. If that trust breaks down then everything becomes more difficult to make decisions on.
评论 #36802069 未加载
评论 #36801896 未加载
评论 #36801843 未加载
评论 #36802193 未加载
评论 #36802060 未加载
评论 #36801624 未加载
评论 #36805883 未加载
评论 #36802993 未加载
评论 #36801925 未加载
评论 #36811808 未加载
评论 #36847965 未加载
评论 #36803068 未加载
评论 #36801936 未加载
评论 #36808575 未加载
评论 #36805366 未加载
评论 #36803514 未加载
评论 #36802309 未加载
评论 #36807575 未加载
评论 #36806475 未加载
评论 #36814407 未加载
irisgrunnalmost 2 years ago
I had something similar. A couple of years ago I bought on old house. The previous owners did most of the work themselves from the 1960s on.<p>The zinc gutter had leaked for probably decades and it destroyed part of the roof structure. The roof was held up by the wooden paneling the used to cover it on the inside (70s). So the wooden paneling was actually load bearing<p>Actually I&#x27;ve found way more stuff in this house. For example at the end of the roof the tiles weren&#x27;t wide enough and instead of buying extra roofing tiles, they decided to fill it with cement and pieces of ceramic flower pots.
评论 #36803136 未加载
评论 #36802860 未加载
评论 #36801763 未加载
评论 #36802299 未加载
w10-1almost 2 years ago
This article and every other comment seems to miss the real issue: the lack of testing.<p>Software differs from all other means of production in that we can in fact test any change we make before realizing it in the world.<p>With good tests, I don&#x27;t care what the intent was, or whether this feature has grown new uses or or new users. I &quot;fix&quot; it and run the tests, and they indicate whether the fix is good.<p>With good tests, there&#x27;s no need for software archeology, the grizzled old veteran who knows every crack, the new wunderkind who can model complex systems in her brain, the comprehensive requirements documentation, or the tentative deploy systems that force user sub-populations to act as lab rats.<p>Indeed, with good tests, I could randomly change the system and stop when I get improvements (exactly how Google reports AI &quot;developed&quot; improvements to sorting).<p>And yet, test developers are paid half or less, test departments are relatively small, QA is put on a fixed and limited schedule, and no tech hero ever rose up through QA. Because it&#x27;s derivative and reactive?
评论 #36803961 未加载
评论 #36810080 未加载
评论 #36804222 未加载
评论 #36805008 未加载
评论 #36806662 未加载
评论 #36805416 未加载
评论 #36803754 未加载
pickledishalmost 2 years ago
This (the unimportant stud becoming load bearing later on) makes sense, but in my experience it’s kind of a sign of lazy design. When making software at least, you know when you’re trying to use a decorative stud to hold up part of your house, and choosing to do it anyway instead of building some new better structure does make for a pretty sad dev team later on<p>This is to say —- I agree with the article, but much nicer is to work at a place where you don’t expect to make this particular discovery very often, hah
评论 #36800501 未加载
评论 #36801861 未加载
评论 #36806935 未加载
评论 #36800972 未加载
评论 #36800468 未加载
评论 #36800999 未加载
评论 #36800774 未加载
评论 #36801660 未加载
评论 #36800467 未加载
lambdaalmost 2 years ago
My favorite &quot;accidentally load bearing&quot; artifact that I&#x27;ve found was a misconfigured sudo that would easily allow arbitrary code execution as root (it allowed passwordless sudo for a find command, which could be used with -exec), which a number of important support scripts for the product had been written to use. Load bearing privilege escalation!
duckalmost 2 years ago
We remodeled our kitchen several years ago. In the old kitchen there was a large beam running across one end, added during some other remodel before we owned the house to add a second floor, but since we wanted to expand on the kitchen this really needed to go. Upon tearing into the ceiling, it was found this beam was ~2 feet to the right of where it should of been to support the wall above. They fixed it and moved the beam into the wall upstairs and it all worked out, but when I asked about the original location the builder basically said: &quot;you had one person that wanted to do the right thing, and one person that didn&#x27;t care, and quality always ends up with the lowest setting&quot;.
ochoseisalmost 2 years ago
One benefit software has over physical systems is that you can easily document it right inside the code with comments and types to make the intention clearer. This isn’t foolproof, especially in dynamic languages like Python, but helps a lot.<p>The analogy for the load bearing stud might be a hackathon project that never expected to see production. In reality, a lot of what we do is hack on something until it barely works, and move on to the next thing.
评论 #36802080 未加载
评论 #36801635 未加载
geocrasheralmost 2 years ago
This reminds me of end users who unknowingly exploit a bug in a piece of software and integrate it into their normal workflow. The result is that when the bug is fixed, their workflow is interrupted, causing complaints.
评论 #36800976 未加载
评论 #36800977 未加载
dventimihasuraalmost 2 years ago
&gt; I could easily tell why it was there: it was part of a partition for a closet.<p>&gt; Except that over time it had become accidentally load bearing<p>&gt; through other (ill conceived) changes to the structure this stud was now helping hold up the second floor of the house<p>Evidently, you couldn&#x27;t easily tell why it was there. Moreover, I&#x27;m not persuaded that it accidentally became load bearing. It seems quite plausible that it deliberately became load bearing, for reasons which are ill conceived to you but not to the people who had them.
评论 #36807574 未加载
7402almost 2 years ago
I used to work with a physics postdoc who would sometime leave a sign on an equipment setup that read, &quot;Do not touch. There are hidden dangers.&quot;<p>The lab was full of smart people who were used to looking at things and making their own well-reasoned conclusions about whether it was OK to change something. This was a warning not to be too hasty about doing that!
JohnMakinalmost 2 years ago
I have seen too often overly complicated systems where one small change creates these situations that go unnoticed for far too long and then something breaks in a mystifying and spectacular way. The reaction, generally, is then a fear to make any change to the system at all, regardless of how benign, even if it can&#x27;t possibly mess something up - because of fear of the &quot;unknown.&quot;<p>IME, having robust alerting and monitoring tools, good rollback plans and procedures&#x2F;automation should eliminate this fear entirely. If I was afraid to touch anything for fear of breaking it, I&#x27;d likely never get anything done.
评论 #36807123 未加载
cratermoonalmost 2 years ago
This could be considered a variant of Hyrum&#x27;s Law: &quot;With a sufficient number of users of an API, it does not matter what you promise in the contract: all observable behaviors of your system will be depended on by somebody&quot;. At some point the stud was became a structural member, because other changes made it so. Now the second floor depends on it, and removing it would compromise the structural integrity of the second floor.
rkagereralmost 2 years ago
Part of writing and maintaining good code is maintaining useful documentation (such as comments) expressing clear rationale and intent. Simple stuff can be elegantly implicit, and modern languages are getting better at capturing more of this in syntax and eliminating common footguns. But more complex systems tend to benefit from explicit explanation or even external design documents (like diagrams). A fix that doesn&#x27;t keep those current isn&#x27;t a completed fix.<p>When I come in on a consulting basis I often have to help developers unwind the unintended effects of years of patches before we can safely make seemingly-simple changes. It&#x27;s analysis-intensive, and like an archaeologist any artifacts I can dig up that you&#x27;ve left behind providing clues to what was in your head at the time can be helpful. In some cases where a set of functions is super critical we&#x27;ve made it part of the culture every time altered code is checked in to perform a walkthrough analysis to uncover any fresh unintended side-effects, ensure adherence to design requirements and discover and spotlight non-obvious relationships. The key is to turn the unintended or non-obvious into explicit. Sounds painful but in practice due to the high risk attached to getting that portion of code wrong the developers actually love that time for this is worked into the project schedules - it helps them build confidence the alteration is correct and safe.<p>I wish it were easier to impress the importance of this on inexperienced developers without them having to go through the hell of maintaining code in an environment where it was lacking.<p>It&#x27;s a skill and art to keep the appropriate level of conciseness to avoid the documentation (no matter which form it takes) becoming too verbose or unwieldy to be helpful.
评论 #36802632 未加载
评论 #36807708 未加载
joshkaalmost 2 years ago
&gt; This is a concept I&#x27;ve run into a lot when making changes to complex computer systems. It&#x27;s useful to look back through the change history, read original design documents, and understand why a component was built the way it was. But you also need to look closely at how the component integrates into the system today, where it can easily have taken on additional roles.<p>We&#x27;re probably at a stage where doing this in an automated fashion might be reasonable. The context for why something works a particular way (say in some github repo) is the commit message and change detail, the PR, related issues, related chats in &lt;chat tool of choice&gt;, and then things temporally related to those. Feeding an LLM with the context and generating ADRs for an entire project automatically could be a feasible approach.
themillerdavealmost 2 years ago
I always refer to this as &quot;Load-bearing wallpaper&quot; - in so much that folks who see it, wouldn&#x27;t think twice about tearing it down - it&#x27;s wallpaper, right? Well, turns out it was load-bearing wallpaper and the house came down as a result.
binarymaxalmost 2 years ago
I feel like part of the story is missing. Did he remove the stud and learn the hard way?
评论 #36801162 未加载
评论 #36801161 未加载
wellpastalmost 2 years ago
What I&#x27;ve learned from decades of software development: ANY and every component or capability you build into your system, incidentally or explicitly, will immediately (ie <i>tomorrow</i>) become &quot;Accidentally Load Bearing&quot;.<p>Dependencies flow in and onto new components like water. This is a fundamental law.<p>Even secret interfaces, etc that you think no one could find or touch will be found and fondled and depended upon.<p>This is why the correct view is that all software is a liability and we should write as little of it as possible, just the minimal that is needed to get the dollars and nothing more.
nighthawk454almost 2 years ago
Right, so the trick is not to fall into the false-dichotomy trap. Chesterson&#x27;s Fence tells if you if you don&#x27;t understand it&#x27;s purpose, it&#x27;s probably not safe to remove. That does not imply that if you do understand it&#x27;s purpose you can now do whatever you want. Chesterson&#x27;s Fence doesn&#x27;t tell you anything about when it&#x27;s safe to remove, only one category of situations where it probably isn&#x27;t. But that could be an easy misconception.
iancmceachernalmost 2 years ago
In mechanical engineering we call this the load path. You want to be sure 1- you know the load path 2- the load path doesn&#x27;t go where you don&#x27;t want it to and 3- everything in the load path is strong enough.<p>A good example of a famous failure if this:<p><a href="https:&#x2F;&#x2F;en.m.wikipedia.org&#x2F;wiki&#x2F;Hyatt_Regency_walkway_collapse" rel="nofollow noreferrer">https:&#x2F;&#x2F;en.m.wikipedia.org&#x2F;wiki&#x2F;Hyatt_Regency_walkway_collap...</a>
praptakalmost 2 years ago
Let the system go long enough and everything becomes accidentally load bearing. See also &quot;implementation becomes the specification&quot; - people will come to rely on every single undocumented implementation detail regardless of what the official spec says.<p>That&#x27;s why it is a good practice to have DiRT or similar exercises. Break things on purpose so that people don&#x27;t rely on them when they shouldn&#x27;t.
hinkleyalmost 2 years ago
&gt; Figuring out something&#x27;s designed purpose can be helpful in evaluating changes, but a risk is that it puts you in a frame of mind where what matters is the role the original builders intended.<p>One of the biggest challenges I find in refactoring&#x2F;rearchitecting is getting people to separate why something was done from whether it still needs to exist.<p>Too many times someone has insisted that a weird piece of code needs to exist because we never would have shipped without it. They treat every piece of the structure as intrinsic, and can&#x27;t conceive of any part of it being scaffolding, which can now be removed to replace with something more elegant and just as functional.<p>When you put a doorway through a loadbearing wall, contractors and smart people place a temporary jack to brace the wall until a lintel can be substituted for the missing vertical members. Some developers behave as if the jack is now a permanent fixture, and I have many theories why but don&#x27;t know which ones are the real reasons.
csoursalmost 2 years ago
See also &quot;Swiss Cheese Accident Model&quot; and Melted Cheese Accident Model. Also see also Stockton Rush&#x27;s statements on safety. He said that most accidents are caused by operator error, so making the sub strong enough wouldn&#x27;t affect safety.
评论 #36803339 未加载
mcvalmost 2 years ago
I&#x27;ve definitely had this happen. With my own code, even. I build something complex, it&#x27;s released to production, and a few months later I realise that something about it should be done in a different way, so I look at it, and other people have already built on top of the thing I wanted to change.<p>On the other hand, if you can&#x27;t figure out what something is for, sometimes the easiest way to find out is to remove it and see what breaks. Maybe that&#x27;s not such a great idea for that load-bearing stud, but in software it&#x27;s easy to undo.
dmbchealmost 2 years ago
The term load bearing always bring to my mind the breakdown of how the towers failed during 911 - especially how the plane cutting a lot of vertical steel beams redistributed the weight of the building onto other beams that were not rated to hold most of the buildings weight (while being heated) - they buckle and fail.<p>Guess I&#x27;m thinking of being very aware of how the structure reacts to failure, and not necessarily the strenght of all individual parts.
hprotagonistalmost 2 years ago
reminds me of Hyrum’s law a bit.
评论 #36800858 未加载
wduquettealmost 2 years ago
I think the article interprets Chesterton&#x27;s Fence too strictly. Chesterton&#x27;s point was simply that you shouldn&#x27;t destroy something before making sure that it no longer serves any purpose. The fence was simply an illustration.<p>Or, to put it another way, figure out what the consequences are before you decide whether you&#x27;re willing to intend them or not.
squokkoalmost 2 years ago
I&#x27;ve seen this SO many times. &quot;We&#x27;ll spin up this server that renders thumbnails of images for the UI.&quot;... months pass... &quot;Hey why don&#x27;t we use the thumbnail server to create low-res images for our marketing emails&quot;.... months pass... &quot;The UI doesn&#x27;t show thumbnails anymore so we can tear out the thumbnail server&quot;
dventimihasuraalmost 2 years ago
&gt; It is extremely probable that we have overlooked some whole aspect of the question<p><a href="https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;ProgrammerHumor&#x2F;comments&#x2F;q9x1d2&#x2F;asking_a_question_on_stack_overflow_and_all_the&#x2F;" rel="nofollow noreferrer">https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;ProgrammerHumor&#x2F;comments&#x2F;q9x1d2&#x2F;ask...</a>
Simon_O_Rourkealmost 2 years ago
Good Gawd! A stud holding up a second floor by itself... time to have that domicile condemned and the inhabitants moved out asap!
评论 #36805088 未加载
评论 #36803246 未加载
OldGuyInTheClubalmost 2 years ago
Also the denouement to the Fawlty Towers &quot;Builders&quot; episode.<p><a href="https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=jfBOIbjbLv0">https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=jfBOIbjbLv0</a><p>(or, jump to <a href="https:&#x2F;&#x2F;youtu.be&#x2F;jfBOIbjbLv0?t=1560" rel="nofollow noreferrer">https:&#x2F;&#x2F;youtu.be&#x2F;jfBOIbjbLv0?t=1560</a>)
dclowd9901almost 2 years ago
This is precisely the reason so many developers have come to love functional programming and side-effect-free designs. If that stud _can&#x27;t_ affect anything outside of its original intended purpose, it can more easily be understood for its purpose and maintained or removed more easily.
orbital-decayalmost 2 years ago
Related concept from software engineering is &quot;accidentally quadratic&quot;, which can manifest itself in the most unexpected places when two unrelated things collide.<p>Both generalize to various forms of causal and failure analysis in systems design.
oftenwrongalmost 2 years ago
The worst part is that it&#x27;s typically harder to repair the &quot;accidentally load bearing&quot; change than it was to create it in the first place.
Waterluvianalmost 2 years ago
On the topic of load bearing studs. Is there some way to test for that? How to tell non-destructively how much compression one is under?
avgcorrectionalmost 2 years ago
HN has such love for that early 20th century writer. So many seemed to have discovered The Fence at about the same time.
gumbyalmost 2 years ago
Evolution does this all the time, which is one of the myriad reasons biology is so hard.<p>Really good, brief post.
hinkleyalmost 2 years ago
I’ve been using, “that was a load bearing poster” for years. Usually right after a P1 and right before an RCA.
ajucalmost 2 years ago
This is why comments in the code aren&#x27;t that useful, and why commit messages are essential.
dudeinjapanalmost 2 years ago
I’m a believer in making a “Single Responsibility: ___” comment at the top of each class.
评论 #36803346 未加载