<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: aboodman</title><link>https://news.ycombinator.com/user?id=aboodman</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sat, 13 Jun 2026 12:46:53 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=aboodman" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by aboodman in "How's Linear so fast? A technical breakdown"]]></title><description><![CDATA[
<p>What you are describing is exactly what sync engines do. You can have replicas on the server or replicas on the clients. The tradeoffs are the same except the client-based replicas can be in memory, accessed synchronously directly on the ui thread. No server latency at all.</p>
]]></description><pubDate>Mon, 08 Jun 2026 20:35:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=48451566</link><dc:creator>aboodman</dc:creator><comments>https://news.ycombinator.com/item?id=48451566</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48451566</guid></item><item><title><![CDATA[New comment by aboodman in "How's Linear so fast? A technical breakdown"]]></title><description><![CDATA[
<p>I’m not. See: <a href="https://news.ycombinator.com/item?id=48440209">https://news.ycombinator.com/item?id=48440209</a><p>These systems are designed for the very common case of a global user base. If you have geographically centralized users, you can maybe do something simpler. That is rare in my experience - basically all of our customers have users worldwide. They typically don’t even know where their users are so making ux tradeoffs based on that feels really risky.<p>But maybe my experience is different than yours. One of the amazing things about the software ecosystem is how big it is. Everyone thinks their view is the common case.</p>
]]></description><pubDate>Mon, 08 Jun 2026 17:24:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=48448255</link><dc:creator>aboodman</dc:creator><comments>https://news.ycombinator.com/item?id=48448255</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48448255</guid></item><item><title><![CDATA[New comment by aboodman in "How's Linear so fast? A technical breakdown"]]></title><description><![CDATA[
<p>Yeah, it's a big part of the tradeoff for this kind of architecture. In Zero, this is a first-class concern via the ConnectionStatus API:<p><a href="https://zero.rocicorp.dev/docs/connection" rel="nofollow">https://zero.rocicorp.dev/docs/connection</a><p>Errors and connection are handled in a centralized place so that they automatically get applied to all paths.<p>Errors immediately disconnect the app and trigger UI. Writes are no longer accepted. After 1 minute of of failed connection attempts, same happens.<p>This formalizes and enforces the common pattern in popular sync-based apps of detecting disconnects fairly aggressively and warning the user.</p>
]]></description><pubDate>Mon, 08 Jun 2026 16:11:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=48447209</link><dc:creator>aboodman</dc:creator><comments>https://news.ycombinator.com/item?id=48447209</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48447209</guid></item><item><title><![CDATA[New comment by aboodman in "How's Linear so fast? A technical breakdown"]]></title><description><![CDATA[
<p>We do support Replicache: <a href="https://i.imgur.com/R1pR58i.png" rel="nofollow">https://i.imgur.com/R1pR58i.png</a>.<p>But I get it. Unfortunately something like this cannot be a sidecar, or at least I do not know how to make it one. It's central to your app in the way that React is.<p>Fortunately the category is expanding and there are several sync engines that plug in exactly how Zero does - by replicating your database. You can switch between them easily. So as long as you think you do need a sync engine you aren't <i>that</i> married to Zero specifically.<p>Here's a demo of that!<p><a href="https://youtu.be/SNAHZZo21To?si=wgDgxQpbRr-qj-A-&t=1571" rel="nofollow">https://youtu.be/SNAHZZo21To?si=wgDgxQpbRr-qj-A-&t=1571</a></p>
]]></description><pubDate>Mon, 08 Jun 2026 08:35:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=48442741</link><dc:creator>aboodman</dc:creator><comments>https://news.ycombinator.com/item?id=48442741</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48442741</guid></item><item><title><![CDATA[New comment by aboodman in "How's Linear so fast? A technical breakdown"]]></title><description><![CDATA[
<p>Only in the case where there is such a majority of the company that is tightly geolocated.<p>Again, AWS latency us-west-1 to us-east-1 is 70ms. That's absolute best case for one round-trip that does absolutely no work. And it's ignoring the case of anyone outside of continental US.<p>Add in actual server-side work, db interactions, and contention - and you're quickly looking at hundreds of ms.</p>
]]></description><pubDate>Mon, 08 Jun 2026 08:15:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=48442592</link><dc:creator>aboodman</dc:creator><comments>https://news.ycombinator.com/item?id=48442592</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48442592</guid></item><item><title><![CDATA[New comment by aboodman in "How's Linear so fast? A technical breakdown"]]></title><description><![CDATA[
<p>yeah we specifically decided not to be local/offline-first because these add huge complexity that is not needed for the type of apps we want to support. I spoke about this a bit here if you are interested: <a href="https://www.youtube.com/watch?v=86NmEerklTs&t=1764s" rel="nofollow">https://www.youtube.com/watch?v=86NmEerklTs&t=1764s</a><p>As for ZQL:<p>a) basically all of our customers already use Drizzle/Prisma. So they are very used to custom DSLs, and like them. I know, I was surprised to!<p>b) You typically use the same code client-side and server-side. There's no branching. The example you pasted is showing an escape hatch for when you <i>want</i> to use custom SQL. The option is there, but it's not the common experience.<p>This is what a typical mutator looks like:<p><pre><code>  ```ts
  // src/mutators.ts
  import {defineMutators, defineMutator} from '@rocicorp/zero'
  import {z} from 'zod'

  export const mutators = defineMutators({
    updateIssue: defineMutator(
      z.object({
        id: z.string(),
        title: z.string()
      }),
      async ({tx, args: {id, title}}) => {
        if (title.length > 100) {
          throw new Error(`Title is too long`)
        }
        await tx.mutate.issue.update({
          id,
          title
        })
      }
    )
  })</code></pre>
