feat: rebuild evidence-first application workflow
This commit is contained in:
@@ -0,0 +1,306 @@
|
||||
# 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/
|
||||
Reference in New Issue
Block a user