<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Kyle Cho — Notes</title>
  <subtitle>Lessons from operating production systems.</subtitle>
  <link href="https://kylecho.com/notes/feed.xml" rel="self"/>
  <link href="https://kylecho.com/notes/"/>
  <id>https://kylecho.com/notes/</id>
  <updated>2026-07-20T00:00:00Z</updated>
  <author><name>Kyle Cho</name></author>

  <entry>
    <title>no one has to agree</title>
    <link href="https://kylecho.com/notes/no-one-has-to-agree/"/>
    <id>https://kylecho.com/notes/no-one-has-to-agree/</id>
    <updated>2026-07-20T00:00:00Z</updated>
    <summary>How two people can edit the same document with no server deciding the order: why naive position-based merging breaks, what operational transform and CRDTs each do about it, and a live two-replica demo you can type into.</summary>
  </entry>

  <entry>
    <title>smoothness is latency</title>
    <link href="https://kylecho.com/notes/smoothness-is-latency/"/>
    <id>https://kylecho.com/notes/smoothness-is-latency/</id>
    <updated>2026-07-19T00:00:00Z</updated>
    <summary>Why remote cursors feel broken, and the ~100ms of deliberate delay that fixes them: send-rate discipline, entity interpolation, and a playground that runs your own cursor through a simulated network.</summary>
  </entry>

  <entry>
    <title>await isn't free</title>
    <link href="https://kylecho.com/notes/await-isnt-free/"/>
    <id>https://kylecho.com/notes/await-isnt-free/</id>
    <updated>2026-07-18T00:00:00Z</updated>
    <summary>Awaiting cached DataLoader hits looks harmless in code review. Under load, the microtask hops, promise allocation, and graphql-js's async path add up.</summary>
  </entry>
</feed>
