Hands-on product leader. Creator of Shape Up. Prev: Basecamp/37signals. rjs@ryansinger.co

Joined November 2007
184 Photos and videos
Enjoying this beautiful phrase from James Clerk Maxwell: "to reduce to order." Eg: "I am working away at electricity again, and have been working my way into the views of heavy German writers. It takes a long time to reduce to order all the notions one gets from these men, but I hope to see my way through the subject, and arrive at something intelligible in the way of a theory."
1
10
1,335
Jun 10
Looks like the AppEntities, AppSchemas etc behind the new Siri AI behaviors are akin to an Ontology in Palantir. They're simpler, but similar. There's a single way of describing all the data and behaviors available within the system that the AI at the operating level draws upon.
16
2,791
Lots of things to like in the Basecamp 5 improvements. But my favorite is the return to the shaded logo.
3
92
7,073
Awesome to see Apple being Apple. Creating seamless UI experiences that are totally obvious only after you see them.
40
9,988
When it comes to DDD, just do Ubiquitous Language. 90% of it is that. Don’t get distracted by aggregate blah blah and miss the point. Common language is everything.
7
4
93
9,173
Inverse GIGO.
2
1
12
9,890
May 31
Interesting take here from @thdxr on the inversion of boilerplate code. We used to want terseness because we had to type the code, so boilerplate was bad. Now if the AI types all the boilerplate, and we get extra things (eg more correctness), the tradeoff is different. youtu.be/hY279-A2fC4?is=vGzA…
1
18
4,602
May 29
System design vs parameter design. The optimizations you can reach by changing parameters are bounded by the system design. Parameters are always “of” some system. (Parameter = implementation choice within a given architecture)
I've got an agent in a loop optimizing a renderer with the goal to minimize frame times (and tests to measure). It got times down from 88ms to 2ms and allocations down from ~150K to 500. Sounds good, right? Wrong. This is exactly why agent psychosis is a big fucking problem. As an experiment, I rewrote the Ghostty core render state in Go, with access to identically laid out data structures as Ghostty and the exact same validation tests. I made a purposely naive renderer (simple, correct, but slow). 88ms per frame with 150,000 allocations (horrendous, lol)! I then kickstarted a Ralph loop to bring the frame times down. I told it it can't modify input data structures or the public API or tests (they're correct), but it can do anything else it wants. It got to work. It has worked for about 4 hours. I've spent around $350 on this experiment so far. The results? 88ms => 1.5ms 150K allocs => ~500 allocs Incredible right? Nope. My hand-written renderer I ported has frame times (same benchmark) of ~20us (0.020ms) and 0 allocations in the update path. This is the problem with psychosis and lacking systems understanding. If you don't understand the system, you're going to accept that this is an incredible result. If you understand the system, you'll see better solutions immediately and can do roughly 75x better on throughput. The people who blindly trust agent output are in the former camp. They're sheeple, overdrinking from a fountain of mediocrity. Standard disclaimer: I use AI all the time. I like AI. The point I'm making is to not blindly accept results. Think. Analyze. Learn.
1
1
18
4,264
May 24
You can split any design into two levels. There's a macro level, which is how it works as a system. And there's a detail level of how those things are actually implemented. In hardware, there's system design vs. parameter design. In non-fiction, there's outline vs. prose. In UX, there's breadboard vs. high-fidelity.
1
7
38
4,386
May 24
The danger with these two levels is going to extremes. If you become too "agile iterative", you keep changing the macro plan because of local information. Meaning you go in circles. If you become too "master plan", you fix the macro plan before you have enough local information. Then you end up in the wrong place. This is why hill-climbing techniques are so important. Eg asking the right questions at the macro level, drafting a macro design, then diving down to spike at the integration boundaries to surface unknowns and detect time bombs.
1
2
15
2,800
May 24
Another key technique here is designing holes to fill. Also known as interface before implementation. The holes are the downhill parts. And the "edges" are the integration points. Eg I think I need the agent to parse the resume and display x, y, z, and I need the human to review at this step and approve actions a, b, c. What do I need to know to be sure this will actually work? And what do I NOT need to know yet to be sure this will work? There are places for "I know it when I see it." But "I know it when I see it" doesn't work if there are time commitments, obligations, or time pressures. In those situations we have to be selective and targeted about what we're trying to "see to know", when, and in what order.
2
1
5
1,057
Ryan Singer retweeted
May 24
The danger with these two levels is going to extremes. If you become too "agile iterative", you keep changing the macro plan because of local information. Meaning you go in circles. If you become too "master plan", you fix the macro plan before you have enough local information. Then you end up in the wrong place. This is why hill-climbing techniques are so important. Eg asking the right questions at the macro level, drafting a macro design, then diving down to spike at the integration boundaries to surface unknowns and detect time bombs.
1
2
15
2,800
Ryan Singer retweeted
May 24
When you look at the earth from space, you don't see a blur. You see features you can't see from close up. Therefore design at the high level should show features you can't SEE at the low level. It should show you DIFFERENT things, SHARPLY.
2
6
36
4,075