HN user

et1337

2,715 karma

https://etodd.io

Posts34
Comments297
View on HN
www.baen.com 17d ago

Slow Tuesday Night (1965)

et1337
5pts2
etodd.io 9mo ago

Should I Switch from Git to Jujutsu

et1337
3pts0
etodd.io 1y ago

Treat your humans better than your agents

et1337
2pts1
etodd.io 1y ago

Zero to One Hundred Thousand Tests

et1337
1pts0
etodd.io 1y ago

What Makes a Good Automated Test?

et1337
1pts0
arstechnica.com 2y ago

Spotify wins as EU orders Apple to pay $2B and change App Store rules

et1337
4pts0
arstechnica.com 2y ago

Big Tech Is Unimpressed by Apple's EU App Store Changes

et1337
16pts1
on-systems.tech 2y ago

Draining the Data Lake (part 1 of 3) – Problems

et1337
3pts0
etodd.io 2y ago

Waiting on Tests

et1337
47pts24
etodd.io 3y ago

Making Games

et1337
310pts207
etodd.io 3y ago

Making Games

et1337
2pts0
etodd.io 4y ago

GraphQL at StrongDM

et1337
2pts0
www.strongdm.com 4y ago

How we work: Back end Engineering

et1337
1pts0
etodd.io 5y ago

How to exfiltrate code from Bitbucket

et1337
133pts41
www.handmade-seattle.com 5y ago

Handmade Seattle – virtual low-level programming conference

et1337
199pts10
etodd.io 8y ago

The Poor Man's Netcode

et1337
4pts0
etodd.io 8y ago

The Poor Man's 3D Camera

et1337
358pts36
www.currentaffairs.org 8y ago

Why You Hate Contemporary Architecture

et1337
5pts1
arxiv.org 8y ago

Another Flip in the Wall of Rowhammer Defenses

et1337
76pts22
etodd.io 9y ago

Thirteen Years of Bad Game Code

et1337
399pts160
www.mcmansionhell.com 9y ago

A Pictorial History of Suburbia

et1337
1pts0
etodd.io 10y ago

Enlisting IBM Watson as a video game voice actor

et1337
1pts0
www.wired.com 10y ago

Neil DeGrasse Tyson Is a Black Hole, Sucking the Fun Out of the Universe

et1337
8pts2
etodd.io 10y ago

The Poor Man's Threading Architecture

et1337
2pts0
tilerisers.s3-website-us-east-1.amazonaws.com 10y ago

Show HN: Tile Risers – multiplayer 2048

et1337
2pts1
tilerisers.s3-website-us-east-1.amazonaws.com 10y ago

Tile Risers - multiplayer 2048

et1337
1pts1
etodd.io 10y ago

Data first, not code first

et1337
252pts89
et1337.com 11y ago

The Poor Man's Postmortem – Lemma

et1337
1pts0
et1337.com 11y ago

The Poor Man's Character Controller

et1337
1pts0
et1337.com 11y ago

The Poor Man's Voxel Engine

et1337
274pts49

Perhaps my "reject the premise" comment was a bit too provocative. I didn't intend to start an argument. I wanted to share a story of a person who was put in the position you described (working as a manager on a large project, required to have an overview of the project but not necessarily to actually write or review much code), failed miserably, changed the rules of engagement (partly by reviewing code), and subsequently succeeded. So my _personal_ answer to your question of how to build a mental model in that scenario would be to do something in the same vein as that story. Not necessarily _exactly_ what that guy did, but I think the principles still apply today. Nothing really changes.

I am not able to find it now, but there was an amazing story recently from the 60s or 70s where an engineer was in exactly this position. His team was building a new, complex, ambitious operating system, but it was late and over budget and didn’t work. It nearly wrecked the company. He talks about hitting rock bottom and asking himself what went wrong, and one of the fathers of computing (can’t remember which) shouts from the hallway in passing, “that’s easy, you didn’t understand what your people were doing.” So the guy turned it around by implementing a new rule: he had to understand every line of code his team wrote. They started over with the company’s existing OS in use by customers and implementing a few of the most requested features. Much less ambitious, but it actually shipped. Gradually they achieved all their goals by upgrading the existing system.

The “I must understand every line” constraint didn’t sound like a power trip that succeeded because the guy was such a brilliant code reviewer. I think it was a blunt instrument that enforced simplicity.

I guess what I’m saying is, I reject the premise of having technical oversight without writing or reading much code.

Folks have been saying “things are different now, the agents are now compounding success instead of error” for at least a year now, but I just don’t see it. I was lucky enough to receive a weeklong $50k per head AI training from the people saying these things, and one of their few helpful concrete recommendations was to constantly clear context all the time, to avoid things going off the rails.

However, I think finding security vulnerabilities is one use case where it doesn’t matter. Tokenmaxxing is absolutely effective for that. We as an industry are in the middle of adopting very expensive, complex continuous fuzzers.

