# Google DE Coach Tracker — Dennis

> **Coach mode:** You study; I (Grok) plan, check answers, and advance you.
> **Target:** Google Senior Data Engineer (Merchant Data Science) — Zürich / Mountain View  
> **Status:** Assessment passed (2026-06-20); waiting for recruiter. Prep so a sudden loop doesn’t catch you cold.  
> **Baseline assumption:** Rusty in everything. Start at the beginning; **skip** when the skip-test is green.  
> **Related files:** `interview_prep_brief.md` (loop map) · `star_stories.md` (behavioral)

---

## How we work

1. You do a block (below), tick the boxes, note date + confidence (1–5).
2. Tell me: *“coach: finished 0.1”* or paste a stuck problem / SQL answer.
3. I verify, correct, and open the next block (or force a **repeat set**).
4. Prefer **free** resources only (listed with URLs).

**Cadence (default while waiting):** ~45–75 min/day, 5–6 days/week.  
If energy is low: **SQL only** that day (still wins).

**Skip rule:** For any skill block, if you pass the **Skip test** in one sitting, mark **SKIPPED (confident)** and jump to the next block. Don’t skip whole tracks without a skip-test.

**Repeat rule:** Anything marked confidence ≤2 goes into **§ Weekly Repeat Queue** and gets re-done within 3–7 days.

---

## Progress dashboard

| Track | Status | Started | Last session | Confidence (1–5) | Notes |
|-------|--------|---------|--------------|------------------|-------|
| 0 Foundations | ⬜ not started | | | | rusty start |
| 1 SQL core | ⬜ | | | | highest leverage with coding |
| 2 SQL interview patterns | ⬜ | | | | |
| 3 Python coding patterns | ⬜ | | | | brief says HIGH weight |
| 4 Data modeling | ⬜ | | | | your day job — refresh |
| 5 Pipeline / system design | ⬜ | | | | your strength — structure it |
| 6 Behavioral / STAR | ⬜ | | | | stories already drafted |
| 7 Mock loop | ⬜ | | | | only after 1–5 green |

**Overall stage:** `Phase 0 — bootstrap`  
**Next action for Dennis:** Open **0.1** (Big-O + complexity intuition, 20–30 min).

---

## Phase 0 — Foundations (rusty bootstrap)

Goal: shared language so later SQL/Python blocks don’t thrash.

