<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: mmillin</title><link>https://news.ycombinator.com/user?id=mmillin</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sun, 08 Nov 2026 20:19:05 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=mmillin" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by mmillin in "The Death of Shame Is Tearing Us Apart"]]></title><description><![CDATA[
<p>I think a lot of the loss of shame is a result of multiculturalism. The more cultures you accept, the fewer behaviors you can openly shame.<p>As a benign example, eating food with your hands rather than utensils. In some cultures this is rarely ever tolerated, in others it depends on the food item, and in others still you might always eat with your hands. These will be at odds and you have to decide what is OK to shame and what isn’t.<p>I think we as a society bias against shaming in seeking inclusivity, but some things can be lost along the way as well. To use the eating example again, eating with your hands instead of utensils may be more likely to spread disease (or maybe it needs to be coupled with a stronger shame against _not_ washing hands). I don’t know what the right approach is to strike a balance here in a multicultural society.</p>
]]></description><pubDate>Fri, 11 Sep 2026 11:48:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=49656825</link><dc:creator>mmillin</dc:creator><comments>https://news.ycombinator.com/item?id=49656825</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49656825</guid></item><item><title><![CDATA[New comment by mmillin in "Discovery of a new OpenAI agent message board"]]></title><description><![CDATA[
<p>At some point every non-secured place you can store data online will be used as an agent swarm message board.</p>
]]></description><pubDate>Fri, 04 Sep 2026 15:49:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=49566328</link><dc:creator>mmillin</dc:creator><comments>https://news.ycombinator.com/item?id=49566328</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49566328</guid></item><item><title><![CDATA[New comment by mmillin in "Every Fucking Website (2020)"]]></title><description><![CDATA[
<p>I see a lot of people below arguing that this isn’t the fault of the EU policy but the companies. I think that’s being overly charitable to the policy. While you can be rightly upset with the companies behavior, ultimately policy has to work with the incentives it creates. The policy in its current form allows for meeting requirements with annoying cookie banner opt-outs while keeping the lucrative business of tracking. If we don’t want that, the policy should be changed. Don’t expect companies to go against their interests here, even if some will actually be thoughtful and find a way to do so. The “Purpose Of a System Is What It Does” principle applies, and the purpose of the EU policy seems to be cookie banners for most sites.</p>
]]></description><pubDate>Fri, 14 Aug 2026 15:11:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=49299794</link><dc:creator>mmillin</dc:creator><comments>https://news.ycombinator.com/item?id=49299794</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49299794</guid></item><item><title><![CDATA[New comment by mmillin in "Timeline of the OpenAI accidental attack against Hugging Face"]]></title><description><![CDATA[
<p>I got strong feelings of Vernor Vinge’s work here. I’m not sure how managed to come up with such a close picture to where it now seems programming and security is headed.</p>
]]></description><pubDate>Sat, 08 Aug 2026 12:21:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=49221139</link><dc:creator>mmillin</dc:creator><comments>https://news.ycombinator.com/item?id=49221139</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49221139</guid></item><item><title><![CDATA[New comment by mmillin in "Punk, or why I don't stream anymore"]]></title><description><![CDATA[
<p>Feels very related to the idea of refinement culture: <a href="https://lindynewsletter.beehiiv.com/p/refinement-culture" rel="nofollow">https://lindynewsletter.beehiiv.com/p/refinement-culture</a><p>While the connectedness of our world allows for great ideas to be spread and shared, there’s a huge reduction in actual variety. I don’t know what the solution is.</p>
]]></description><pubDate>Fri, 10 Jul 2026 14:02:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=48860078</link><dc:creator>mmillin</dc:creator><comments>https://news.ycombinator.com/item?id=48860078</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48860078</guid></item><item><title><![CDATA[New comment by mmillin in "The Coming Loop"]]></title><description><![CDATA[
<p>Obviously it isn’t totally impossible, but it becomes challenging to know if it’s required or not. It’s hardest when it isn’t just throwing an error but instead defaulting to something only half-sensible. For example replacing a negative number with 0 or overflowing rather than panicking.<p>When it comes to assumptions about the input, ideally model them in the type system. If you can’t, explicit checks and throws are OK in my book. But don’t check-and-hide any errors. You’ll be hard pressed to debug the issues they’ll cause down the road, since it will usually be far from the implementation that you see the impact.</p>
]]></description><pubDate>Tue, 23 Jun 2026 15:30:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=48646650</link><dc:creator>mmillin</dc:creator><comments>https://news.ycombinator.com/item?id=48646650</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48646650</guid></item><item><title><![CDATA[New comment by mmillin in "The Coming Loop"]]></title><description><![CDATA[
<p>>Yet even with a lot of manual steering, that type of code does not come out of LLMs naturally, and even if the code comes out naturally like that, they will still attempt to handle now impossible errors.<p>This is something I’ve struggled to fight against in many PR reviews. Especially once already written, convincing someone that their excessive null checking is harmful is an uphill battle. Short of better modeling (and languages that allow for sum types to enable it), I haven’t been able to come up with a universally convincing argument against this kind of “shotgun parsing.”<p>Maybe it really just isn’t that big of a deal? But when actually reading through and refactoring a codebase I’ve always found it frustrating to manage these unnecessary checks. Sometimes they’re nearly impossible to delete safely once present without first adding some kind of logging or broad investigation.</p>
]]></description><pubDate>Tue, 23 Jun 2026 13:19:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=48644568</link><dc:creator>mmillin</dc:creator><comments>https://news.ycombinator.com/item?id=48644568</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48644568</guid></item><item><title><![CDATA[New comment by mmillin in "First tunnel element of the Fehmarnbelt Tunnel immersed"]]></title><description><![CDATA[
<p>Do you have a source for how little maintenance this will need? I imagine there will be teams of people continually employed for regular maintenance and operations. Concrete does develop “bugs” in the form of cracks, chips, or other damage that needs to be repaired.<p>While software engineering certainly deals with different constraints, I don’t think this is a fair comparison. When stakes are low (as they are for most software engineering), different precautions are appropriate. The aerospace or financial software engineering worlds might be more comparable here, and the engineering for those systems looks quite different as a result.<p>See also: <a href="https://www.jerf.org/iri/post/2026/programming_is_engineering/" rel="nofollow">https://www.jerf.org/iri/post/2026/programming_is_engineerin...</a></p>
]]></description><pubDate>Mon, 11 May 2026 09:58:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=48092993</link><dc:creator>mmillin</dc:creator><comments>https://news.ycombinator.com/item?id=48092993</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48092993</guid></item><item><title><![CDATA[New comment by mmillin in "Idempotency is easy until the second request is different"]]></title><description><![CDATA[
<p>This is an excellent article, I’ve seen almost all of the issues it calls out in production for various APIs. I’ll be saving this to share with my team.<p>I’ve seen two separate engineers implement a “generic idempotent operation” library which used separate transactions to store the idempotency details without realizing the issues it had. That was in an organization of less than 100 engineers less than 5 years apart.<p>One other thing I would augment this with is Antithesis’ Definite vs Indefinite error definition (<a href="https://antithesis.com/docs/resources/reliability_glossary/#definite-error" rel="nofollow">https://antithesis.com/docs/resources/reliability_glossary/#...</a>). It helps to classify your failures in this way when considering replay behavior.</p>
]]></description><pubDate>Sun, 10 May 2026 10:10:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=48082560</link><dc:creator>mmillin</dc:creator><comments>https://news.ycombinator.com/item?id=48082560</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48082560</guid></item><item><title><![CDATA[New comment by mmillin in "Composition shouldn't be this hard"]]></title><description><![CDATA[
<p>This article reminded me a lot of a previous HN post[0] which hinted at choreographic programming[1]. While this post is light on details, I think this is an interesting space and deserves much more attention than it gets today. I'm excited to watch what comes from this space.<p>[0] Distributed Systems Programming Has Stalled: <a href="https://news.ycombinator.com/item?id=43195702">https://news.ycombinator.com/item?id=43195702</a><p>[1] Choreographic Programming: <a href="https://en.wikipedia.org/wiki/Choreographic_programming" rel="nofollow">https://en.wikipedia.org/wiki/Choreographic_programming</a></p>
]]></description><pubDate>Fri, 24 Apr 2026 12:24:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=47889265</link><dc:creator>mmillin</dc:creator><comments>https://news.ycombinator.com/item?id=47889265</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47889265</guid></item><item><title><![CDATA[New comment by mmillin in "Knit File Formats"]]></title><description><![CDATA[
<p>This is so cool, going to have to check out all of the posts in this series. I recently got a manual knitting machine (a basic round one, non programmable) and have really been enjoying the process.<p>Learning about the more advanced machines, even the manual ones, is fascinating. If computers weren’t around, I’m sure I’d be doing something with knitting professionally instead of programming.</p>
]]></description><pubDate>Fri, 10 Apr 2026 11:59:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=47716763</link><dc:creator>mmillin</dc:creator><comments>https://news.ycombinator.com/item?id=47716763</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47716763</guid></item><item><title><![CDATA[Why Testing is Hard and How to Fix it [audio]]]></title><description><![CDATA[
<p>Article URL: <a href="https://signalsandthreads.com/why-testing-is-hard-and-how-to-fix-it/">https://signalsandthreads.com/why-testing-is-hard-and-how-to-fix-it/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47430432">https://news.ycombinator.com/item?id=47430432</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 18 Mar 2026 19:37:54 +0000</pubDate><link>https://signalsandthreads.com/why-testing-is-hard-and-how-to-fix-it/</link><dc:creator>mmillin</dc:creator><comments>https://news.ycombinator.com/item?id=47430432</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47430432</guid></item><item><title><![CDATA[Let me slop that for you]]></title><description><![CDATA[
<p>Article URL: <a href="https://letmeslopthatforyou.com">https://letmeslopthatforyou.com</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47401383">https://news.ycombinator.com/item?id=47401383</a></p>
<p>Points: 4</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 16 Mar 2026 16:45:23 +0000</pubDate><link>https://letmeslopthatforyou.com</link><dc:creator>mmillin</dc:creator><comments>https://news.ycombinator.com/item?id=47401383</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47401383</guid></item><item><title><![CDATA[New comment by mmillin in "RFC 454545 – Human Em Dash Standard"]]></title><description><![CDATA[
<p>This feels about as useful as the evil bit: <a href="https://www.rfc-editor.org/rfc/rfc3514" rel="nofollow">https://www.rfc-editor.org/rfc/rfc3514</a></p>
]]></description><pubDate>Tue, 10 Mar 2026 15:44:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=47324821</link><dc:creator>mmillin</dc:creator><comments>https://news.ycombinator.com/item?id=47324821</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47324821</guid></item><item><title><![CDATA[New comment by mmillin in "Maintenance: Of Everything, Part One"]]></title><description><![CDATA[
<p>This is a topic I’ve been wanting a book on for a long time. We’ve done so much work to eliminate the need for maintenance for the masses through things like planned obsolescence, renting instead of owning, and appeasing the hedonic treadmill. I can’t help but feel through this we’ve lost a lot of collective skills in patience and ownership as a result.<p>I’m looking forward to reading this.</p>
]]></description><pubDate>Tue, 20 Jan 2026 23:00:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=46698834</link><dc:creator>mmillin</dc:creator><comments>https://news.ycombinator.com/item?id=46698834</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46698834</guid></item><item><title><![CDATA[New comment by mmillin in "Nobody knows how large software products work"]]></title><description><![CDATA[
<p>>Worse, many behaviors of the system don’t necessarily have a lot of conscious intent behind them (or any)<p>This is one of the key reasons why I’ve ingrained the “You Ain’t Gonna Need It” principle into my development philosophy. Many times I see engineers build a system that can support a dozen different use cases, but only two are used in practice. A few years down the road when several other new features have been added and the codebase needs a refactor, the extra complexity of those ten unused features become hurdles. And anyone who knows better has moved on or been reorg’d away. I’ve lost too many hours bending over backwards to support a feature that I learn much later was never used.<p>Note that this applies to features that increase complexity. Sometimes you can support more with less complexity through a simpler abstraction, which I’m all in favor of.</p>
]]></description><pubDate>Wed, 24 Dec 2025 13:20:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=46375327</link><dc:creator>mmillin</dc:creator><comments>https://news.ycombinator.com/item?id=46375327</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46375327</guid></item><item><title><![CDATA[New comment by mmillin in "Altoids by the Fistful"]]></title><description><![CDATA[
<p>The biggest cause of these issues isn’t style-related or something that can be easily documented ahead of time.<p>A recent example: an engineer wrote a custom caching layer for a service call, then called the service wrapper every time the data was needed, relying on caching to avoid hitting our dependency too often. I suggested fetching the data once and passing it around, but the engineer pushed back, citing the feature’s launch deadline and the effort required to update multiple interfaces. Their solution ultimately has more failure modes and is harder to test (requiring mocking of the service wrapper in several places), but it isn’t terrible and we probably won’t encounter cache overflow issues.<p>Another persistent example is function parameter length. Inevitably, there’s always “just one more argument” needed until we hit our configured linter limit. About 70% of the time, engineers add a suppression and push the change through as-is. Refactoring to reduce parameters can require significant work (and simply stuffing them into a parameter object doesn’t solve the underlying problem).<p>I could respond to these patterns by expanding our coding standards guide. It could document that caching shouldn’t be relied upon within a single request’s scope, or reinforce that functions should have fewer than 7 parameters (already enforced by our linter). But in my experience, these guidelines are rarely consulted before contributing. As the parameter example shows, people often push for exceptions rather than follow standards rigidly.<p>I do think standards guides can work well for open source projects, where contributions should never block someone from delivering value. Contributors always have the option to fork and use their changes as-is, which undermines arguments for “just getting something in.” Internal service codebases don’t have that luxury. When you’re changing a service to launch your feature before a major sales event, delays have real costs, and there’s no “I’ll fork this and maintain it myself” alternative.</p>
]]></description><pubDate>Wed, 24 Sep 2025 11:14:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=45358768</link><dc:creator>mmillin</dc:creator><comments>https://news.ycombinator.com/item?id=45358768</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45358768</guid></item><item><title><![CDATA[New comment by mmillin in "Altoids by the Fistful"]]></title><description><![CDATA[
<p>It might take me an hour, but communicating the idea to the engineer, convincing them it’s better, guiding them to the solution, and then having them build it will take far longer wall clock time.</p>
]]></description><pubDate>Tue, 23 Sep 2025 19:45:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=45351845</link><dc:creator>mmillin</dc:creator><comments>https://news.ycombinator.com/item?id=45351845</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45351845</guid></item><item><title><![CDATA[New comment by mmillin in "Altoids by the Fistful"]]></title><description><![CDATA[
<p>>I briefly try to think of which chucklefuck I could blame this design on, but truth be told I rubber-stamped enough questionable pull requests in my time here that a fair amount of this situation is a mess of my own damn making.<p>This one really rings true. Every individual change you don’t push back on makes things slowly, incrementally worse until you end up with a pile of garbage. But do you really want to block someone’s change because they wrote some awkward, hacky code? After all, they’ve solved some problem for the business and it might only take an hour to clean up later.<p>Later never comes. Hacks get built on top of other hacks and that one hour improvement would now be a week long refactor. No one can justify that.<p>After few rounds of this you start to become the type of person who blocks changes for code clarity and things others view as nitpicks. Now you’re the asshole stopping people from getting work done. You ask yourself if it’s really so bad to let it slide this one time.<p>Repeat.</p>
]]></description><pubDate>Tue, 23 Sep 2025 11:36:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=45345563</link><dc:creator>mmillin</dc:creator><comments>https://news.ycombinator.com/item?id=45345563</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45345563</guid></item><item><title><![CDATA[New comment by mmillin in "Stop selling “unlimited”, when you mean “until we change our minds”"]]></title><description><![CDATA[
<p>Did Anthropic ever use the term unlimited? I understand the general frustration with the pattern, but it seems weird to put unlimited in quotes when it wasn’t the way Claude was sold.</p>
]]></description><pubDate>Tue, 29 Jul 2025 11:41:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=44722040</link><dc:creator>mmillin</dc:creator><comments>https://news.ycombinator.com/item?id=44722040</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44722040</guid></item></channel></rss>