feat: rebuild evidence-first application workflow

This commit is contained in:
2026-07-27 17:56:15 +02:00
parent c24892f381
commit fe5f24704f
57 changed files with 3815 additions and 3555 deletions
@@ -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 doesnt 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 (15).
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):** ~4575 min/day, 56 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. Dont skip whole tracks without a skip-test.
**Repeat rule:** Anything marked confidence ≤2 goes into **§ Weekly Repeat Queue** and gets re-done within 37 days.
---
## Progress dashboard
| Track | Status | Started | Last session | Confidence (15) | 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 15 green |
**Overall stage:** `Phase 0 — bootstrap`
**Next action for Dennis:** Open **0.1** (Big-O + complexity intuition, 2030 min).
---
## Phase 0 — Foundations (rusty bootstrap)
Goal: shared language so later SQL/Python blocks dont 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 17
**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 612](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 youve 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 4060 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 46.
---
## 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, 2535 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** Swisscoms 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 (23 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)* | | ⬜ | | |
**Googles 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 13 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).
- Dont let Dennis skip to Hard LeetCode to self-punish; SQL + Medium Python + design > ego Hard.
- When he says “coach: …”, update this files 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 17 (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/
@@ -119,17 +119,15 @@ FC-1 (Jenkins CI/CD from zero + SCEDAS), FC-3 (Express.js/Docker microservices)
- Critique: CURRENT — **85.5/100** (2026-06-15; baseline 83.0 pre-edit). Strong Tier-1 DE fit; SW-7 self-serve data products ≈ team charter verbatim; honest GCP-tool bridges; AI scan clean; CL 1pp. **Tier-1 + both Tier-2 fixes APPLIED & re-verified:** (1) migration claim re-scoped in resume B2 + CL P2 (Scope-Discipline error cleared in both docs); (2) B4 now reads "on time and in scope" (project-delivery preferred qual); (3) B5 "distributed computing"→"distributed data processing". Resume 2pp / CL 1pp clean compile, B2 216/B4 190/B5 206 chars (≤218). **SENT 2026-06-15.** Hard ceiling ~87 (no GCP/BigQuery-by-name, no marketplace domain — not closable). Open item at recruiter stage: clarify L4/L5 + confirm comp clears 180k+.
- **ADVANCED 2026-06-17 — invited to 30-min Google Hiring Assessment.** Resume cleared the recruiter screen. Next action: complete the online assessment within the deadline in the invite email. Confirm exact format from the email (Google Hiring Assessment is typically online + timed; for DE roles expect SQL + possibly Python/data-modeling and/or situational-judgment questions — verify, do not assume). Prep focus: SQL (window functions, joins, aggregation), dimensional modeling, basic Python/data manipulation.
- **PASSED HIRING ASSESSMENT 2026-06-20.** Pass retained as a separate candidate-history signal; prior tracker record states 24-month validity.
- **CLOSED — NOT PROCEEDING 2026-07-24.** Google Careers status changed three days before 2026-07-27; no interview followed the assessment.
## Status
- Phase 0: DONE
- Phase 1: DONE (17 bullets confirmed; Option A — TAF talk reserved for CL, not on resume; IBM AI Engineering kept in awards)
- Phase 2 Resume: DONE (2 pages, MiKTeX, all bullets in char range, summary 525 chars, clean compile). Header tagline = Senior Data Engineer; BI/Analytics group added; crypto group dropped; no immigration line. SW-7 lead = data products; BS-3 = Spotfire platform co-ownership + C# extensions.
- Cover Letter: DONE (1 page, 299 words, 3 paragraphs, clean MiKTeX compile, both hooks verified, anti-pattern scan clean — 0 em-dashes)
- Critique: PENDING
- **Next CL:** DONE — see Output Files
- **Next Critique:** /critique output/Google_Senior_Data_Engineer/session_google_senior_data_engineer.md
- Phase 2 Resume: PENDING
- Cover Letter: PENDING
- Critique: PENDING
- **Next:** Phase 1 — bullet plan (this session)
- **Next CL:** /make-cl output/Google_Senior_Data_Engineer/session_google_senior_data_engineer.md
- **Next Critique:** /critique output/Google_Senior_Data_Engineer/session_google_senior_data_engineer.md
- Phase 0: **DONE**
- Phase 1: **DONE** (17-bullet Option A package)
- Phase 2 Resume: **DONE** (2 pages, clean compile)
- Cover Letter: **DONE** (1 page, 299 words, clean compile)
- Critique: **CURRENT — 85.5/100**
- Application: **CLOSED — NOT PROCEEDING 2026-07-24** (applied 2026-06-15; assessment passed 2026-06-20; no interview)
- Google reapplication rule: 90-day wait applies to the **same job**; other Google roles remain eligible, subject to the maximum of 3 applications in a rolling 30-day window. Official source: https://support.google.com/googlecareers/answer/6095391
- **Next:** Done. Retain the assessment pass in candidate history and target materially different, strong-fit Google requisitions.