Designing for Real-Time

Modern SaaS is expected to update live, with no refresh button in sight. Building UIs that stay current across multiple users without flickering, lagging, or losing data is genuinely hard. Here's why real-time became the baseline, and the frontend architecture that holds it together.

7 min read

The refresh button that gives it away

Two people are working in the same tool at the same time. One makes a change, and the other one has to hit refresh to see it. The moment they do, the product quietly tells them something: this thing isn't really live, you're looking at a snapshot, and you can't trust the screen to be current. It's a small friction, a single button press, but it changes how people use the tool. They stop trusting what's in front of them. They refresh compulsively. They wonder if they're about to overwrite something a colleague just did.

That used to be acceptable. It isn't anymore. People have spent years inside tools where edits appear as they happen, where you can see a colleague's cursor moving and a number tick up the instant it changes, and that experience has reset the baseline for what "working software" means. A tool that needs a refresh to stay current now reads as slightly broken, the way a website that didn't work on a phone read as broken ten years ago. Real-time stopped being a premium feature. It became table stakes, and the absence of it is now something users actively notice.

Live is the new baseline, and the gap is visible

The reason this matters commercially is that real-time is where the comparison happens. When a prospect evaluates your product against a competitor, the one that updates live and the one that needs a refresh don't feel like the same category of software, regardless of which has better features underneath. Live feels modern, collaborative, alive. Refresh-to-update feels like last decade. In a head-to-head, that perception does real work on the decision, and it does it fast, often before anyone's read the feature list.

It also changes what your product is for. The moment data updates live, teams can actually work in the same space at the same time, which is a different and more valuable thing than taking turns in a shared file. A sales team watches the pipeline shift as deals move. An ops team sees an incident dashboard update without anyone touching it. Two people edit the same record and watch each other's changes land. That simultaneity is often the entire pitch for a collaborative tool, and it lives or dies on whether the frontend can keep everyone's screen genuinely in sync. Get it right and the product feels like one shared reality. Get it wrong and it feels like everyone's looking at slightly different, slightly stale copies, which is worse than no collaboration at all because now people are making decisions on numbers that already moved.

So the stakes aren't "a nice live-updating touch." The stakes are whether the product delivers the thing modern users now assume it does. And here's the catch that makes this a genuine engineering problem rather than a checkbox: doing it badly is worse than not doing it. A real-time UI that flickers, jumps, or loses a change erodes trust faster than an honest refresh button ever would.

The hard parts nobody sees when it works

Real-time UI is one of those things that's invisible when it's done well and excruciating when it's not. Here's where the difficulty actually lives.

The first problem is that the network is slow and users aren't patient. If the interface waits for the server to confirm every action before showing anything, the app feels laggy, because there's a real round-trip behind each click. The way out is optimistic updates: show the change immediately, as if it succeeded, then reconcile with the server when its answer comes back. This is what makes a real-time app feel instant. It's also where a lot of the danger lives, because now the screen is showing something that hasn't been confirmed yet, and you need a plan for the moment the server disagrees. Done carefully, the action feels weightless. Done carelessly, the user sees a change, believes it, and then watches it silently vanish a second later, which is its own kind of broken.

The second problem is keeping a live connection in sync without chaos. Real-time usually means a persistent connection feeding a stream of updates from the server, and that stream has to be merged into what the user is currently looking at without disrupting them. An update arrives while they're mid-scroll or mid-edit, and it has to land smoothly, updating only the part that changed rather than tearing down and rebuilding the view, which is what causes the flicker and the lost scroll position. The connection itself also has to be handled like the unreliable thing it is: it drops, the user's wifi hiccups, they background the tab. A robust real-time UI reconnects quietly and catches up on what it missed, so the user never has to think about whether they're still connected.

The third problem is the genuinely hard one: two people changing the same thing at once. When updates fly in from multiple users simultaneously, you get race conditions, two changes to the same data point arriving close enough together that, handled naively, one silently clobbers the other. Preventing that means being deliberate about how concurrent changes resolve, so the system has a defined answer for who wins and nothing just disappears because two people clicked at the same moment. This is the part that separates a real-time feature that survives actual multi-user load from a demo that looks great with one person and falls apart with five. I've built interfaces on platforms where live data and multiple simultaneous users were the normal operating condition, not the edge case, and that's exactly where this stops being theory: the architecture either accounts for concurrency from the start or it generates quiet data-corruption bugs that are miserable to track down later.

When you don't actually need it

Let me push back on my own thesis, because "real-time is table stakes" is true as a trend and false as a blanket rule. Plenty of products don't need live updates, and bolting them on anyway is a way to spend a lot of engineering effort solving a problem your users don't have. A reporting tool someone checks once a day does not need live-streaming data. A form, a settings page, a mostly single-player workflow: making those real-time adds real complexity, persistent connections, optimistic-update logic, conflict handling, for a benefit nobody asked for. And complexity isn't free. Every one of those mechanisms is a new way for the app to break.

So the honest claim is narrower than the headline. Real-time is the baseline for genuinely collaborative, multi-user, live-data products, the tools where people work in the same space and stale data is actively misleading. For everything else, it's an option to weigh, not an obligation. The skill isn't making everything live. It's recognizing which surfaces are actually collaborative, building real-time properly there, and resisting the urge to sprinkle it everywhere just because users have come to expect it in the apps where it belongs.

Sync is the product, or it isn't

Real-time has crossed over from a differentiator to an expectation for the products where people genuinely work together, and for those products the refresh button isn't a minor gap, it's the tell that the tool isn't really live. Closing that gap is real frontend architecture: optimistic updates so actions feel instant, a live connection merged in without flicker or lost state, and deliberate handling of the moment two users touch the same thing at once. None of it shows when it works. All of it shows when it doesn't.

The thing to get right isn't "add live updates." It's knowing which parts of your product are actually a shared space and engineering those to feel like one continuous reality for everyone in them, while leaving the parts that aren't collaborative alone. When sync is the product, it has to be built like the product. When it isn't, the discipline is not pretending otherwise.

If you're building something where people work side by side and the live experience has to feel seamless and safe, that's squarely the kind of problem I take on. Tell me what you're building: your name, your email, and a few lines about where your users need to be in sync.

Join the newsletter

Be the first to read our articles.