frontend perf, design systems, agent tooling. receipts + trade-offs. @ngrokHQ shrimpfluencer | staff eng

wldn't u lik 2 kno weather boi
Joined January 2022
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?
2
4
264
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…
1
3
185
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-…
2
85
about to drop TWO promo videos for some dope stuff we launched today.. standby πŸ˜‰
1
2
99
the gang is silly goose maxxing on main
negative thinking destroys your brain being a silly goose and delusionally optimistic is the ultimate longevity hack
3
142
i made some #slopcore music for @ngrokHQ a while back an absolutely diabolical mega banger i'm afraid
πŸ€– Made with AI
1
7
266
if you try this with oxc-transform-react: - jsx: "preserve", so the bundler keeps its JSX pass - in Vite, enforce: "pre", or Vite strips JSX first - keep .d.ts ids out of the filter, or oxc emits export {} - add react/compiler-runtime to optimizeDeps.include
1
15
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”
1
4
215
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.
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.
1
3
156
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.
AI can trivially read and understand application code, so that becomes the source of truth. What purpose then, if any, do unit tests provide? Every time I make a change, AI just changes all the unit tests anyway, so there's no safety. It's all overhead.
1
3
163
oh yeah, i'm loving this direction 🦐
2
16
8,629
🀌 just 🦐 it!
1
3
286
jev is this step safe
AI uses Cameras and Lidars to spot dangerous rock slopes.
1
154
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!
2
256
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!
3
190
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!
1
4
565
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.
5
143