nater.dev ☀️
nater-dev.bsky.social
nater.dev ☀️
@nater-dev.bsky.social
staff frontend engineer | shipping & scaling
let me change my mind about this
August 1, 2025 at 9:25 PM
It’s rare that anyone but “Principal” and “Distinguished” “Engineers” decide on the stacks in enterprises. Given these roles are usually tied to director and VP level pay scales, there’s exceedingly few compared to all those resumes in your bin. “Doing your job” is often suboptimal.
July 18, 2025 at 9:49 PM
Maybe.

My mental model for UIs is rooted in physical metaphors: steering wheel, speed gauge, light switch, faucets, doors, etc etc and these things don’t make sense as caches in my brain.

it’s maybe the difference between *views* and *controls*

Idk, thanks for the discussion!
May 31, 2025 at 12:42 AM
The settings are orthogonal to the real-time network speed, which (in the example) is the purpose of this UI. This is not so different from waveform in a DAW or a video playing on YouTube.

Point being, a lot of UI just isn’t a cached of data, it’s more like a stream of data.
May 30, 2025 at 10:38 PM
fair. Ideally if you fail to declare one of the expected states, the runtime would inform you via error/warning
May 30, 2025 at 10:32 PM
One that comes to mind is fast.com

Obviously this is somewhat trivial but it’s a utility that I personally use regularly that has a good UI and doesn’t strike me as a cache of data. Any sort of “real-time” stream of data fails to fit this mental model of a cache
Internet Speed Test
How fast is your download speed? In seconds, FAST.com's simple Internet speed test will estimate your ISP speed.
fast.com
May 30, 2025 at 3:24 PM
It’s a terse mental model but not a useful one. This is a server-centric view of UI. This idea doesn’t extend well to a strictly local app or a highly interactive app where interactions are ephemeral and the UI state is not persisted
May 30, 2025 at 10:58 AM
<use-async key=comments>
<p slot=pending>Loading…</p>
<p slot=rejected class=error>
Failed to load.
</p>
<div slot=resolved>
<template id=comment-template>
<p>
<slot name=text></slot>
</p>
</template>
</div>
</use-async>
May 29, 2025 at 6:09 PM
Would love a web component version of this! Nice work 👏
March 28, 2025 at 8:07 PM
This is really cool! Your suggestion for Rust/Haskell makes sense. I’m curious your thoughts on using Typescript with a really strict config as the base lang, given how prevalent it is in frontend applications?
March 3, 2025 at 5:56 PM
Even worse: the longer this is the case, the higher the skill floor is, eating into mid and senior level roles until we’re only left with “distinguished wizard architects” and their fancy autocomplete
February 4, 2025 at 8:04 PM