Weekdays 2h, weekends 4–5h. The sys design sprint (Jul 18+) splits around the Waymo onsite — see the blue panel below. Gap patterns folded in: backtracking, overlapping intervals, monotonic stack, prefix sum. Click any day or week header to collapse it; past days auto-collapse.
DS/AReact/UIBehaviouralSys Design (deferred)Interview day
Week 1 — Waymo, Gem, and the gap patterns
Sat July 4
4.5 h
React/UIDS/A
[UI · 3.5h] Timed Battleship-style grid build (30 min, no references) → diff against ui_cheatsheet.html panel 2. Timed FleetList rebuild (30 min) → diff against react/FleetList.jsx. Drills: useCallback+React.memo pair and hand-rolled debounce, each written from memory twice. Then one new build: expandable tree view (nested folder object, click to expand/collapse) — combines recursion with rendering, a known Waymo shape.
[DS/A · 1h] Gap tier 1: #33 Search in Rotated Sorted Array + #153 Find Minimum (~30 min each with the boundary-search template from leetcode_cheatsheet.html — #153 is the template nearly verbatim). Log both in the journal.
Sun July 5
4.5 h
React/UIDS/A
[UI · 3.5h] Full Waymo dress rehearsal, twice: two unseen components (pull from GreatFrontEnd — e.g. star rating, transfer list, tic-tac-toe), 45 min each, out loud, following ui_interview_playbook.html time budgets. Debrief 20 min after each against the scoring panel. Close with the Waymo-traps panel + CoderPad quirks (@ts-nocheck, no formatter) and one spoken run-through of the memoization talk track.
[DS/A · 1h] Skim the intervals template + one easy binary-search warm-up, untimed. #981 Time Based Key-Value Store moved to Mon 7/6 (after Waymo); #56 also lands Monday evening. Journal whatever you touch.
Mon July 6
WAYMO — React/UI
2 h study
React/UIDS/A
[UI · 1h, before] Skim only: ui_cheatsheet.html top to bottom + playbook time budgets. One 15-min finger warm-up: render a 3×3 grid with click cycling. Nothing new.
[DS/A · 1h, after] Decompress, then #981 Time Based Key-Value Store (~45 min, binary search + design, Plaid double-duty). #56 moved to Tue 7/7 — no time today. Log the Waymo interview itself in the journal — questions asked, what wobbled.
Tue July 7
2 h
DS/ATO DO · Rewrite #981 TimeMap
[DS/A · TODO · Binary search cleanup] Rewrite #981 Time Based Key-Value Storeget using a single result candidate variable and returning after the loop, not inside it. Goal: one exit point instead of the four early-returns in the working version. Boundary-search template with high = mid - 1, so no mid-bias trap. Re-derive from scratch, don't copy.
[DS/A · 2h]#56 Merge Intervals (carried from Mon, ~30 min) → #57 Insert Interval (completes the intervals pair, ~30 min), then heap gap day: #215 Kth Largest (size-k min-heap, state the O(n log k) vs sort comparison out loud) + #621 Task Scheduler, ~45 min each. These double as Gem warm-up — narrate complexity the whole way.
Wed July 8
GEM — DS/A
2 h study
DS/ATO DO · Task Scheduler
[Before Gem · 45 min] Template skim: binary search, intervals, heap, BFS/DFS from leetcode_cheatsheet.html. Warm-up: #496 Next Greater Element I from memory (carried from Tue — re-fire the "pop while stack top is smaller" reflex). One easy problem untimed.
Treat the interview as a live mock for Plaid/Retool/Google — full playbook discipline, no shortcuts.
[After · 1. journal] Journal the Gem questions in detail while fresh.
[After · 2. fresh material] Intervals pair (greedy-by-end template): #435 Non-overlapping Intervals (sort by end, greedy keep) then #253 Meeting Rooms II (min rooms via heap of end times). Skim the "sort by start vs end" split in leetcode_cheatsheet.html first. #452 Burst Balloons is #435's twin — recognize, don't grind.
[After · 3. today's focus]#621 Task Scheduler from scratch with the cooldown-queue approach (heap of counts + deque of ready-times), no lastSeen bookkeeping. State the runtime (O(L log D)) and the O(1) formula follow-up aloud. Notes in learning_journal.html (Jul 7) — build first, check after.
Thu July 9
30 min
DS/ADONE · LRU Cache
[DS/A · 30 min · done]#146 LRU Cache — built the dict + doubly-linked-list version from scratch (dummy head/tail, reuse the node instead of reallocating). Solved from Socratic hints; full write-up in learning_journal.html (Jul 9).
Fri July 10
2 h
BehaviouralTO DO · Deep dive day 1
[Behavioural/Project · 2h] Plaid project deep dive, day 1 — write it down: pick the project, then document architecture (draw it), the 3 hardest technical decisions and their trade-offs, your specific role ("I", not "we"), measurable impact, what failed and what you'd redo. Prepare for the standard probes: "why not X instead?", "what broke in production?", "how did you test it?"
Week 2 — Plaid, Retool, Google
Sat July 11
3.5 h
BehaviouralDS/ATO DO · Deep dive day 2 + Plaid Coupons
[Behavioural/Project · 1.5h] Deep dive day 2 — deliver it out loud, twice: 5-minute overview version and 15-minute walkthrough version. Record yourself once. Refine the doc where you stumbled.
[DS/A · 2h · moved from Fri] The Plaid Coupons question — this is a DS/A optimization problem, not a service/design build. Items have price + category; coupons have category, type (amount | percent), value. Phase 1 — single coupon: per item apply at most one coupon. amount → price − value; percent → price × (1 − value/100). It's simple simulation — the interviewer scores you on the edge cases: clamp percent to [0,100], clamp final price to ≥ 0, discount exceeding price → 0. (Variant seen: coupon must have exactly one of amount/percent or it's invalid → throw; optional minQuantity / minPurchase gates that can be null.) Phase 2 — multiple coupons: each coupon single-use, each item ≤ one coupon → allocate to minimize total payment. Key insight: it decomposes by category. Within a category, convert each coupon to its saving (amount = min(value, price); percent = price × value/100, monotonic in price), then assign bigger savings to larger prices (rearrangement inequality). Target O(n log n) via group-by-category + sort.
Close with the two extension discussions the interviewer pushes: same category appearing in multiple coupons, and a coupon reusable across items. Log the greedy argument in learning_journal.html.
Sun July 12
deep dive
Behavioural
[Behavioural/Project] Plaid deep dive ran long and spilled into Sunday too — extra reps delivering it out loud, doc refinement. That's what pushed the DS/A content out: backtracking, tries, Trapping Rain Water, DP, monotonic stack, and prefix sum all moved to Mon 7/13 and Tue 7/14 (see below).
Mon July 13
PLAID — DS/A + Project Deep Dive
3.25 h study
BehaviouralDS/A
[1h, before] Deliver the deep dive out loud once (5-min version). Skim coupons solution + intervals template. Nothing new.
[DS/A · 1h, after] Journal the Plaid questions immediately. Then Retool prep: one timed medium re-solve from your solid list (#3 or #739) to stay loose.
[DS/A · 30 min]#560 Subarray Sum Equals K (prefix-sum + hashmap of counts), then #724 Find Pivot Index cold. Invariant: prefix[j] − prefix[i] = sum of the window.
[DS/A · 45 min]#42 Trapping Rain Water (Google) — two-pointer version: move inward from the shorter side, water = min(maxLeft, maxRight) − height. Say why the shorter side is safe to advance.
Tue July 14
RETOOL — DS/A
3 h 20 min study
DS/ABehavioural
[DS/A · 45 min, before] Template skim + one easy warm-up. Review yesterday's Plaid journal notes — patterns repeat across companies in the same week.
[Behavioural · 20 min, after] Journal the Retool questions.
[DS/A · 45 min]#131 Palindrome Partitioning (Google) — right after #46 while the pattern's warm. Try every palindromic prefix from each start index, recurse on the rest, undo. Optionally precompute isPalindrome[i][j] to skip re-checking.
[DS/A · 45 min]#208 Implement Trie (Google) from scratch, twice — node = children dict + is_end; insert/search/startsWith walk char by char. If it lands fast, glance at #212 Word Search II as the boss version.
Cut today: DP (House Robber, Coin Change) and monotonic stack (#503, #84) — not on Google's list, back to the gap-pattern reserve.
Wed July 15
2 h 40 min
BehaviouralDS/ATO DO · STAR day 1 (priority) + Scale (trimmed)
[Behavioural · 2h · priority] Google behavioural, day 1 — start by listing your 5 STAR stories (impact, disagreement, failure, simplifying complexity, ownership beyond scope) and bulleting the Situation/Task for each (moved from Tue), then write all 5 out in full: quantified results, "I" not "we", 90-second spoken length. Map each story to the Googliness rubric (collaboration, ambiguity, ownership). Prepare "why Google" and "tell me about yourself" in 3 sentences each. This lands first, protect it — Google is Friday.
[DS/A · 40 min] Scale Task Prioritizer, talked through not built: Phase 1 priority queue (add_task/next_task/complete_task via max-heap, negate priority + counter tiebreak), Phase 2 dependencies via Kahn's-on-a-heap (indegree tracking, priority queue of zero-indegree tasks). Raise cycle detection unprompted. Skips the #1834 drill — doubles as a light touch on #210 (no full drill before Friday).
No time today for #4 / #298 — moved to Thu 7/16.
Thu July 16
SCALE.AI — DS/A · 1–2pm PT
3 h 15 min study
DS/ABehaviouralTO DO · STAR day 2
[Morning · Behavioural, 45 min] STAR day 2 moved earlier so the afternoon is clear for the live round: all 5 stories out loud, timed to 90 sec, once more for the two weakest, one cold follow-up each. Bank it before noon.
[Before 1pm · DS/A warm-up, 20 min] Scale coding round with Dave Guo (SWE). Template skim (binary search, intervals, heap) + one easy untimed problem to get loose. Nothing new. Playbook discipline: brute-force-then-optimize, narrate complexity.
[After · 45 min] Journal the Scale questions immediately while fresh (learning_journal.html).
[DS/A · 45 min · moved from Wed]#4 Median of Two Sorted Arrays (Google) — binary search the smaller array for the partition where left halves ≤ right halves. Searching for a cut point, not a value; handle odd/even length as two cases.
[DS/A · 30 min · moved from Wed]#298 Binary Tree Longest Consecutive Sequence (Google) — one DFS pass carrying parent value + run length; if node.val == parent.val + 1 extend, else reset to 1, track a global max.
Fri July 17
GOOGLE — DS/A + Behavioural
~1 h, morning only
DS/ABehavioural
[Before] One pass through STAR stories out loud. Skim the two templates that feel shakiest. One 10-minute easy warm-up. Sleep was last night's prep — trust the two weeks.
[After] Journal it, close the laptop. Systems design sprint (systems_design_study_guide.html) starts July 18 — but note it splits around the Waymo onsite (below).
Week 3 — Sys design (part 1) + Waymo onsite prep
How the back half works — read first
The sys design sprint serves your August onsites (Plaid, Retool, Google), which include a design round. Waymo's onsite does not — it's coding + behavioural only.
So the sprint splits in two: Part 1 (Jul 18–22) → pause for Waymo prep + onsite (Jul 23–31) → Part 2 (Aug 1–10). Pausing sys design costs nothing because your first design onsite isn't until ~Aug 4.
Waymo onsite is confirmed: Tue Jul 28 (2 coding rounds, 1:30–3:15pm PT) + Wed Jul 29 (behavioural + coding, 3:00–4:45pm PT). Be fully ready by Jul 27. It's 2 days, not 4 — Jul 30–31 are free for early sys design Part 2 if you want them, though oncall runs through Aug 3.
Sat July 18
4 h
Sys Design
[Sys Design · 1h · read + finish]GreatFrontEnd Front End System Design Playbook — all 6 articles (~51 min): Introduction, Types of Questions, the RADIO Framework, Evaluation Criteria, Common Mistakes, Cheatsheet. Plaid's design round is Front End Coding/Architecture-flavored, so this framework leads from here, not generic backend sys design.
[Sys Design · 3h] Sprint kickoff (for August onsites). Week-1 of systems_design_study_guide.html: core building blocks (load balancer, cache, DB, queue). Then run the RADIO framework you just read on one end-to-end design out loud — free playbook question: News Feed.
Sun July 19
4 h
Sys DesignReact
[Sys Design · 3.5h] Continue Week-1: caching strategies, DB indexing/sharding, consistency vs availability. Second timed design out loud, frontend-specific: Autocomplete (free) — debouncing, caching, race conditions, exactly Plaid-round territory.
[React · 45 min · Waymo must-do build 1 of 4]Countdown timer with a digital input field and start / stop / reset. Drills your setState-placement miss directly — setInterval in a useEffect with a proper cleanup, functional setState updater so you don't close over stale state, and parsing/validating the input. Time it, ~30–40 min.
[Sys Design · FE · 1.5h]Pinterest and Rich Text Editor — premium solutions, ~45 min each: masonry layout + virtualization, then a content-editable architecture (selection state, undo/redo).
[Sys Design · FE · 1.5h]Photo Sharing (Instagram) and Video Conferencing (Zoom) — premium solutions, ~45 min each. Photo Sharing's feed pagination is close to Waymo's Fleet Monitoring shape; Video Conferencing drills the real-time/pub-sub content from this morning.
Wed July 22
4.5 h
Sys DesignOOO
[Sys Design · 3h] Synthesis. Re-do your two weakest designs cold. Write a one-page personal design template you can run in any round.
[Sys Design · FE · 1.5h]Google Docs and Design / Drawing Tool (Figma, Canva) — premium solutions, ~45 min each: OT/CRDT-flavored collaboration, then canvas rendering + layers. Both hard-rated, good stress test. Part 1 ends here — pivot to Waymo tomorrow.
Thu July 23
2 h
ReactWaymo pivot
[Waymo React · day 1] Stop sys design — onsite is 5 days out. Re-drill the onsite shapes: setState placement (your miss from the 7/6 technical — see js-learning-journal.html), the memoization talk track, and one longer timed build (45+ min, GreatFrontEnd). Onsites run longer than screens — practice sustaining focus.
Fri July 24
2 h
ReactBehaviouralWaymo pivot
[Waymo React · 1h · Waymo must-do build 2 of 4]Download / progress bar — reported Waymo question (1point3acres): a bar that reflects a given point in time and updates as later time points arrive. Practice both GreatFrontEnd versions: Progress Bars then Progress Bars II (queue/concurrency-limited). Focus on driving width from a time value and handling a stream of updates without stale state. Diff against the playbook time budgets.
[Waymo behavioural · 1h] Re-tailor your 5 Google STAR stories to Waymo's frame — safety culture, the AV mission, collaboration under ambiguity. Draft a real "why Waymo" in 3 sentences. Reuse the stories, re-aim them.
Week 4 — Waymo onsite (Jul 28–29)
Sat July 25
3.5 h
ReactBehavioural
[Waymo dress rehearsal] Mock the loop out loud: the 45-min React build below + a full behavioural pass (5 stories Waymo-framed + "why Waymo"). Debrief against ui_interview_playbook.html scoring. Record one build and watch it back.
[React · 45 min · Waymo must-do build 3 of 4]Music player — play/pause/skip, a seekable progress bar, track list. The biggest build of the set: combines the timer's interval logic, the progress bar's time-driven width, and list rendering. Good rehearsal-length stress test. Time it strictly.
Sun July 26
3 h
ReactBehavioural
[Waymo dress rehearsal · day 2] Second mock, hit the two weakest spots only. Skim ui_cheatsheet.html + CoderPad quirks (@ts-nocheck, no formatter). Keep it light — you're ready, don't cram new material.
[React · 30 min · Waymo must-do build 4 of 4]Battleship revisit — rebuild the grid from memory (you first did it 7/4), cold and quick. Grid rendering + click state is a known Waymo shape; this is a confidence refresher, not new material. Diff against your 7/4 version.
Mon July 27
1 h
ReactOncall starts · logistics
[Waymo · light review + logistics] Oncall starts today. Confirm interview-day pager coverage / swap for both booked Waymo windows (Jul 28, 1:30–3:15pm PT; Jul 29, 3:00–4:45pm PT) — this is real prep, not optional. 30-min React finger warm-up. Then rest.
Tue July 28
WAYMO — Frontend/Fullstack Coding ×2
1:30–3:15pm PT
React/UI
[1:30–2:15pm] Brian Ferrell — Frontend/Fullstack Coding (JS/TS, Angular, React). CoderPad.
Gap flagged: both rounds list Angular explicitly — typescript-prep-plan.html is React-only right now. Confirm with the recruiter whether Angular is truly in scope; if so, budget time before 7/28 for components, directives, services, RxJS basics.
Before: 15-min warm-up only, nothing new, trust the prep. After: journal both rounds in js-learning-journal.html, log in interview_history.html. Round 2 tomorrow — rest.
Oncall overlap: confirm pager coverage for 1:30–3:15pm.
Before: one pass through the 5 STAR stories, Waymo-framed. Skim CoderPad quirks + shakiest template.
After: journal both in js-learning-journal.html, log in interview_history.html. Loop complete — rest.
Oncall overlap: confirm pager coverage for 3:00–4:45pm.
August — onsite loops
Aug 1–3
flex
Sys DesignOncall ends 8/3
[Sys Design · part 2 resumes] Back to the sprint for the August onsites. Week-2 of the study guide — deeper designs, trade-off drills. Keep it lighter Aug 1–2 while oncall is live; ramp up once it ends Aug 3.
Tue Aug 4
PLAID onsite (confirmed)
loop
DS/ASys DesignBehaviouralOOO
[OOO] Full day off — no work competing for attention.
[Plaid onsite — confirmed, 10:30am–3:45pm PT] 10:30–11:30 Behavioural. 12:00–1:00 Architecture / System Design. 1:30–2:00 final-round EM chat. 2:30–3:30 Front-end coding. 3:30–3:45 Recruiter check-in. Before: skim STAR stories + the RADIO framework + ui_cheatsheet.html. Journal it the same day, log the round in interview_history.html.
Wed Aug 5
RETOOL onsite (confirmed)
loop
Sys DesignBehaviouralOOO
[OOO] Full day off.
[Retool onsite — confirmed, 3:00–4:45pm PT] 3:00–3:45 Project Deep Dive. 4:00–4:45 Engineering Expectations & Operating Principles. Before: skim your deep-dive doc + STAR stories. Journal it the same day, log the round in interview_history.html. Newly added — wasn't logged in this schedule before, pulled from your calendar.
Thu Aug 6
4.5 h
Sys DesignOOO
[Sys Design · 3h] Recovery day, but not fully off — one backend-leaning design end to end (whatever's least drilled), untimed.
[Sys Design · FE · 1.5h]Chat App (Messenger) — full-stack-leaning but frontend-implemented, a good synthesis of the playbook so far.
Fri Aug 7
4 h
Sys DesignOOO
[Sys Design · 2.5h] Re-run your two weakest designs cold, both flavors (backend + FE).
[Sys Design · FE · 1.5h]Poll Widget — quick, self-contained, good confidence rep before the week resets.
Heads up: San Mateo Dental Arts appointment 1:10–2:10pm PT today — plan the two blocks around it.
Aug 8–10
flex
Sys DesignBehavioural
[Sys design + behavioural, general] Final sys design push + re-do weakest designs cold. Re-run the 5 STAR stories. Not tied to a specific onsite date yet — Retool and Google haven't been scheduled.
Retool + Google onsites — pending
DS/ASys DesignBehavioural
Not yet scheduled. Removed the earlier guessed placeholder dates (Retool ~Aug 6, Google Aug 11–12) since neither was actually confirmed by a recruiter. Once real dates land, they'll get their own dated block here with the same detail as the Plaid onsite above.
Overflow rules — if a day ends early
Gap-pattern reserve, only if a block ends early and the core work is done: backtracking #22 Generate Parentheses · intervals #435 Non-overlapping Intervals · monotonic stack #84 Largest Rectangle · prefix sum #437 Path Sum III (prefix sum on a tree — a real Google shape). Pick from the pattern that felt shakiest that day.
July 15–16: extra time goes to behavioural polish, not more LeetCode.
Systems design only if a weekend block finishes with 1h+ spare: read one Week-1 day of systems_design_study_guide.html, nothing more.
Slipped day? Cut in this order: Gem prep → Retool company research → heap second problem. Never cut: Coupons (7/11), deep dive (7/10–11), STAR days (7/15–16).
Screens Jul 6–17 · sys design part 1 (Jul 18–22) · Waymo prep + onsite (Jul 28–29) · sys design part 2 + Plaid onsite (Aug 4, confirmed). Retool and Google onsites pending scheduling, no dates yet. Log every session in learning_journal.html / js-learning-journal.html.