prompting for test-driven development is not the same as enforcing code coverage thresholds in your build tool

Are they actually different? I would guess they have roughly the same efficacy. 100% code coverage means nothing, and this is especially true with LLMs.

Oh no, I’ve definitely experienced that, it’s terrible. But that situation makes me wish for more agency (for example, talking to customers directly), whereas it seems to make other engineers wish for less agency (please hand me a complete spec and I will mindlessly translate it to code). That’s what I don’t understand.

I’ve never understood engineers who complain about vague specs… if the spec was complete, it would be code and the job would be done already! Getting a 20 page spec delivered from upon high and mechanically translating it to code without any chance to send feedback up the chain sounds like… a compiler.

I think all three problems are really one problem under the hood:

Are these two things actually the same thing, or they separate?

The saddest part about Kubernetes is… after you set it all up, you still need a hacky deploy.sh to sed in the image tag to deploy! And pretty soon you’re back to “my dear friend you have built a Helm”. And so the configuration clock continues ticking…

Jujutsu has a concept of mutable vs immutable commits to solve this. Usually everything in a remote branch is immutable. To work on a branch, I track it and that makes it mutable.

Why I love NixOS 4 months ago

I’ve been driving Bluefin DX for a year or two. On the plus side, it works absolutely flawlessly. This is the longest I’ve ever run a Linux distro without a Nvidia driver update causing the whole thing to explode. It truly is the year of Linux on the desktop.

But I can’t say I recommend it for dev work. It wants you to do everything inside devcontainers, which I like in theory but in practice come with so many annoyances. It wants you to install Flatpaks but Flathub is pretty sparse. I ended up downloading raw Linux binaries into my home directory (which actually works surprisingly well. Maybe this is the future, hah)

I think next time I’ll just go with vanilla Fedora.

No encapsulation… huge functions with tons of local variables shared between closures… essentially global state in practice. I think ant the time, objects with member variables felt “heavy” and local variables felt “light”. But the fact that they were so lightweight just gave me more opportunities to squirrel away state into random places with no structure around it. It really wasn’t all that horrific, and it helped me ship something quickly, but it wasn’t maintainable. These days I think the “heavy boilerplate” of grouping stuff into structs and objects forces me to slow down and think a bit harder about whether I really want to enshrine a new piece of state into the app’s data model. Most of the time I don’t.

I also think there’s an interesting effect when cool functional language features like currying and closures are adopted by imperative languages. They make it way too easy to create state in a way that makes you FEEL like you’re writing beautiful pure functions. Of course, in a functional language everything IS pure and this is just how things work. But in an imperative language you can trick yourself into thinking you’ve gotten away with something. At one point I stored practically all state in local variables captured by closures. It was a dark time.

Right, there’s no silver bullet. I think all I can do is increase the feedback bandwidth between my brain and the real world. Regular old stuff like linters, static typing, borrow checkers, e2e tests… all the way to “talking to customers more”

I think the worst case is actually that the LLM faithfully implements your spec, but your spec was flawed. To the extent that you outsource the mechanical details to a machine trained to do exactly what you tell it, you destroy or at least hamper the feedback loop between fuzzy human thoughts and cold hard facts.

This was a fun one today:

% cat /Users/evan.todd/web/inky/context.md

Done — I wrote concise findings to:

`/Users/evan.todd/web/inky/context.md`%

Based on my experience writing many games that work great barring the occasional random physics engine explosion, I suspect that trigonometry is responsible for a significant proportion of glitches.

I think over the years I subconsciously learned to avoid trig because of the issues mentioned, but I do still fall back to angles, especially for things like camera rotation. I am curious how far the OP goes with this crusade in their production code.

A personal finance app called “Predictable” that takes chaotic sloshes of money and turns them into steady streams of cash. You tell it “I receive this much money weekly/monthly/on the first and fifteenth/when Mercury is in retrograde, and I have these expenses at other various intervals” and it evens everything out into a constant weekly flow of cash by, essentially, buffering. Any overflow or underflow goes to a “margin” bucket which basically tells you how much you could spend right now and still have enough for all your recurring expenses.

Currently making it just for myself but curious if anyone else would find it useful.

2025 Letter 7 months ago

Didn’t we just have a front page article about the average founder age increasing well beyond 30 this year? Is it a non-normal distribution or what?

Makes sense! I think dustbunny said it best: C# is “not worth the squeeze” specifically in Godot, and specifically if you’re going for performance. But maybe that’ll change soon, who knows. The engine is still improving at a good clip.

My post could have been a bit longer. It seems to have been misunderstood.

I use GDScript because it’s currently the best supported language in Godot. Most of the ecosystem is GDScript. C# feels a bit bolted-on. (See: binding overhead) If the situation were reversed, I’d be using C#. That’s one technical reason to prefer GDScript. But you’re free to choose C# for any number of reasons, I’m just trying to answer the question.