
frontend perf, design systems, agent tooling. receipts + trade-offs. @ngrokHQ shrimpfluencer | staff eng
wldn't u lik 2 kno weather boi
Joined January 2022
- Tweets1.3K
- Following1.4K
- Followers205
- Likes3.6K
Pinned Tweet
the React Compiler skips node_modules, so we ship mantle precompiled. every function but one, and a bailout fails the build
library authors: do you ship compiled output?
made a trailer for this one π₯
the @ngrokHQ Limits page now shows status, current usage, and when a limit last turned a request away. 80% of a cap and the row says "Approaching Limit"
you'll see it coming πͺ
See how close you are to your ngrok limits. The dashboard Limits page now shows status, current usage, and when a limit last turned a request away, for API keys, domains, team members, and more.
ngrok.com/changelog/dashboarβ¦
in a world where only HTTP got inspected..
traffic inspector II: TCP is now showing in your @ngrokHQ dashboard.
client IP, duration, bytes in/out, and the ngrok error for every TCP and TLS endpoint
this time, it's protocol
Traffic Inspector now shows TCP connections, not just HTTP requests! See the client IP, duration, bytes in/out, and the ngrok error for TCP/TLS endpoints.
Get wild, filter with πππππ:πππ πππππππ:ππππππ to find broken handshakes.
ngrok.com/changelog/traffic-β¦
the PR, with the profile and the parity check: github.com/ngrok/mantle/pullβ¦
no React 18 shim: mantle already requires React 19, which ships react/compiler-runtime
day 14 of shrimpposting for the @ngrokHQ rizz badge.
some companies have brand ambassadors.
we have a staff engineer who cares an unreasonable amount about the product and has been left unsupervised with a shrimp emoji.
i am that distribution channel π¦
day 13 without the @ngrokHQ rizz badge. @SamCRichard said i need to demonstrate growth so i molted on the earnings call
apparently thatβs βalso not what we meantβ
you can make your codebase easier for agents to work in. i know because iβve done it.
thereβs no pride in preserving friction just because youβve learned to work around it.
βwe donβt have time, we have to shipβ is exactly why this deserves investment. every repeated workaround is time you could spend building.
pick one thing agents keep getting stuck on. fix it. use the time you get back to ship and fix more.
Replying to @thorstenball @samwhoo
yeahhh. when i hear βagents struggle with our setup,β my first question is βwhat could we change to help them succeed?β
setting agents up to succeed rhymes a lot with setting a growing team up to succeed: clear docs, good tooling, fast feedback, less tribal knowledge.
the friction agents expose is often friction people have learned to work around. fixing it pays off for both.
the validation loop is what lets you scale agent output with confidence.
good tests exercise the interface, expected behavior, and edge cases without locking you into implementation details.
rewriting tests is fine when the product intent changes. the question is whether they reflect that new intent or just accommodate whatever the agent built.
This is why i'm not bullish on software factories π
a factory takes a ticket and returns a green diff.
this one would have:
- right root cause
- regression test
- passing suite
the agent wasn't wrong. it answered the question it got.
what it lacked was where the codebase is going: which pattern won, what's legacy, what we already decided. that lives in people until someone writes it down where an agent reads it.
the recipe was written down, but nobody had pointed the domains code at it!
an agent fixed our bug in 4 lines, with a test that failed before and passed after.
it was right (absolutely right) and i didn't ship it.
the bug was a symptom. our @ngrokHQ dashboard domain sheets drifted from a pattern we'd already written down, and the agent had no way to know
who catches drift on your team?
## the bug
an error alert fired for one user: a detail page threw "failed to load" with the tab in the background
in React Query v5, isLoading is isPending && isFetching. offline or hidden, the query pauses: pending but not fetching. so isLoading was false, data was empty, and the page threw. the query never failed. it would have resumed on focus
i asked the agent if we were mishandling it. it found the same check in 3 more routes, one of them domains, swapped in isPending, and added an offline test that failed on the old code
## the step back
the better question: why does a sheet throw the whole page away because its data is late?
mantle, our component library, has had an async overlay recipe since July.
mantle.ngrok.com/recipes/oveβ¦
the sheet mounts at once and keeps its header. only the body branches: a loader, an inline error with retry, or the content. actions wait for the data
domains, and about 15 other dialogs and sheets across two apps, never moved to it. they waited on their data, then sent a failed load to the route error boundary: a full-page "something went wrong"
## what shipped
every one of those overlays now paints at once and shows errors inline. a failed background refetch keeps the loaded content and any unsaved input. the 2 routes that are real pages kept the isPending swap, so the agent's fix survived where it fit
the cost: a 4-line fix became 57 files, +3,230 β1,781
## why i'm not bullish on software factories
a factory takes a ticket and returns a green diff. this one would have: right root cause, regression test, passing suite
the agent wasn't wrong. it answered the question it got. what it lacked was where the codebase is going: which pattern won, what's legacy, what we already decided. that lives in people until someone writes it down where an agent reads it
the recipe was written down, but nobody had pointed the domains code at it!
trying out new branding/design for my technical deep dives, lemme know what you think!
an agent fixed our bug in 4 lines, with a test that failed before and passed after.
it was right (absolutely right) and i didn't ship it.
the bug was a symptom. our @ngrokHQ dashboard domain sheets drifted from a pattern we'd already written down, and the agent had no way to know
who catches drift on your team?
## the bug
an error alert fired for one user: a detail page threw "failed to load" with the tab in the background
in React Query v5, isLoading is isPending && isFetching. offline or hidden, the query pauses: pending but not fetching. so isLoading was false, data was empty, and the page threw. the query never failed. it would have resumed on focus
i asked the agent if we were mishandling it. it found the same check in 3 more routes, one of them domains, swapped in isPending, and added an offline test that failed on the old code
## the step back
the better question: why does a sheet throw the whole page away because its data is late?
mantle, our component library, has had an async overlay recipe since July.
mantle.ngrok.com/recipes/oveβ¦
the sheet mounts at once and keeps its header. only the body branches: a loader, an inline error with retry, or the content. actions wait for the data
domains, and about 15 other dialogs and sheets across two apps, never moved to it. they waited on their data, then sent a failed load to the route error boundary: a full-page "something went wrong"
## what shipped
every one of those overlays now paints at once and shows errors inline. a failed background refetch keeps the loaded content and any unsaved input. the 2 routes that are real pages kept the isPending swap, so the agent's fix survived where it fit
the cost: a 4-line fix became 57 files, +3,230 β1,781
## why i'm not bullish on software factories
a factory takes a ticket and returns a green diff. this one would have: right root cause, regression test, passing suite
the agent wasn't wrong. it answered the question it got. what it lacked was where the codebase is going: which pattern won, what's legacy, what we already decided. that lives in people until someone writes it down where an agent reads it
the recipe was written down, but nobody had pointed the domains code at it!
an agent fixed our bug in 4 lines, with a test that failed before and passed after.
it was right (absolutely right) and i didn't ship it.
the bug was a symptom. our @ngrokHQ dashboard domain sheets drifted from a pattern we'd already written down, and the agent had no way to know
who catches drift on your team?
## the bug
an error alert fired for one user: a detail page threw "failed to load" with the tab in the background
in React Query v5, isLoading is isPending && isFetching. offline or hidden, the query pauses: pending but not fetching. so isLoading was false, data was empty, and the page threw. the query never failed. it would have resumed on focus
i asked the agent if we were mishandling it. it found the same check in 3 more routes, one of them domains, swapped in isPending, and added an offline test that failed on the old code
## the step back
the better question: why does a sheet throw the whole page away because its data is late?
mantle, our component library, has had an async overlay recipe since July.
mantle.ngrok.com/recipes/oveβ¦
the sheet mounts at once and keeps its header. only the body branches: a loader, an inline error with retry, or the content. actions wait for the data
domains, and about 15 other dialogs and sheets across two apps, never moved to it. they waited on their data, then sent a failed load to the route error boundary: a full-page "something went wrong"
## what shipped
every one of those overlays now paints at once and shows errors inline. a failed background refetch keeps the loaded content and any unsaved input. the 2 routes that are real pages kept the isPending swap, so the agent's fix survived where it fit
the cost: a 4-line fix became 57 files, +3,230 β1,781
## why i'm not bullish on software factories
a factory takes a ticket and returns a green diff. this one would have: right root cause, regression test, passing suite
the agent wasn't wrong. it answered the question it got. what it lacked was where the codebase is going: which pattern won, what's legacy, what we already decided. that lives in people until someone writes it down where an agent reads it
the recipe was written down, but nobody had pointed the domains code at it!
we know y'all love @ngrokHQ! let us know why and we'll share it!
I updated the @ngrokHQ wall of developer love with the love below and more.
ngrok.com/love
If there's something you love about ngrok, let me know and I'll add yours, too.
If there's something you want us to make better, let me know and we'll get on it even faster.












