Skip to main content
Week 05 • Track 04 • The Vision

The
Pivot.

v1.0 is live. Users are clicking. Feedback is coming in. Time to listen, iterate, and ship v1.1—the update that proves you care.

Optimistic UI Demo

Click the heart. Notice how fast it responds.

The Mental Model

The critics have spoken.

Your album dropped. Now the reviews are in. Some people love it. Some find bugs. Some request features you never considered. This is normal.

Collect = Listen to the Reviews

User feedback, bug reports, analytics data. Gather it all.

Filter = Separate Signal from Noise

Not all feedback is equal. Fix bugs first. Features second. Opinions last.

Iterate = Record the Deluxe Edition

Ship the fixes. Add the polish. Show users you're listening.

Ship v1.1 = The Deluxe Drop

The version that proves this isn't a one-hit wonder.

feedback-inbox
BUG"Login button doesn't work on Safari"
BUG"Page crashes on empty state"
UX"Feels slow when I click like"
FEAT"Can you add dark mode?"
OPINION"I don't like the font"

Priority: Bugs > UX > Features > Opinions

Reading Feedback

🚨

Priority 1: Bugs

Things that are broken. These get fixed before anything else. A bug in production is an emergency.

P0App crashes / data loss
P1Feature doesn't work
P2Visual glitch / bad UX
📡

Where to Get Feedback

Don't wait for people to email you. Go find the feedback.

1

Share with 5 people

Friends, family, Twitter mutuals. Ask them to try breaking it.

2

Watch analytics

Vercel Analytics or Plausible. See where users drop off.

3

Check console in production

Open DevTools on your live site. Any red? Fix it.

Optimistic UI

Don't make them wait.

Traditional UI: click → spinner → wait for server → update screen. Optimistic UI: click → update screen immediately → sync with server in background.

The user sees the result before the server confirms it. If the server fails, roll back. But 99% of the time, it works—and the app feels instant.

Traditional

Click

Spinner (500ms)

Server responds

Update UI

Optimistic

Click

Update UI (0ms)

Sync in background

Done (or rollback)

like-button.tsx

const handleLike = async () => {

// 1. Update UI immediately

setLiked(true);

setCount(c => c + 1);

// 2. Sync with server

try {

await fetch('/api/like', ...

} catch {

// 3. Rollback on failure

setLiked(false);

setCount(c => c - 1);

}

};

The Changelog

Every version tells a story. A changelog shows users (and yourself) what's new.

v1.1.0Latest
March 2026
FIXSafari login button now works
FIXEmpty state no longer crashes
UXLike button now uses optimistic UI
NEWAdded mobile-responsive navigation
v1.0.0February 2026
INITInitial release

Common Patterns

Pivot Traps

"Everyone's feedback is equally important"

No. Bugs > UX > Features > Opinions. Prioritize ruthlessly.

"I need to rebuild from scratch"

Iterate, don't rebuild. v1.1 is a patch, not a rewrite.

"Spinners are fine, users can wait"

Every 100ms of delay loses trust. Use optimistic UI where possible.

"I shipped it, I'm done"

Software is never done. The first version is just the beginning.

The Clean Pivot

Fix bugs within 24 hours

Broken features destroy trust. Respond fast to production bugs.

Ship small updates often

One fix per deploy. Small diffs are easier to debug if something breaks.

Use optimistic UI everywhere

Likes, saves, toggles, form submissions. Update the screen first, sync later.

Keep a public changelog

Show users what's new. It builds trust and shows momentum.

The Exercises

Ship your first update.

01

The Bug Fix

Priority Zero

  • Open DevTools on your live site
  • Find any console errors
  • Fix and deploy on a branch
Goal: Clean console in production
02

The Speed Boost

Optimistic UI

  • Find an action that shows a spinner
  • Update the UI before the server responds
  • Add a rollback for failures
Goal: No more spinners for simple actions
03

The v1.1

Ship the Update

  • Merge your fixes to main
  • Deploy to production
  • Share the update on social
Goal: v1.1 is live and shared

📋 Quick Reference

Priority

Fix bugs > improve UX > add features

Optimistic

setState first, fetch second
End of Week 05Return to Studio