Episode 2 — React Frontend Architecture NextJS / 2.13 — Global State Management

2.13.d — Global state vs local state

<< 2.13 Overview


Learning outcomes

  1. Apply a decision checklist for where state should live.
  2. Recognize URL state, server cache state, and client UI state as different buckets.
  3. Refactor premature global state back to local without breaking UX.

Default: local (colocated)

Keep state in the component that owns the UI until:

  • a sibling needs it → lift to parent
  • many routes need it → consider global store or URL
  • server is source of truth → fetch/cache layer

URL as state

Filters, pagination, selected tabs that should be shareable often belong in the URL query string—not a global store.


Global client state examples

  • authenticated UI session flags (sidebar collapsed)
  • cross-route wizard progress (until persisted server-side)
  • feature flags client cache (with refresh policy)

Anti-pattern

Putting every useState into Zustand “for consistency” creates global coupling and harder testing.



Appendix — Scenario bank (basic → advanced)

Each card: symptom → cause → fix → interview phrase. Drill five cards daily and explain aloud without reading.

GS3-001 — Global vs local #1

  • Level: Beginner
  • Symptom: subtree re-renders 13% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Prefer URL for shareable filters/bookmarks; sync to global only when needed.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-002 — Global vs local #2

  • Level: Beginner+
  • Symptom: subtree re-renders 26% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Namespace keys per feature or use sessionStorage for drafts intentionally.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-003 — Global vs local #3

  • Level: Intermediate
  • Symptom: subtree re-renders 39% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Use a data library for server cache; keep global store for cross-route client concerns.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-004 — Global vs local #4

  • Level: Intermediate+
  • Symptom: subtree re-renders 52% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Keep ephemeral UI local; use portals/context for cross-cutting UI chrome only.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-005 — Global vs local #5

  • Level: Advanced
  • Symptom: subtree re-renders 65% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Colocate state in the lowest owner; lift only when a second sibling truly needs it.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-006 — Global vs local #6

  • Level: Advanced+
  • Symptom: subtree re-renders 78% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Prefer URL for shareable filters/bookmarks; sync to global only when needed.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-007 — Global vs local #7

  • Level: Beginner
  • Symptom: subtree re-renders 91% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Namespace keys per feature or use sessionStorage for drafts intentionally.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-008 — Global vs local #8

  • Level: Beginner+
  • Symptom: subtree re-renders 104% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Use a data library for server cache; keep global store for cross-route client concerns.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-009 — Global vs local #9

  • Level: Intermediate
  • Symptom: subtree re-renders 117% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Keep ephemeral UI local; use portals/context for cross-cutting UI chrome only.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-010 — Global vs local #10

  • Level: Intermediate+
  • Symptom: subtree re-renders 130% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Colocate state in the lowest owner; lift only when a second sibling truly needs it.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-011 — Global vs local #11

  • Level: Advanced
  • Symptom: subtree re-renders 143% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Prefer URL for shareable filters/bookmarks; sync to global only when needed.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-012 — Global vs local #12

  • Level: Advanced+
  • Symptom: subtree re-renders 156% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Namespace keys per feature or use sessionStorage for drafts intentionally.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-013 — Global vs local #13

  • Level: Beginner
  • Symptom: subtree re-renders 169% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Use a data library for server cache; keep global store for cross-route client concerns.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-014 — Global vs local #14

  • Level: Beginner+
  • Symptom: subtree re-renders 182% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Keep ephemeral UI local; use portals/context for cross-cutting UI chrome only.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-015 — Global vs local #15

  • Level: Intermediate
  • Symptom: subtree re-renders 195% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Colocate state in the lowest owner; lift only when a second sibling truly needs it.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-016 — Global vs local #16

  • Level: Intermediate+
  • Symptom: subtree re-renders 8% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Prefer URL for shareable filters/bookmarks; sync to global only when needed.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-017 — Global vs local #17

  • Level: Advanced
  • Symptom: subtree re-renders 21% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Namespace keys per feature or use sessionStorage for drafts intentionally.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-018 — Global vs local #18

  • Level: Advanced+
  • Symptom: subtree re-renders 34% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Use a data library for server cache; keep global store for cross-route client concerns.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-019 — Global vs local #19

  • Level: Beginner
  • Symptom: subtree re-renders 47% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Keep ephemeral UI local; use portals/context for cross-cutting UI chrome only.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-020 — Global vs local #20

  • Level: Beginner+
  • Symptom: subtree re-renders 60% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Colocate state in the lowest owner; lift only when a second sibling truly needs it.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-021 — Global vs local #21

  • Level: Intermediate
  • Symptom: subtree re-renders 73% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Prefer URL for shareable filters/bookmarks; sync to global only when needed.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-022 — Global vs local #22

  • Level: Intermediate+
  • Symptom: subtree re-renders 86% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Namespace keys per feature or use sessionStorage for drafts intentionally.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-023 — Global vs local #23

  • Level: Advanced
  • Symptom: subtree re-renders 99% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Use a data library for server cache; keep global store for cross-route client concerns.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-024 — Global vs local #24

  • Level: Advanced+
  • Symptom: subtree re-renders 112% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Keep ephemeral UI local; use portals/context for cross-cutting UI chrome only.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-025 — Global vs local #25

  • Level: Beginner
  • Symptom: subtree re-renders 125% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Colocate state in the lowest owner; lift only when a second sibling truly needs it.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-026 — Global vs local #26

  • Level: Beginner+
  • Symptom: subtree re-renders 138% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Prefer URL for shareable filters/bookmarks; sync to global only when needed.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-027 — Global vs local #27

  • Level: Intermediate
  • Symptom: subtree re-renders 151% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Namespace keys per feature or use sessionStorage for drafts intentionally.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-028 — Global vs local #28

  • Level: Intermediate+
  • Symptom: subtree re-renders 164% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Use a data library for server cache; keep global store for cross-route client concerns.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-029 — Global vs local #29

  • Level: Advanced
  • Symptom: subtree re-renders 177% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Keep ephemeral UI local; use portals/context for cross-cutting UI chrome only.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-030 — Global vs local #30

  • Level: Advanced+
  • Symptom: subtree re-renders 190% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Colocate state in the lowest owner; lift only when a second sibling truly needs it.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-031 — Global vs local #31

  • Level: Beginner
  • Symptom: subtree re-renders 3% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Prefer URL for shareable filters/bookmarks; sync to global only when needed.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-032 — Global vs local #32

  • Level: Beginner+
  • Symptom: subtree re-renders 16% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Namespace keys per feature or use sessionStorage for drafts intentionally.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-033 — Global vs local #33

  • Level: Intermediate
  • Symptom: subtree re-renders 29% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Use a data library for server cache; keep global store for cross-route client concerns.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-034 — Global vs local #34

  • Level: Intermediate+
  • Symptom: subtree re-renders 42% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Keep ephemeral UI local; use portals/context for cross-cutting UI chrome only.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-035 — Global vs local #35

  • Level: Advanced
  • Symptom: subtree re-renders 55% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Colocate state in the lowest owner; lift only when a second sibling truly needs it.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-036 — Global vs local #36

  • Level: Advanced+
  • Symptom: subtree re-renders 68% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Prefer URL for shareable filters/bookmarks; sync to global only when needed.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-037 — Global vs local #37

  • Level: Beginner
  • Symptom: subtree re-renders 81% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Namespace keys per feature or use sessionStorage for drafts intentionally.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-038 — Global vs local #38

  • Level: Beginner+
  • Symptom: subtree re-renders 94% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Use a data library for server cache; keep global store for cross-route client concerns.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-039 — Global vs local #39

  • Level: Intermediate
  • Symptom: subtree re-renders 107% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Keep ephemeral UI local; use portals/context for cross-cutting UI chrome only.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-040 — Global vs local #40

  • Level: Intermediate+
  • Symptom: subtree re-renders 120% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Colocate state in the lowest owner; lift only when a second sibling truly needs it.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-041 — Global vs local #41

  • Level: Advanced
  • Symptom: subtree re-renders 133% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Prefer URL for shareable filters/bookmarks; sync to global only when needed.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-042 — Global vs local #42

  • Level: Advanced+
  • Symptom: subtree re-renders 146% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Namespace keys per feature or use sessionStorage for drafts intentionally.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-043 — Global vs local #43

  • Level: Beginner
  • Symptom: subtree re-renders 159% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Use a data library for server cache; keep global store for cross-route client concerns.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-044 — Global vs local #44

  • Level: Beginner+
  • Symptom: subtree re-renders 172% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Keep ephemeral UI local; use portals/context for cross-cutting UI chrome only.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-045 — Global vs local #45

  • Level: Intermediate
  • Symptom: subtree re-renders 185% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Colocate state in the lowest owner; lift only when a second sibling truly needs it.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-046 — Global vs local #46

  • Level: Intermediate+
  • Symptom: subtree re-renders 198% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Prefer URL for shareable filters/bookmarks; sync to global only when needed.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-047 — Global vs local #47

  • Level: Advanced
  • Symptom: subtree re-renders 11% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Namespace keys per feature or use sessionStorage for drafts intentionally.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-048 — Global vs local #48

  • Level: Advanced+
  • Symptom: subtree re-renders 24% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Use a data library for server cache; keep global store for cross-route client concerns.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-049 — Global vs local #49

  • Level: Beginner
  • Symptom: subtree re-renders 37% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Keep ephemeral UI local; use portals/context for cross-cutting UI chrome only.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-050 — Global vs local #50

  • Level: Beginner+
  • Symptom: subtree re-renders 50% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Colocate state in the lowest owner; lift only when a second sibling truly needs it.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-051 — Global vs local #51

  • Level: Intermediate
  • Symptom: subtree re-renders 63% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Prefer URL for shareable filters/bookmarks; sync to global only when needed.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-052 — Global vs local #52

  • Level: Intermediate+
  • Symptom: subtree re-renders 76% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Namespace keys per feature or use sessionStorage for drafts intentionally.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-053 — Global vs local #53

  • Level: Advanced
  • Symptom: subtree re-renders 89% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Use a data library for server cache; keep global store for cross-route client concerns.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-054 — Global vs local #54

  • Level: Advanced+
  • Symptom: subtree re-renders 102% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Keep ephemeral UI local; use portals/context for cross-cutting UI chrome only.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-055 — Global vs local #55

  • Level: Beginner
  • Symptom: subtree re-renders 115% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Colocate state in the lowest owner; lift only when a second sibling truly needs it.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-056 — Global vs local #56

  • Level: Beginner+
  • Symptom: subtree re-renders 128% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Prefer URL for shareable filters/bookmarks; sync to global only when needed.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-057 — Global vs local #57

  • Level: Intermediate
  • Symptom: subtree re-renders 141% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Namespace keys per feature or use sessionStorage for drafts intentionally.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-058 — Global vs local #58

  • Level: Intermediate+
  • Symptom: subtree re-renders 154% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Use a data library for server cache; keep global store for cross-route client concerns.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-059 — Global vs local #59

  • Level: Advanced
  • Symptom: subtree re-renders 167% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Keep ephemeral UI local; use portals/context for cross-cutting UI chrome only.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-060 — Global vs local #60

  • Level: Advanced+
  • Symptom: subtree re-renders 180% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Colocate state in the lowest owner; lift only when a second sibling truly needs it.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-061 — Global vs local #61

  • Level: Beginner
  • Symptom: subtree re-renders 193% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Prefer URL for shareable filters/bookmarks; sync to global only when needed.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-062 — Global vs local #62

  • Level: Beginner+
  • Symptom: subtree re-renders 6% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Namespace keys per feature or use sessionStorage for drafts intentionally.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-063 — Global vs local #63

  • Level: Intermediate
  • Symptom: subtree re-renders 19% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Use a data library for server cache; keep global store for cross-route client concerns.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-064 — Global vs local #64

  • Level: Intermediate+
  • Symptom: subtree re-renders 32% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Keep ephemeral UI local; use portals/context for cross-cutting UI chrome only.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-065 — Global vs local #65

  • Level: Advanced
  • Symptom: subtree re-renders 45% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Colocate state in the lowest owner; lift only when a second sibling truly needs it.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-066 — Global vs local #66

  • Level: Advanced+
  • Symptom: subtree re-renders 58% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Prefer URL for shareable filters/bookmarks; sync to global only when needed.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-067 — Global vs local #67

  • Level: Beginner
  • Symptom: subtree re-renders 71% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Namespace keys per feature or use sessionStorage for drafts intentionally.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-068 — Global vs local #68

  • Level: Beginner+
  • Symptom: subtree re-renders 84% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Use a data library for server cache; keep global store for cross-route client concerns.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-069 — Global vs local #69

  • Level: Intermediate
  • Symptom: subtree re-renders 97% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Keep ephemeral UI local; use portals/context for cross-cutting UI chrome only.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-070 — Global vs local #70

  • Level: Intermediate+
  • Symptom: subtree re-renders 110% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Colocate state in the lowest owner; lift only when a second sibling truly needs it.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-071 — Global vs local #71

  • Level: Advanced
  • Symptom: subtree re-renders 123% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Prefer URL for shareable filters/bookmarks; sync to global only when needed.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-072 — Global vs local #72

  • Level: Advanced+
  • Symptom: subtree re-renders 136% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Namespace keys per feature or use sessionStorage for drafts intentionally.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-073 — Global vs local #73

  • Level: Beginner
  • Symptom: subtree re-renders 149% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Use a data library for server cache; keep global store for cross-route client concerns.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-074 — Global vs local #74

  • Level: Beginner+
  • Symptom: subtree re-renders 162% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Keep ephemeral UI local; use portals/context for cross-cutting UI chrome only.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-075 — Global vs local #75

  • Level: Intermediate
  • Symptom: subtree re-renders 175% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Colocate state in the lowest owner; lift only when a second sibling truly needs it.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-076 — Global vs local #76

  • Level: Intermediate+
  • Symptom: subtree re-renders 188% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Prefer URL for shareable filters/bookmarks; sync to global only when needed.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-077 — Global vs local #77

  • Level: Advanced
  • Symptom: subtree re-renders 1% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Namespace keys per feature or use sessionStorage for drafts intentionally.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-078 — Global vs local #78

  • Level: Advanced+
  • Symptom: subtree re-renders 14% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Use a data library for server cache; keep global store for cross-route client concerns.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-079 — Global vs local #79

  • Level: Beginner
  • Symptom: subtree re-renders 27% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Keep ephemeral UI local; use portals/context for cross-cutting UI chrome only.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-080 — Global vs local #80

  • Level: Beginner+
  • Symptom: subtree re-renders 40% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Colocate state in the lowest owner; lift only when a second sibling truly needs it.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-081 — Global vs local #81

  • Level: Intermediate
  • Symptom: subtree re-renders 53% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Prefer URL for shareable filters/bookmarks; sync to global only when needed.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-082 — Global vs local #82

  • Level: Intermediate+
  • Symptom: subtree re-renders 66% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Namespace keys per feature or use sessionStorage for drafts intentionally.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-083 — Global vs local #83

  • Level: Advanced
  • Symptom: subtree re-renders 79% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Use a data library for server cache; keep global store for cross-route client concerns.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-084 — Global vs local #84

  • Level: Advanced+
  • Symptom: subtree re-renders 92% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Keep ephemeral UI local; use portals/context for cross-cutting UI chrome only.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-085 — Global vs local #85

  • Level: Beginner
  • Symptom: subtree re-renders 105% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Colocate state in the lowest owner; lift only when a second sibling truly needs it.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-086 — Global vs local #86

  • Level: Beginner+
  • Symptom: subtree re-renders 118% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Prefer URL for shareable filters/bookmarks; sync to global only when needed.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-087 — Global vs local #87

  • Level: Intermediate
  • Symptom: subtree re-renders 131% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Namespace keys per feature or use sessionStorage for drafts intentionally.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-088 — Global vs local #88

  • Level: Intermediate+
  • Symptom: subtree re-renders 144% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Use a data library for server cache; keep global store for cross-route client concerns.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-089 — Global vs local #89

  • Level: Advanced
  • Symptom: subtree re-renders 157% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Keep ephemeral UI local; use portals/context for cross-cutting UI chrome only.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-090 — Global vs local #90

  • Level: Advanced+
  • Symptom: subtree re-renders 170% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Colocate state in the lowest owner; lift only when a second sibling truly needs it.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-091 — Global vs local #91

  • Level: Beginner
  • Symptom: subtree re-renders 183% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Prefer URL for shareable filters/bookmarks; sync to global only when needed.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-092 — Global vs local #92

  • Level: Beginner+
  • Symptom: subtree re-renders 196% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Namespace keys per feature or use sessionStorage for drafts intentionally.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-093 — Global vs local #93

  • Level: Intermediate
  • Symptom: subtree re-renders 9% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Use a data library for server cache; keep global store for cross-route client concerns.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-094 — Global vs local #94

  • Level: Intermediate+
  • Symptom: subtree re-renders 22% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Keep ephemeral UI local; use portals/context for cross-cutting UI chrome only.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-095 — Global vs local #95

  • Level: Advanced
  • Symptom: subtree re-renders 35% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Colocate state in the lowest owner; lift only when a second sibling truly needs it.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-096 — Global vs local #96

  • Level: Advanced+
  • Symptom: subtree re-renders 48% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Prefer URL for shareable filters/bookmarks; sync to global only when needed.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-097 — Global vs local #97

  • Level: Beginner
  • Symptom: subtree re-renders 61% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Namespace keys per feature or use sessionStorage for drafts intentionally.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-098 — Global vs local #98

  • Level: Beginner+
  • Symptom: subtree re-renders 74% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Use a data library for server cache; keep global store for cross-route client concerns.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-099 — Global vs local #99

  • Level: Intermediate
  • Symptom: subtree re-renders 87% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Keep ephemeral UI local; use portals/context for cross-cutting UI chrome only.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-100 — Global vs local #100

  • Level: Intermediate+
  • Symptom: subtree re-renders 100% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Colocate state in the lowest owner; lift only when a second sibling truly needs it.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-101 — Global vs local #101

  • Level: Advanced
  • Symptom: subtree re-renders 113% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Prefer URL for shareable filters/bookmarks; sync to global only when needed.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-102 — Global vs local #102

  • Level: Advanced+
  • Symptom: subtree re-renders 126% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Namespace keys per feature or use sessionStorage for drafts intentionally.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-103 — Global vs local #103

  • Level: Beginner
  • Symptom: subtree re-renders 139% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Use a data library for server cache; keep global store for cross-route client concerns.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-104 — Global vs local #104

  • Level: Beginner+
  • Symptom: subtree re-renders 152% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Keep ephemeral UI local; use portals/context for cross-cutting UI chrome only.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-105 — Global vs local #105

  • Level: Intermediate
  • Symptom: subtree re-renders 165% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Colocate state in the lowest owner; lift only when a second sibling truly needs it.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-106 — Global vs local #106

  • Level: Intermediate+
  • Symptom: subtree re-renders 178% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Prefer URL for shareable filters/bookmarks; sync to global only when needed.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-107 — Global vs local #107

  • Level: Advanced
  • Symptom: subtree re-renders 191% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Namespace keys per feature or use sessionStorage for drafts intentionally.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-108 — Global vs local #108

  • Level: Advanced+
  • Symptom: subtree re-renders 4% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Use a data library for server cache; keep global store for cross-route client concerns.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-109 — Global vs local #109

  • Level: Beginner
  • Symptom: subtree re-renders 17% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Keep ephemeral UI local; use portals/context for cross-cutting UI chrome only.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-110 — Global vs local #110

  • Level: Beginner+
  • Symptom: subtree re-renders 30% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Colocate state in the lowest owner; lift only when a second sibling truly needs it.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-111 — Global vs local #111

  • Level: Intermediate
  • Symptom: subtree re-renders 43% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Prefer URL for shareable filters/bookmarks; sync to global only when needed.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-112 — Global vs local #112

  • Level: Intermediate+
  • Symptom: subtree re-renders 56% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Namespace keys per feature or use sessionStorage for drafts intentionally.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-113 — Global vs local #113

  • Level: Advanced
  • Symptom: subtree re-renders 69% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Use a data library for server cache; keep global store for cross-route client concerns.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-114 — Global vs local #114

  • Level: Advanced+
  • Symptom: subtree re-renders 82% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Keep ephemeral UI local; use portals/context for cross-cutting UI chrome only.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-115 — Global vs local #115

  • Level: Beginner
  • Symptom: subtree re-renders 95% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Colocate state in the lowest owner; lift only when a second sibling truly needs it.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-116 — Global vs local #116

  • Level: Beginner+
  • Symptom: subtree re-renders 108% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Prefer URL for shareable filters/bookmarks; sync to global only when needed.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-117 — Global vs local #117

  • Level: Intermediate
  • Symptom: subtree re-renders 121% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Namespace keys per feature or use sessionStorage for drafts intentionally.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-118 — Global vs local #118

  • Level: Intermediate+
  • Symptom: subtree re-renders 134% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Use a data library for server cache; keep global store for cross-route client concerns.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-119 — Global vs local #119

  • Level: Advanced
  • Symptom: subtree re-renders 147% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Keep ephemeral UI local; use portals/context for cross-cutting UI chrome only.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-120 — Global vs local #120

  • Level: Advanced+
  • Symptom: subtree re-renders 160% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Colocate state in the lowest owner; lift only when a second sibling truly needs it.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-121 — Global vs local #121

  • Level: Beginner
  • Symptom: subtree re-renders 173% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Prefer URL for shareable filters/bookmarks; sync to global only when needed.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-122 — Global vs local #122

  • Level: Beginner+
  • Symptom: subtree re-renders 186% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Namespace keys per feature or use sessionStorage for drafts intentionally.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-123 — Global vs local #123

  • Level: Intermediate
  • Symptom: subtree re-renders 199% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Use a data library for server cache; keep global store for cross-route client concerns.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-124 — Global vs local #124

  • Level: Intermediate+
  • Symptom: subtree re-renders 12% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Keep ephemeral UI local; use portals/context for cross-cutting UI chrome only.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-125 — Global vs local #125

  • Level: Advanced
  • Symptom: subtree re-renders 25% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Colocate state in the lowest owner; lift only when a second sibling truly needs it.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-126 — Global vs local #126

  • Level: Advanced+
  • Symptom: subtree re-renders 38% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Prefer URL for shareable filters/bookmarks; sync to global only when needed.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-127 — Global vs local #127

  • Level: Beginner
  • Symptom: subtree re-renders 51% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Namespace keys per feature or use sessionStorage for drafts intentionally.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-128 — Global vs local #128

  • Level: Beginner+
  • Symptom: subtree re-renders 64% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Use a data library for server cache; keep global store for cross-route client concerns.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-129 — Global vs local #129

  • Level: Intermediate
  • Symptom: subtree re-renders 77% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Keep ephemeral UI local; use portals/context for cross-cutting UI chrome only.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-130 — Global vs local #130

  • Level: Intermediate+
  • Symptom: subtree re-renders 90% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Colocate state in the lowest owner; lift only when a second sibling truly needs it.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-131 — Global vs local #131

  • Level: Advanced
  • Symptom: subtree re-renders 103% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Prefer URL for shareable filters/bookmarks; sync to global only when needed.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-132 — Global vs local #132

  • Level: Advanced+
  • Symptom: subtree re-renders 116% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Namespace keys per feature or use sessionStorage for drafts intentionally.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-133 — Global vs local #133

  • Level: Beginner
  • Symptom: subtree re-renders 129% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Use a data library for server cache; keep global store for cross-route client concerns.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-134 — Global vs local #134

  • Level: Beginner+
  • Symptom: subtree re-renders 142% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Keep ephemeral UI local; use portals/context for cross-cutting UI chrome only.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-135 — Global vs local #135

  • Level: Intermediate
  • Symptom: subtree re-renders 155% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Colocate state in the lowest owner; lift only when a second sibling truly needs it.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-136 — Global vs local #136

  • Level: Intermediate+
  • Symptom: subtree re-renders 168% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Prefer URL for shareable filters/bookmarks; sync to global only when needed.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-137 — Global vs local #137

  • Level: Advanced
  • Symptom: subtree re-renders 181% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Namespace keys per feature or use sessionStorage for drafts intentionally.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-138 — Global vs local #138

  • Level: Advanced+
  • Symptom: subtree re-renders 194% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Use a data library for server cache; keep global store for cross-route client concerns.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-139 — Global vs local #139

  • Level: Beginner
  • Symptom: subtree re-renders 7% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Keep ephemeral UI local; use portals/context for cross-cutting UI chrome only.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-140 — Global vs local #140

  • Level: Beginner+
  • Symptom: subtree re-renders 20% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Colocate state in the lowest owner; lift only when a second sibling truly needs it.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-141 — Global vs local #141

  • Level: Intermediate
  • Symptom: subtree re-renders 33% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Prefer URL for shareable filters/bookmarks; sync to global only when needed.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-142 — Global vs local #142

  • Level: Intermediate+
  • Symptom: subtree re-renders 46% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Namespace keys per feature or use sessionStorage for drafts intentionally.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-143 — Global vs local #143

  • Level: Advanced
  • Symptom: subtree re-renders 59% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Use a data library for server cache; keep global store for cross-route client concerns.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-144 — Global vs local #144

  • Level: Advanced+
  • Symptom: subtree re-renders 72% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Keep ephemeral UI local; use portals/context for cross-cutting UI chrome only.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-145 — Global vs local #145

  • Level: Beginner
  • Symptom: subtree re-renders 85% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Colocate state in the lowest owner; lift only when a second sibling truly needs it.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-146 — Global vs local #146

  • Level: Beginner+
  • Symptom: subtree re-renders 98% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Prefer URL for shareable filters/bookmarks; sync to global only when needed.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-147 — Global vs local #147

  • Level: Intermediate
  • Symptom: subtree re-renders 111% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Namespace keys per feature or use sessionStorage for drafts intentionally.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-148 — Global vs local #148

  • Level: Intermediate+
  • Symptom: subtree re-renders 124% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Use a data library for server cache; keep global store for cross-route client concerns.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-149 — Global vs local #149

  • Level: Advanced
  • Symptom: subtree re-renders 137% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Keep ephemeral UI local; use portals/context for cross-cutting UI chrome only.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-150 — Global vs local #150

  • Level: Advanced+
  • Symptom: subtree re-renders 150% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Colocate state in the lowest owner; lift only when a second sibling truly needs it.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-151 — Global vs local #151

  • Level: Beginner
  • Symptom: subtree re-renders 163% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Prefer URL for shareable filters/bookmarks; sync to global only when needed.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-152 — Global vs local #152

  • Level: Beginner+
  • Symptom: subtree re-renders 176% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Namespace keys per feature or use sessionStorage for drafts intentionally.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-153 — Global vs local #153

  • Level: Intermediate
  • Symptom: subtree re-renders 189% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Use a data library for server cache; keep global store for cross-route client concerns.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-154 — Global vs local #154

  • Level: Intermediate+
  • Symptom: subtree re-renders 2% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Keep ephemeral UI local; use portals/context for cross-cutting UI chrome only.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-155 — Global vs local #155

  • Level: Advanced
  • Symptom: subtree re-renders 15% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Colocate state in the lowest owner; lift only when a second sibling truly needs it.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-156 — Global vs local #156

  • Level: Advanced+
  • Symptom: subtree re-renders 28% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Prefer URL for shareable filters/bookmarks; sync to global only when needed.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-157 — Global vs local #157

  • Level: Beginner
  • Symptom: subtree re-renders 41% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Namespace keys per feature or use sessionStorage for drafts intentionally.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

GS3-158 — Global vs local #158

  • Level: Beginner+
  • Symptom: subtree re-renders 54% more than expected after a small unrelated UI change.
  • Architecture smell: unclear ownership of who may mutate shared state.
  • Root cause class: Global store used for UI that only one route owns.
  • Primary remediation: Use a data library for server cache; keep global store for cross-route client concerns.
  • Proof: React DevTools highlight updates; split providers and re-measure.
  • Interview one-liner: Global is for cross-cutting client truth; local is for ephemeral and private UI state.

<< 2.13 Overview