```<p>We are trying to make apps like Notion, Linear, Superhuman easier to create. These apps all uses custom-built sync engines that took their teams many person-years of effort to construct.<p>Whether this complexity is worth it depends on how badly you want instantaneous response. If you do, you will end up using sync one way or other, and you will end up with something roughly like Zero mutators.</p>
]]></description><pubDate>Mon, 08 Jun 2026 06:04:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=48441804</link><dc:creator>aboodman</dc:creator><comments>https://news.ycombinator.com/item?id=48441804</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48441804</guid></item><item><title><![CDATA[New comment by aboodman in "How's Linear so fast? A technical breakdown"]]></title><description><![CDATA[
<p>But this is kind of meaningless unless the tenants themselves are in one geo. Take linear as an example, this strategy works as long as your company that uses linear is all colocated in one area. As soon as you have remote people it falls apart.</p>
]]></description><pubDate>Mon, 08 Jun 2026 00:52:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=48440209</link><dc:creator>aboodman</dc:creator><comments>https://news.ycombinator.com/item?id=48440209</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48440209</guid></item><item><title><![CDATA[New comment by aboodman in "How's Linear so fast? A technical breakdown"]]></title><description><![CDATA[
<p>If you're interested in this kind of experience for your application, check out Zero (<a href="https://zero.rocicorp.dev/" rel="nofollow">https://zero.rocicorp.dev/</a>).<p>Live demo: <a href="https://gigabugs.rocicorp.dev/" rel="nofollow">https://gigabugs.rocicorp.dev/</a>.<p>We also list some alternatives here: <a href="https://zero.rocicorp.dev/docs/when-to-use#alternatives" rel="nofollow">https://zero.rocicorp.dev/docs/when-to-use#alternatives</a>.<p>If you're interested in how these things work internally, check out the Replicache design doc: <a href="https://doc.replicache.dev/concepts/how-it-works" rel="nofollow">https://doc.replicache.dev/concepts/how-it-works</a>. Replicache was the predecessor to Zero and the core protocol still works the same way.</p>
]]></description><pubDate>Mon, 08 Jun 2026 00:39:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=48440140</link><dc:creator>aboodman</dc:creator><comments>https://news.ycombinator.com/item?id=48440140</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48440140</guid></item><item><title><![CDATA[New comment by aboodman in "How's Linear so fast? A technical breakdown"]]></title><description><![CDATA[
<p>Well that "make a mutation client-side" phrase is doing a <i>lot</i> of work.<p>Make a mutation to what?<p>The classic server rendered web-app doesn't have any data to make a mutation <i>to</i>. You could try to patch the UI but that would be a huge pita and not really a scalable (in effort) solution.<p>If you have an SPA, you still don't really have data on the client-side. You have a bunch of cached query responses. You can update those, but (a) it will be a pita to do correctly, (b) you'll have to do it to every possibly affected query, and (c) you have to remember to undo it at the right time (way more subtle than it appears - think it through!).<p>A sync engine creates the client-side normalized datastore that allows you to "do a mutation client side". In fact, you're kind of right that once you have a sync engine, just doing a mutation is really easy. The real challenge is all the infra required to enable you to do so.</p>
]]></description><pubDate>Mon, 08 Jun 2026 00:25:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=48440047</link><dc:creator>aboodman</dc:creator><comments>https://news.ycombinator.com/item?id=48440047</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48440047</guid></item><item><title><![CDATA[New comment by aboodman in "How's Linear so fast? A technical breakdown"]]></title><description><![CDATA[
<p>> it’s very possible to run a web app backend within ~10ms RTT of most users and have the backend render responses within ~10ms too.<p>What are you talking about? The only AWS region < 10ms away from us-east-1 is, err, us-east-2:<p><a href="https://www.cloudping.co/" rel="nofollow">https://www.cloudping.co/</a><p>us-west-1 is 60ms away.
eu-centra-1 is 100ms away.
asia is 200ms away.<p>and this is datacenter-to-datacenter traffic. Actual latency over the public internet to residential providers is <i>far</i> worse.<p>Your database needs to be in exactly one region. So no matter where you put it, the majority of uses on earth are going to be > 100ms away from it.<p>It doesn't matter where the endpoints are, because the endpoints need to talk to the database to read and write data. Thinking you can replicate some data closer to the users? Congrats you are now the proud owner of a "local-first syncing" database. This replicated database you use (either of your own design or off the shelf) will have all the same problems of client-side syncing. Except you'll still have significant network latency.<p>There is no getting around physics. You either have quarter-second commits for most users or eventual consistency (aka syncing). Those are the options.</p>
]]></description><pubDate>Mon, 08 Jun 2026 00:15:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=48439993</link><dc:creator>aboodman</dc:creator><comments>https://news.ycombinator.com/item?id=48439993</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48439993</guid></item><item><title><![CDATA[New comment by aboodman in "Debug Project"]]></title><description><![CDATA[
<p>Linus was my boss at Google for nearly 10 years. His main contribution was one of the key people behind Chrome. He's as good as they come.</p>
]]></description><pubDate>Tue, 02 Jun 2026 00:58:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=48364565</link><dc:creator>aboodman</dc:creator><comments>https://news.ycombinator.com/item?id=48364565</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48364565</guid></item><item><title><![CDATA[New comment by aboodman in "A History of IDEs at Google"]]></title><description><![CDATA[
<p>I was there 2004-2014 and never used an IDE the entire time. From my perspective the most popular editors were emacs and vim. Life was probably different in the Android and Java areas, but there was also a massive chunk (50%+?) of people writing C++ and Python, and I think IDE-less is/was the standard for those folks.</p>
]]></description><pubDate>Wed, 13 May 2026 20:27:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=48127048</link><dc:creator>aboodman</dc:creator><comments>https://news.ycombinator.com/item?id=48127048</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48127048</guid></item><item><title><![CDATA[New comment by aboodman in "Today I've made the difficult decision to reduce the size of Coinbase by ~14%"]]></title><description><![CDATA[
<p>But how can you know who to promote, how to balance resources, or who to hire if you're not leading the project?<p>People management is about managing the company's resources to achieve goals. If you are not the one leading the implementation of those goals, you are not going to be able to:<p><pre><code>  * reason about what the right about of resources should be
  * see opportunities for optimization
  * forecast future need
</code></pre>
You will be completely dependent on a technical lead who does have that information. So then what is your independent role? Just to shuttle information between the technical lead and others?</p>
]]></description><pubDate>Thu, 07 May 2026 20:35:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=48054595</link><dc:creator>aboodman</dc:creator><comments>https://news.ycombinator.com/item?id=48054595</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48054595</guid></item><item><title><![CDATA[New comment by aboodman in "Today I've made the difficult decision to reduce the size of Coinbase by ~14%"]]></title><description><![CDATA[
<p>Do you people only interact with your manager via 1:1? I was constantly interacting with my boss - design meetings, code reviews, product decisions, whiteboard sessions, in slack, in irc ... he was always around.<p>I got to know him much better through these productive interactions then awkward smalltalk in a 1:1.<p>And it kind of make sense to meet privately quarterly since perf reviews are also quarterly and that's the only reason I can really think of for a private scheduled face-to-face.<p>Of course I could always just ask for a private meeting anytime I wanted, which I guess I did from time to time. But it always for a product reason: a tough tech choice I was wrestling with or similar.</p>
]]></description><pubDate>Thu, 07 May 2026 07:39:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=48046555</link><dc:creator>aboodman</dc:creator><comments>https://news.ycombinator.com/item?id=48046555</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48046555</guid></item><item><title><![CDATA[New comment by aboodman in "Today I've made the difficult decision to reduce the size of Coinbase by ~14%"]]></title><description><![CDATA[
<p>I mean a branching factor of 50 vs a branching factor of 7 is a massive difference. A team of 50 can either be run by one manager and a two-level tree or  like 8 managers (!!) and a three-level tree. Think about the difference in execution (and expense) in these two companies.<p>If you can do it w/ the first model why on earth would you not?</p>
]]></description><pubDate>Wed, 06 May 2026 20:52:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=48041644</link><dc:creator>aboodman</dc:creator><comments>https://news.ycombinator.com/item?id=48041644</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48041644</guid></item><item><title><![CDATA[New comment by aboodman in "Today I've made the difficult decision to reduce the size of Coinbase by ~14%"]]></title><description><![CDATA[
<p>The most common split I'm aware of is tech lead / eng mgr. The eng mgr does "people stuff" like hiring/firing and cross-org negotiation, and tech lead does "technical stuff".<p>But the thing is this makes no sense. Tech issues always turn into people issues - when there is a disagreement, who adjudicates? How can a manager adjudicate something they don't understand. And how will engineers respect / follow the decision?<p>And people issues invariably become tech issues. How can you hire the right people if you don't understand the tech? How will you know when to fire?<p>This setup makes no sense to me and i have very rarely seen it work. It seems like it was a product of an earlier time when there was a lot of money floating around and provided a way to (a) shield senior eng from dealing with people problem they just didn't want to, and (b) provide cushy jobs to professional managers that didn't know much about the tech.<p>But it doesn't work. There's no way to do the shielding well and a person with hiring/firing power needs to know what the fuck is going on.<p>Really good eng leaders must be both good at tech and good at people. That's the job.</p>
]]></description><pubDate>Wed, 06 May 2026 20:44:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=48041540</link><dc:creator>aboodman</dc:creator><comments>https://news.ycombinator.com/item?id=48041540</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48041540</guid></item><item><title><![CDATA[New comment by aboodman in "Today I've made the difficult decision to reduce the size of Coinbase by ~14%"]]></title><description><![CDATA[
<p>I mean I have 7 reports right now and we're a startup. And fully remote. And I'm still contributing as an IC too.</p>
]]></description><pubDate>Wed, 06 May 2026 09:53:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=48034341</link><dc:creator>aboodman</dc:creator><comments>https://news.ycombinator.com/item?id=48034341</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48034341</guid></item><item><title><![CDATA[New comment by aboodman in "Today I've made the difficult decision to reduce the size of Coinbase by ~14%"]]></title><description><![CDATA[
<p>lol I read "as many as 15+ direct reports" and thought it was hilariously low. My manager at google had like 50+ directs in 2010. And he was the best boss I've ever had.<p>Popular conception of what a manager is is wildly unambitious.<p>Weekly 1:1 is performative and useless. It's not what makes a good manager. What makes a good manager is:<p><pre><code>  * Having excellent domain knowledge and judgement
  * Having the respect of the team, to settle disputes
  * Solving problems when needed
  * Hiring and retaining an excellent team
  * Picking the right things to work on
</code></pre>
... etc ...<p>If a manager is doing these things well I don't need a standing meeting at all. Or we can meet quarterly to check in.<p>Email is a thing.</p>
]]></description><pubDate>Wed, 06 May 2026 09:49:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=48034320</link><dc:creator>aboodman</dc:creator><comments>https://news.ycombinator.com/item?id=48034320</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48034320</guid></item><item><title><![CDATA[New comment by aboodman in "Instant 1.0, a backend for AI-coded apps"]]></title><description><![CDATA[
<p>Congrats, Instant team. Genuinely happy for y'all.</p>
]]></description><pubDate>Fri, 10 Apr 2026 01:54:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=47712664</link><dc:creator>aboodman</dc:creator><comments>https://news.ycombinator.com/item?id=47712664</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47712664</guid></item><item><title><![CDATA[New comment by aboodman in "Eat Real Food"]]></title><description><![CDATA[
<p>But that is a kind of silly way to compare. Broccoli isn't very filling _and_ it doesn't have very much protein in it. That doesn't change the fact that it lack protein.<p>The question is if I'm preparing a meal that I want to be filling, healthy, and energizing, how should I do it. Broccoli isn't a good answer to the protein part of that question.</p>
]]></description><pubDate>Wed, 07 Jan 2026 23:01:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=46534485</link><dc:creator>aboodman</dc:creator><comments>https://news.ycombinator.com/item?id=46534485</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46534485</guid></item></channel></rss>