San José, CA
Network engineering
Scroll
1004ms of tail that is not there at rest
Survival curve, log axes · anchors are measured percentiles, strokes interpolate between them
tcp 1.1.1.1:443 · 507 probes · 2026-09-01
457 Mbps and still
a second behind.
I spent seven years in competitive FPS learning what lag feels like, then went and measured where it actually comes from. This is my own line.
The link was fine.
The lag was real.
-
At rest
The link answers in 15.55 ms at the median, and its slowest one probe in a hundred still lands under 34.44 ms.
-
Under load
Start a 457.4 Mbps download and the median barely moves — 34.47 ms. Every speed test on earth would call this link healthy.
-
The tail
The 99th percentile goes to 1038.82 ms. That is the packet your game is waiting on, and it arrives a full second late.
-
Where
Not on my equipment. My router holds at 1 ms under the same load. The queue is one hop out, in the carrier.
| Hop | Idle | Loaded | Relative |
|---|---|---|---|
| 1 router (LAN) | 1 ms | 1 ms | |
| 3 ISP edge | 11 ms | 77 ms | |
| 9 ISP core | 13 ms | 109 ms | |
| 12 internet | 14 ms | 111 ms |
The router on my desk is not the problem — it holds at 1 ms while the hop past it goes from 11 to 77 ms. That is a buffer in the carrier absorbing my download and making everything else queue behind it. Bufferbloat, not bandwidth. More capacity would not fix it.
Work
What each project proves, and how it was checked
-
netlab
Seventeen network topologies, each deployed and asserted by CI on every push. If a lab stops working, main goes red.
- containerlab
- FRRouting
- OSPF
- BGP
- RPKI
- GitHub Actions
2026
-
Latency lab
My connection adds a full second of latency the moment anyone starts a download — and the queue causing it is not on my equipment. Measured, localised, then left honest about what is still unmeasured.
- Python
- TCP handshake RTT
- tshark
- pcap
2026
-
JV4
Configure a Razer Viper V4 Pro without Razer's software, and measure what the mouse actually delivers. Its polling rate is exactly as advertised at the median and half that at the tail.
- Rust
- Tauri 2
- HID
- Raw Input
- Windows
2026
-
Cat2Jam
A self-hosted identity and listening-data service I built and ran in production for a small private group. The control plane never touches bulk media.
- Node.js
- Hono
- SQLite
- Tauri 2
- Tailscale / WireGuard
2026
-
BusTap
Riders could not tell which identical bus was leaving next. A driver taps an RFID card and a live departures board answers, in real time.
- Raspberry Pi 4
- RFID/NFC
- REST
- WebSockets
- Leaflet
- OSRM
2026
Writing
- 2026-09-01 Measuring bufferbloat on my own line
A link doing 457 Mbps with a 15 ms idle ping went to a 1,038 ms p99 under load. Finding the queue took three runs and a per-hop probe.