### 0.1 Big-O & how interviews think
- [ ] **Resource (read, free):** [Big-O Cheat Sheet](https://www.bigocheatsheet.com/) — scan array/hash/sort rows only  
- [ ] **Resource (video, free, ~10 min):** [Big O Notation — freeCodeCamp (short intro)](https://www.youtube.com/watch?v=D6xkbGLQesk)  
- [ ] Write from memory: O(1), O(n), O(n log n), O(n²) with one example each  

**Skip test:** Explain out loud why a hash map lookup is average O(1) and when it degrades.  
**Done:** date ____  confidence _/5  

### 0.2 Python syntax refresh (no algorithms yet)
- [ ] **Resource (interactive, free):** [Learn Python — freeCodeCamp interactive (or skimmable)](https://www.freecodecamp.org/news/learning-python-from-zero-to-hero-120ea540b567/) — only sections: types, lists, dicts, loops, functions  
- [ ] **Faster alternative (video, free, ~1h if rusty):** [Python for Beginners — freeCodeCamp full course](https://www.youtube.com/watch?v=eWRfhZUzrAc) — watch at 1.5×, skip UI fluff; stop after functions/dicts  
- [ ] In a local `.py` file, write without looking up: list comp, dict count frequencies, `sorted(..., key=)`, set membership  

**Skip test:** Write a function that returns the most common word in a list of strings (use a dict). Time yourself ≤10 min.  
**Done:** date ____  confidence _/5  

### 0.3 SQL mental model (what a query does)
- [ ] **Resource (free, best first SQL text):** [Mode SQL Tutorial — bare essentials through aggregations](https://mode.com/sql-tutorial/sql-business-analytics-training/)  
  Start: [Basic SQL](https://mode.com/sql-tutorial/sql-select-statement/) → WHERE → JOINs intro → aggregations  
- [ ] **Hands-on twin (free, browser):** [SQLBolt](https://sqlbolt.com/) — Lessons 1–7  

**Skip test:** Write a query with `FROM`, `WHERE`, `GROUP BY`, `HAVING`, `ORDER BY` and explain order of execution (FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY).  
**Done:** date ____  confidence _/5  

**Phase 0 exit:** All three confidence ≥3 **or** skip-tests passed. Then → Phase 1.

---

## Phase 1 — SQL core (daily driver)

Goal: fluent on joins, nulls, aggregations, CTEs — before windows.

### 1.1 Joins & nulls
- [ ] **Resource:** [Mode — SQL JOINs](https://mode.com/sql-tutorial/sql-joins/)  
- [ ] **Drill:** [SQLBolt lessons 6–12](https://sqlbolt.com/lesson/select_queries_with_joins)  
- [ ] Draw INNER / LEFT / FULL and one business example each (merchants, orders, null country)  

**Skip test:** Given `orders` and `customers`, list customers with **no** orders (anti-join pattern).  
**Done:** date ____  confidence _/5  

### 1.2 GROUP BY, HAVING, CASE
- [ ] **Resource:** [Mode — Aggregations](https://mode.com/sql-tutorial/sql-aggregate-functions/)  
- [ ] **Resource:** [Mode — CASE](https://mode.com/sql-tutorial/sql-case/)  
- [ ] Solve **5** problems: [LeetCode Database — Easy](https://leetcode.com/problemset/database/?difficulty=EASY)  

**Done:** date ____  confidence _/5  

### 1.3 CTEs & subqueries
- [ ] **Resource:** [Mode — Subqueries & CTEs](https://mode.com/sql-tutorial/sql-sub-queries/)  
- [ ] Rewrite one nested subquery as a CTE (any LeetCode SQL you’ve done)  

**Skip test:** Explain when a CTE is clearer than a subquery; write a 2-CTE query.  
**Done:** date ____  confidence _/5  

**Phase 1 exit:** Can write join + aggregate + CTE without syntax panic. → Phase 2.

---

## Phase 2 — SQL interview patterns (Google-relevant)

Goal: windows, ranking, gaps, top-N — what DE screens love.

### 2.1 Window functions (core)
- [ ] **Resource (best free deep dive):** [Mode — Window Functions](https://mode.com/sql-tutorial/sql-window-functions/)  
- [ ] **Resource (second explanation):** [DataLemur — SQL Window Functions Guide](https://datalemur.com/blog/learn-sql-window-functions)  
- [ ] Master by hand: `ROW_NUMBER`, `RANK`, `DENSE_RANK`, `LAG`/`LEAD`, `SUM() OVER`, `PARTITION BY`  

**Skip test:** For each employee, salary rank within department + running total of salary (one query).  
**Done:** date ____  confidence _/5  

### 2.2 Pattern drill set (do in order)
Use **free** sites; log problem IDs:

| # | Pattern | Resource | ID / link | ✓ | Date | Conf |
|---|---------|----------|-----------|---|------|------|
| 1 | Top-N per group | [DataLemur free SQL](https://datalemur.com/questions?category=SQL) | pick “top” / ranking | ⬜ | | |
| 2 | Dedup / latest row | LeetCode SQL | e.g. search “duplicate emails” / “latest” | ⬜ | | |
| 3 | Gaps & islands / consecutive | DataLemur or LeetCode | consecutive logins / dates | ⬜ | | |
| 4 | Self-join | LeetCode SQL | employees vs manager style | ⬜ | | |
| 5 | Multi-join analytics | [StrataScratch free](https://www.stratascratch.com/) (filter Free) | 1 medium | ⬜ | | |

**Bulk practice hubs (bookmark):**
- [LeetCode Database study plan / problemset](https://leetcode.com/problemset/database/)  
- [DataLemur SQL interview questions](https://datalemur.com/questions?category=SQL) — free tier enough  
- [Select Star SQL](https://selectstarsql.com/) — narrative + practice, free  

**Phase 2 volume target:** **20** SQL problems total (Easy+Medium), ≥8 with windows.  
Count so far: **0 / 20**

**Phase 2 exit:** 20 logged + window functions confidence ≥3. → Phase 3 (or parallel 3 if SQL is already warm).

---

## Phase 3 — Python coding (interview shape)

> From `interview_prep_brief.md`: coding is the gap furthest from daily work.  
> Target: **Easy → Medium**, narrate + Big-O. **Not** Hard DP grind.

### 3.1 Platform setup
- [ ] Account: [LeetCode](https://leetcode.com/) (free)  
- [ ] Language: **Python3** only  
- [ ] Habit: speak approach **before** typing; state time/space at end  

### 3.2 Pattern ladder (free LeetCode)

Do **in this order**. Mark when green (solved without solution, or with ≤1 peek then re-solved next day).

| # | Pattern | Starter problems (free) | ✓ |
|---|---------|-------------------------|---|
| 1 | Arrays / two pointers | [Two Sum](https://leetcode.com/problems/two-sum/) · [Valid Palindrome](https://leetcode.com/problems/valid-palindrome/) · [Container With Most Water](https://leetcode.com/problems/container-with-most-water/) | ⬜ |
| 2 | Sliding window | [Best Time to Buy/Sell Stock](https://leetcode.com/problems/best-time-to-buy-and-sell-stock/) · [Longest Substring Without Repeating](https://leetcode.com/problems/longest-substring-without-repeating-characters/) | ⬜ |
| 3 | Hash maps | [Group Anagrams](https://leetcode.com/problems/group-anagrams/) · [Top K Frequent Elements](https://leetcode.com/problems/top-k-frequent-elements/) | ⬜ |
| 4 | Stack | [Valid Parentheses](https://leetcode.com/problems/valid-parentheses/) · [Daily Temperatures](https://leetcode.com/problems/daily-temperatures/) | ⬜ |
| 5 | Binary search | [Binary Search](https://leetcode.com/problems/binary-search/) · [Search Insert Position](https://leetcode.com/problems/search-insert-position/) | ⬜ |
| 6 | BFS/DFS trees | [Maximum Depth of Binary Tree](https://leetcode.com/problems/maximum-depth-of-binary-tree/) · [Invert Binary Tree](https://leetcode.com/problems/invert-binary-tree/) · [Binary Tree Level Order](https://leetcode.com/problems/binary-tree-level-order-traversal/) | ⬜ |
| 7 | Heap / top-K | [Kth Largest Element in Array](https://leetcode.com/problems/kth-largest-element-in-an-array/) | ⬜ |
| 8 | Intervals | [Merge Intervals](https://leetcode.com/problems/merge-intervals/) | ⬜ |

**Teaching video (free, optional when stuck on a pattern):**  
[NeetCode.io](https://neetcode.io/) — free problem list + YouTube explanations (search problem name + “NeetCode”).  
Roadmap overview: [NeetCode roadmap](https://neetcode.io/roadmap)

**Volume target:** **40** Easy/Medium total (brief said 40–60 Mediums long-run; start with 40 mixed).  
Count so far: **0 / 40**

**Skip test for a pattern:** Solve 2 new problems of that pattern in <25 min each with narration. Then skip remaining starters for that pattern.

**Phase 3 exit:** ≥25 solved + comfortable narrating Two Sum / sliding window / BFS. → keep light maintenance while doing 4–6.

---

## Phase 4 — Data modeling (refresh, not learn from zero)

### 4.1 Dimensional modeling basics
- [ ] **Resource (free article, classic):** [Kimball Group — Dimensional Modeling Techniques (overview PDF/notes)](https://www.kimballgroup.com/data-warehouse-business-intelligence-resources/kimball-techniques/dimensional-modeling-techniques/)  
- [ ] **Resource (free, readable):** [Star Schema vs Snowflake (IBM overview)](https://www.ibm.com/think/topics/star-schema)  
- [ ] Define in your own words: **grain**, **fact**, **dimension**, **surrogate key**, **SCD Type 1 vs 2**  

**Skip test:** Model `merchant_orders` for analytics (facts + ≥3 dims + grain sentence + one SCD2 example).  
**Done:** date ____  confidence _/5  

### 4.2 Tie to YOUR work (no fabrication)
- [ ] Map Swisscom Fulfillment (Oracle → Kafka → Teradata) onto a star: what is the fact grain?  
- [ ] Map Iceberg lakehouse (SW-1): how does partitioning relate to query grain?  
- [ ] One sentence: data product vs raw table (SW-7) — **scoped** ownership language  

**Done:** date ____  confidence _/5  

---

## Phase 5 — Pipeline / system design

### 5.1 Structure template (memorize)
Practice every design with this spine (from your brief):

1. Requirements / SLAs / consumers  
2. Ingestion (batch + stream)  
3. Storage & table format  
4. Transform / model  
5. Quality, monitoring, on-call  
6. Serving (BI / ML)  
7. Trade-offs (cost, latency, consistency)  

- [ ] **Resource (free video series):** [Seattle Data Guy — data engineering system design (YouTube search)](https://www.youtube.com/results?search_query=seattle+data+guy+system+design+data+engineer) — watch 1 full design walkthrough  
- [ ] **Resource (free concepts):** [ByteByteGo YouTube](https://www.youtube.com/@ByteByteGo) — pick **one** video on message queues or batch vs stream  
- [ ] **Optional free text:** [The Data Engineering Cookbook (GitHub PDF)](https://github.com/andkret/Cookbook) — skim architecture chapters only  

### 5.2 Design drills (talk out loud, 25–35 min each)

| # | Prompt | ✓ | Date | Notes |
|---|--------|---|------|-------|
| 1 | Merchant clickstream → daily metrics tables for analysts | ⬜ | | use Kafka + lakehouse language you own |
| 2 | Near-real-time fraud features + daily warehouse truth | ⬜ | | batch + stream coexistence |
| 3 | Migrate legacy warehouse domain to cloud tables (your SW-1 shape) | ⬜ | | sequencing, dual-run, rollback |

**Accuracy:** “governed data products **within** Swisscom’s Data Mesh” — never “I built the Mesh.”

**Phase 5 exit:** Can run drill #1 cleanly with trade-offs without notes.

---

## Phase 6 — Behavioral (stories already exist)

- [ ] Read full: `star_stories.md`  
- [ ] For each story: speak out loud **once** timed (2–3 min)  
- [ ] Record (phone voice memo) **Story 1 (ownership)** and self-critique  

| Story | Maps to | Spoken ✓ | Date | Conf |
|-------|---------|----------|------|------|
| 1 Ownership / pipelines | autonomy | ⬜ | | |
| 2 Migration | judgment | ⬜ | | |
| *(others in star_stories.md)* | | ⬜ | | |

**Google’s own free guide:** [How we hire](https://careers.google.com/how-we-hire/)  
**Googleyness cues:** [Google interview tips](https://careers.google.com/how-we-hire/interview/)

---

## Phase 7 — Mock loop (later)

Only after Phases 1–3 are ≥3 confidence:

| Mock | Format | ✓ |
|------|--------|---|
| SQL timed 30 min | 2 mediums, no AI | ⬜ |
| Python timed 45 min | 1 easy + 1 medium, narrate | ⬜ |
| Design 35 min | Drill #1 with coach | ⬜ |
| Behavioral 30 min | 2 STARs with coach | ⬜ |

---

## Weekly Repeat Queue

Anything confidence ≤2 or failed cold. Re-do within a week.

| Item | Added | Next due | Done |
|------|-------|----------|------|
| *(example)* Window functions LAG/LEAD | | | |

**Standing weekly minimum (even after advanced):**
- [ ] 3× SQL mediums  
- [ ] 3× Python mediums (or 2 medium + 1 review)  
- [ ] 1× design spine spoken once  
- [ ] 1× STAR spoken once  

---

## Session log

| Date | Block | Minutes | What went well | Stuck / wrong | Next |
|------|-------|---------|----------------|---------------|------|
| 2026-07-19 | — | — | Tracker created; baseline = rusty | — | Start **0.1** |

---

## Coach notes (for Grok)

- Prefer free URLs only; if a site walls free tier, switch to LeetCode/SQLBolt/Mode.  
- Enforce scope discipline in design/behavioral answers (big-corp ownership).  
- Don’t let Dennis skip to Hard LeetCode to self-punish; SQL + Medium Python + design > ego Hard.  
- When he says “coach: …”, update this file’s checkboxes/dashboard if he reports results.

---

## Quick start (today / tomorrow)

1. **0.1** Big-O cheat sheet + short video (30 min).  
2. **0.3** SQLBolt lessons 1–7 (45 min) *or* Mode basic SQL if you prefer reading.  
3. Message coach: *“finished 0.1 + 0.3, confidence X”* → unlock 1.x or force skip-test.

**Primary bookmarks bar:**
1. https://sqlbolt.com/  
2. https://mode.com/sql-tutorial/  
3. https://leetcode.com/problemset/database/  
4. https://leetcode.com/problemset/all/ (filter Python)  
5. https://datalemur.com/questions?category=SQL  
6. https://neetcode.io/roadmap  
7. https://careers.google.com/how-we-hire/interview/  
