Compare commits
5
Commits
2fadfdb8eb
...
e53abd4ff6
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e53abd4ff6 | ||
|
|
73336cc4f9 | ||
|
|
a64661e42a | ||
|
|
787a1d937e | ||
|
|
8a30c68c95 |
@@ -157,6 +157,7 @@ _Update this section when starting/finishing a JD._
|
|||||||
|
|
||||||
| Session | Status | Next Command |
|
| Session | Status | Next Command |
|
||||||
|---------|--------|-------------|
|
|---------|--------|-------------|
|
||||||
|
| SBB — Data Engineer (m/w/d), Asset Management Infrastrukturanlagen, **Bern** (Job ID 103755) | **SUBMITTED 2026-08-25.** Cohort slot: **Core (evidence-first-2026-01)**. 2pp English resume (13 bullets, validator PASS) + critique: **Document Quality 92/100** (90 at critique, +2 after Edit 1), hard gate PASS, no Tier 1 truth findings, **no outstanding fixes**. No cover letter — SBB waives it. Evidence Fit **79/100 (Core, lower end)**, hard gate **PASS** — the title-defining capability (build/operate cloud data pipelines and governed data products) is Direct and current, unlike the AWS FDE NO-GO. Best practical fit in the log: **Bern-based, German-language, no relocation, EU citizen + B permit**. Real strength cluster for the *vorausschauende Wartung* purpose — Bosch fab sensor/process data, ELK/Kafka anomaly detection, containerized ML inference, plus the condition-monitoring thesis. **Two open risks, both level/comp not fit:** (1) **Anforderungsniveau K** is a capped GAV band and the figures are not public — must be asked, not researched; (2) the seat reads **lateral or below** current Staff + Component Owner scope (same shape as the declined BKW). Named gaps: Snowflake, dbt, Argo Workflows, Helm, Power BI, Spring Boot, Angular — all non-canonical, survivable only because the JD prefixes the stack list with "z. B.". **Cover letter: NO — SBB explicitly waives it.** Channel: posting names **Andri Wienandts, People Leader, +41 79 364 62 53** — the first published warm entry point in the entire log. **The comp question was NOT resolved before submitting**, so the K band is now a live screening topic rather than a pre-cleared one; the same applies to Kidz Care childcare support (up to 90% of Betreuungskosten but scaled on *gross household* income, so realistically far less at this level — bracket table is intranet-only). | Prep an interview brief before any screening call: (1) Anforderungsniveau K band figures, (2) design/architecture scope vs current Staff + Component Owner level, (3) Kidz Care actual rate at this band. Named gaps to have honest answers for: Snowflake, dbt, Argo Workflows, Helm, Power BI |
|
||||||
| AWS (AWS EMEA SARL, Switzerland Branch) — Senior Forward Deployed Engineer, Zürich (job 10504263) | **CLOSED — NO-GO 2026-08-18** at the Phase 0 gate. Evidence Fit **69/100** (Adjacent). Minimum-qual gate passed (all 4 Basic Quals Direct) but the *title-defining* capability — customer embedding — is a Gap that `claims.json` globally forbids claiming, and R2 multi-agent/retrieval is a second Gap. User declined: **69 is below the fit bar worth spending a package on.** Consistent with revealed behaviour — every application actually submitted scored **77.5–89**; nothing below 75 has ever been sent. **No cohort slot consumed (Adjacent stays 1/2).** Phase 0 analysis retained in the session file for reuse if a better-fitting AWS req appears. | Done — no package built |
|
| AWS (AWS EMEA SARL, Switzerland Branch) — Senior Forward Deployed Engineer, Zürich (job 10504263) | **CLOSED — NO-GO 2026-08-18** at the Phase 0 gate. Evidence Fit **69/100** (Adjacent). Minimum-qual gate passed (all 4 Basic Quals Direct) but the *title-defining* capability — customer embedding — is a Gap that `claims.json` globally forbids claiming, and R2 multi-agent/retrieval is a second Gap. User declined: **69 is below the fit bar worth spending a package on.** Consistent with revealed behaviour — every application actually submitted scored **77.5–89**; nothing below 75 has ever been sent. **No cohort slot consumed (Adjacent stays 1/2).** Phase 0 analysis retained in the session file for reuse if a better-fitting AWS req appears. | Done — no package built |
|
||||||
| Google — Forward Deployed Engineer III, Google Cloud GTM (French, German), Zürich (req 78350205438567110) | **CLOSED — NOT PROCEEDING 2026-08-18.** Phase 0 was done (Evidence Fit 67/100, hard gate PASS) but user declined to proceed after **two Google rejections** (Merchant Data Science, Business Home): the bar is now that a Google req must fit *very* well to be worth a third attempt, and this one was Adjacent with an agent-orchestration Gap. **Frees the Adjacent cohort slot (back to 1/2).** Phase 1 never started. | Done — do not reopen without a materially stronger Google req |
|
| Google — Forward Deployed Engineer III, Google Cloud GTM (French, German), Zürich (req 78350205438567110) | **CLOSED — NOT PROCEEDING 2026-08-18.** Phase 0 was done (Evidence Fit 67/100, hard gate PASS) but user declined to proceed after **two Google rejections** (Merchant Data Science, Business Home): the bar is now that a Google req must fit *very* well to be worth a third attempt, and this one was Adjacent with an agent-orchestration Gap. **Frees the Adjacent cohort slot (back to 1/2).** Phase 1 never started. | Done — do not reopen without a materially stronger Google req |
|
||||||
| SDU Center for Energy Informatics, Odense DK — PhD, Theme 2 Predictive Maintenance & Asset Management of Smart Energy Networks (job 4159) | **CLOSED — NOT PROCEEDING 2026-08-18.** Enquiry email to Prof. Bo Nørregaard Jørgensen (sent 2026-08-02) went unanswered for 16 days; user dismissed the idea. Genuine thesis fit (vibration condition monitoring, RBR+ANN hybrid) but the blockers were never the documents — 2 letters of recommendation 13 years out of academia, and DKK 37,075/mo ≈ CHF 56k against a 180k bar. Deadline was 2026-08-20. | Done — no further action |
|
| SDU Center for Energy Informatics, Odense DK — PhD, Theme 2 Predictive Maintenance & Asset Management of Smart Energy Networks (job 4159) | **CLOSED — NOT PROCEEDING 2026-08-18.** Enquiry email to Prof. Bo Nørregaard Jørgensen (sent 2026-08-02) went unanswered for 16 days; user dismissed the idea. Genuine thesis fit (vibration condition monitoring, RBR+ANN hybrid) but the blockers were never the documents — 2 letters of recommendation 13 years out of academia, and DKK 37,075/mo ≈ CHF 56k against a 180k bar. Deadline was 2026-08-20. | Done — no further action |
|
||||||
@@ -168,7 +169,7 @@ _Update this section when starting/finishing a JD._
|
|||||||
| Microsoft — Senior SWE, Industry Solutions Engineering (ISE), Zürich (req 200040836) | **CLOSED — REJECTED 2026-08-11** (submitted 2026-07-03, 85.8/100 Pass 2; 2pp resume + 1pp CL; verbatim Eightfold JD; IC4 base CHF 146.2–245.9k; applied ~7 days after posting). No interview, ~39 days to disposition. Cold-channel application; does not implicate document quality on its own. The separate Microsoft **Principal FDE** req 200043897 is a different pipeline and remains open | Done — cohort rejection recorded |
|
| Microsoft — Senior SWE, Industry Solutions Engineering (ISE), Zürich (req 200040836) | **CLOSED — REJECTED 2026-08-11** (submitted 2026-07-03, 85.8/100 Pass 2; 2pp resume + 1pp CL; verbatim Eightfold JD; IC4 base CHF 146.2–245.9k; applied ~7 days after posting). No interview, ~39 days to disposition. Cold-channel application; does not implicate document quality on its own. The separate Microsoft **Principal FDE** req 200043897 is a different pipeline and remains open | Done — cohort rejection recorded |
|
||||||
| Kraken (Payward) — SRE, AI Agents (remote, CH-eligible) | **CLOSED — REJECTED 2026-06-17** (applied 2026-06-15 ~87.2/100, no interview). Honest gaps (NO Terraform/SRE-title/LangGraph) likely the filter; 4th Kraken req declined/rejected to date | Done |
|
| Kraken (Payward) — SRE, AI Agents (remote, CH-eligible) | **CLOSED — REJECTED 2026-06-17** (applied 2026-06-15 ~87.2/100, no interview). Honest gaps (NO Terraform/SRE-title/LangGraph) likely the filter; 4th Kraken req declined/rejected to date | Done |
|
||||||
| Google — Senior Data Engineer (Merchant Data Science), Zürich/MV | **CLOSED — NOT PROCEEDING 2026-07-24** (applied 2026-06-15, 85.5/100; passed Google Hiring Assessment 2026-06-20, no interview). Assessment pass remains recorded separately. The official 90-day wait applies only to reapplying for the same job; different Google roles remain eligible, subject to 3 applications per rolling 30 days. | Done — target a different strong-fit Google req |
|
| Google — Senior Data Engineer (Merchant Data Science), Zürich/MV | **CLOSED — NOT PROCEEDING 2026-07-24** (applied 2026-06-15, 85.5/100; passed Google Hiring Assessment 2026-06-20, no interview). Assessment pass remains recorded separately. The official 90-day wait applies only to reapplying for the same job; different Google roles remain eligible, subject to 3 applications per rolling 30 days. | Done — target a different strong-fit Google req |
|
||||||
| Snowflake — Sr SWE, Enterprise (Observe by Snowflake), Zürich | **SENT 2026-06-06** (~86/100; 2pp resume + 1pp CL; real Ashby JD; comp CHF 176–253k base; NO C++ gate). Tier 1+2 applied; Vizrt low-latency skipped per user. Best-fit role in the 2026-06 search | Done — await response |
|
| Snowflake — Sr SWE, Enterprise (Observe by Snowflake), Zürich | **CLOSED — NO RESPONSE 2026-08-25** (sent 2026-06-06, ~86/100; 2pp resume + 1pp CL; real Ashby JD; comp CHF 176–253k base; NO C++ gate). Closed by user decision at **80 days silent** — past the longest real disposition in the log (Equinor, 79 days). **No rejection was ever received: this is a presumed-dead call, not a rejection — do not count it in rejection statistics or treat it as a document-quality signal.** Cold channel. Pre-dates the evidence-first-2026-01 cohort (started 2026-07-27), so **no cohort slot freed**. Highest-scoring package in the log at ~86 and it drew no reply at all — the strongest single argument in the log for the channel problem over the document problem. **Unblocks the Snowflake Observe Metrics Platform req** (`db4f0492`), paused 2026-07-28 solely to avoid stacking a second cold application on the same org while this one was open | Done — if Snowflake is still wanted, the Metrics Platform req is now open to pursue, but route it through a recruiter rather than another cold submit |
|
||||||
| Isovalent (Cisco) Sr Data Engineer, Observability | **CLOSED — role pulled** (live Cisco scrape 2026-06-02: not on board; Recruitee link dead). Package finalized ~86/100, SHELVED for reuse | Done — retarget PDFs to next live data-eng req (QuantCo/Grafana/Confluent) |
|
| Isovalent (Cisco) Sr Data Engineer, Observability | **CLOSED — role pulled** (live Cisco scrape 2026-06-02: not on board; Recruitee link dead). Package finalized ~86/100, SHELVED for reuse | Done — retarget PDFs to next live data-eng req (QuantCo/Grafana/Confluent) |
|
||||||
| Google Zürich Sr SWE Infrastructure (Data Pipeline) | **CLOSED — DROPPED + DELETED 2026-06-02** (poor fit). Live JD = Core infra/systems SWE with **C++ as a MINIMUM qual**, off-thesis vs `user_positioning`. Output folder deleted (was built on a fabricated JD). | Done — do not reattempt this req |
|
| Google Zürich Sr SWE Infrastructure (Data Pipeline) | **CLOSED — DROPPED + DELETED 2026-06-02** (poor fit). Live JD = Core infra/systems SWE with **C++ as a MINIMUM qual**, off-thesis vs `user_positioning`. Output folder deleted (was built on a fabricated JD). | Done — do not reattempt this req |
|
||||||
| Kraken AI Infrastructure | **CLOSED — REJECTED** (applied, no interview) | Done |
|
| Kraken AI Infrastructure | **CLOSED — REJECTED** (applied, no interview) | Done |
|
||||||
@@ -176,7 +177,7 @@ _Update this section when starting/finishing a JD._
|
|||||||
| Infineon AI Engineer | **CLOSED — not applied** (no relocation to Germany) | Done |
|
| Infineon AI Engineer | **CLOSED — not applied** (no relocation to Germany) | Done |
|
||||||
| Apple Data Engineer (ISE, Zurich) | **CLOSED — REJECTED** (no interview) | Done |
|
| Apple Data Engineer (ISE, Zurich) | **CLOSED — REJECTED** (no interview) | Done |
|
||||||
| Google FDE GenAI (Zurich) | PAUSED — GenAI evidence gap too large; redirecting to data-eng/MLOps roles | Likely abandon |
|
| Google FDE GenAI (Zurich) | PAUSED — GenAI evidence gap too large; redirecting to data-eng/MLOps roles | Likely abandon |
|
||||||
| Equinor — Manager / AI Architect, Agentic systems (Stavanger/Oslo/Rotvoll/Sandsli; req JR106747) | **CLOSED — REJECTED 2026-08-14** (submitted 2026-05-27, ~80/100; posting deadline 05.06.2026). No interview, **79 days** to disposition — the longest turnaround recorded. Cold channel. This was a **Manager** req, not a pure IC architect role, so level/scope stretch compounds the standing Norway constraints (comp below bar, Norwegian A2, no clearance). **Pre-dates the evidence-first-2026-01 cohort (started 2026-07-27) — does not free a cohort slot.** Norway lane now reduced to the open Aker BP application. | Done — cohort-external rejection recorded |
|
| Equinor — Manager / AI Architect, Agentic systems (Stavanger/Oslo/Rotvoll/Sandsli; req JR106747) | **CLOSED — REJECTED 2026-08-14** (submitted 2026-05-27, ~80/100; posting deadline 05.06.2026). No interview, **79 days** to disposition — the longest turnaround recorded. Cold channel. This was a **Manager** req, not a pure IC architect role, so level/scope stretch compounds the standing Norway per-role gates (norsk working-language, no NO clearance — **not** comp: the 180k bar is CH-only and does not apply to Norway). **Pre-dates the evidence-first-2026-01 cohort (started 2026-07-27) — does not free a cohort slot.** **The Norway lane stays OPEN but selective** — Equinor, Telenor and NATO JWC remain in the scout; the user has explicitly said he still wants to reach out for very good Norwegian roles, Equinor included, after this rejection. Never frame this lane as closed. | Done — cohort-external rejection recorded |
|
||||||
| QuantCo Cloud Engineer (Europe/Zürich) | **CLOSED — REJECTED** (applied 2026-06-01 ~82/100, no interview; rejection 2026-06-15) | Done |
|
| QuantCo Cloud Engineer (Europe/Zürich) | **CLOSED — REJECTED** (applied 2026-06-01 ~82/100, no interview; rejection 2026-06-15) | Done |
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -187,6 +188,7 @@ _See `config.md` for user-specific corrections. Add verified errors here as you
|
|||||||
|
|
||||||
| Date | Correction | Files fixed |
|
| Date | Correction | Files fixed |
|
||||||
|------|-----------|-------------|
|
|------|-----------|-------------|
|
||||||
|
| 2026-08-21 | **The data-engineer bundle carried the SW-1 scope violation it was supposed to prevent.** `bundle_data_engineer.md` §S5's cover-letter opening hook read "*while simultaneously leading the migration of our legacy stack to a cloud-native AWS architecture*" — a full-ownership verb on a company-scale object, directly contradicting `claims.json` SW-1 `forbidden` **and** point 2 of the narrative thread three lines below it. Live trap for every future data-eng cover letter. Rewritten to the scoped form plus an inline scope warning. **Check the other four bundles for the same pattern.** | `bundle_data_engineer.md` (§S5 hook + new warning) |
|
||||||
| 2026-07-27 | **SW-1 was not solo.** Swisscom AWS migration was written as "sole technical lead" / "Led migration of legacy stack." Dennis was primary engineer for **his own domains'** pipelines and a contributor to the wider programme. | `experience_swisscom.md` (role line + all 3 bullet variants + overclaiming warning), `config.md` |
|
| 2026-07-27 | **SW-1 was not solo.** Swisscom AWS migration was written as "sole technical lead" / "Led migration of legacy stack." Dennis was primary engineer for **his own domains'** pipelines and a contributor to the wider programme. | `experience_swisscom.md` (role line + all 3 bullet variants + overclaiming warning), `config.md` |
|
||||||
| 2026-07-27 | **Security Champion is 2025/2026 only, and is a team role — not an award.** Source files claimed "3 consecutive years (2023/24–2025/26)." User has now corrected this twice. **Default is OMIT** unless the JD explicitly requires security/DevSecOps. | `experience_swisscom.md` SW-5, `achievement_reframing_guide.md`, `skills_taxonomy.md` (3 rows) |
|
| 2026-07-27 | **Security Champion is 2025/2026 only, and is a team role — not an award.** Source files claimed "3 consecutive years (2023/24–2025/26)." User has now corrected this twice. **Default is OMIT** unless the JD explicitly requires security/DevSecOps. | `experience_swisscom.md` SW-5, `achievement_reframing_guide.md`, `skills_taxonomy.md` (3 rows) |
|
||||||
| 2026-07-29 | **Atlassian Compass is the metadata/lineage platform for Swisscom data products** (user-supplied). Previously the KB named no catalogue/lineage product at all, which read as a hard gap against data-governance JDs. Practitioner use only — never claim admin, rollout or ownership. Does NOT license claiming Purview/Collibra/Alation. | `claims.json` (SW-7 scope + skills entry), `experience_swisscom.md` SW-7 |
|
| 2026-07-29 | **Atlassian Compass is the metadata/lineage platform for Swisscom data products** (user-supplied). Previously the KB named no catalogue/lineage product at all, which read as a hard gap against data-governance JDs. Practitioner use only — never claim admin, rollout or ownership. Does NOT license claiming Purview/Collibra/Alation. | `claims.json` (SW-7 scope + skills entry), `experience_swisscom.md` SW-7 |
|
||||||
|
|||||||
@@ -0,0 +1,83 @@
|
|||||||
|
Data Engineer (m/w/d) - Asset Management Infrastrukturanlagen
|
||||||
|
Jetzt bewerben
|
||||||
|
Beweg die Schweiz mit uns.
|
||||||
|
Data Engineer (m/w/d) - Asset Management Infrastrukturanlagen
|
||||||
|
Bern / Work Smart, ab sofort oder nach Vereinbarung, 60-100%
|
||||||
|
Jetzt bewerben
|
||||||
|
Darauf kannst du dich freuen.
|
||||||
|
Benefits wie kostenloses GA, vergünstigtes Reisen im Ausland - auch für die Familie - findest du auf unserer Website unter Benefits.
|
||||||
|
Das kannst du bewegen.
|
||||||
|
In dieser spannenden Rolle baust du Datenpipelines auf, betreibst und entwickelst sie weiter auf der Enterprise Analytics Plattform der SBB, die Batch- und Streaming-Ansätze vereint.
|
||||||
|
Unterschiedlichste Datenquellen integrierst du via APIs/Kafka und ermöglichst damit Analysen, Dashboards sowie vorausschauende Wartung.
|
||||||
|
Datenprodukte und semantische Modelle gestaltest du auf Snowflake und Power BI.
|
||||||
|
Du entwickelst RAMSI weiter – von der Webanwendung (Java Spring Boot/Angular) über Reports bis hin zu Dashboards für unsere Fachspezialist:innen.
|
||||||
|
In enger Zusammenarbeit mit dem Business nimmst du Anforderungen auf und sorgst für nachhaltige Lösungen im Betrieb.
|
||||||
|
Dein Wissen und deine Erfahrung teilst du im Team und trägst zur fachlichen Weiterentwicklung bei.
|
||||||
|
Das bringst du mit.
|
||||||
|
Starke Kommunikationsfähigkeiten und Teamorientierung mit der Bereitschaft, gemeinsam mit unseren Fachspezialist:innen konkrete Lösungen zu erarbeiten und die fachliche Entwicklung anderer Dateningenieur:innen zu fördern.
|
||||||
|
Agile, selbständige und lösungsorientierte Arbeitsweise mit ausgeprägter Verlässlichkeit und Bereitschaft, Verantwortung für die Qualität und Nachhaltigkeit technischer Lösungen zu übernehmen.
|
||||||
|
Mehrjährige praktische Erfahrung im Entwurf, Aufbau, der Entwicklung und dem Betrieb cloudbasierter Datenplattformen mit modernem Data Stack (ETL/ELT, Data Warehouses, Streaming, Orchestrierung – z. B. Snowflake, DBT, Helm, Argo Workflows, Kafka).
|
||||||
|
Fähigkeit, skalierbare und kosteneffiziente Datenarchitekturen zu entwerfen und Trade-offs zwischen Latenz, Konsistenz und Kosten kritisch zu beurteilen.
|
||||||
|
Erfahrung in Datenmodellierung (Star-/Snowflake-Modelle) und Reporting mit Power BI, fortgeschrittene SQL-Kenntnisse sowie Kenntnisse zur Abfrageleistungsoptimierung.
|
||||||
|
Software-Engineering-Fähigkeiten in Python, inklusive Tests, CI/CD, Packaging- und Deployment-Best-Practices.
|
||||||
|
Dein Lohn und deine Benefits.
|
||||||
|
|
||||||
|
Wir haben ein faires und fortschrittliches Lohnsystem und setzen uns aktiv für Lohngleichheit ein. Deshalb sind weiterführende und detaillierte Informationen zum Lohnsystem bei der SBB transparent einsehbar. Diese Stelle befindet sich im Anforderungsniveau K, Regionalzulage Stufe 1. Mehr zu Lohn und Benefits.
|
||||||
|
|
||||||
|
Damit gelingt der Einstieg.
|
||||||
|
|
||||||
|
Dass du mit uns die Schweiz bewegen willst, ist für uns die grösste Motivation. Darum verzichten wir bei dieser Stelle auf ein Motivationsschreiben. Falls du uns deine Motivation dennoch mitteilen möchtest, hast du in unserem Bewerbungstool nach wie vor die Möglichkeit dazu.
|
||||||
|
|
||||||
|
Grosses machen ist einfacher per du. Das beginnt bereits bei deiner Bewerbung.
|
||||||
|
|
||||||
|
So geht's weiter.
|
||||||
|
|
||||||
|
Bewerbung
|
||||||
|
|
||||||
|
Virtuelles Kennenlernen mit HR und Führungskraft
|
||||||
|
|
||||||
|
Persönliches Kennenlernen
|
||||||
|
|
||||||
|
Finaler Entscheid
|
||||||
|
|
||||||
|
Noch Fragen?
|
||||||
|
Zum Bewerbungsprozess
|
||||||
|
SBB Recruiting Support
|
||||||
|
Telefon + 41 51 220 20 29
|
||||||
|
recruiting@sbb.ch
|
||||||
|
|
||||||
|
#einfachDu
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
FAQ zur Bewerbung
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Zur Stelle
|
||||||
|
Job ID 103755
|
||||||
|
|
||||||
|
Andri Wienandts, People Leader
|
||||||
|
Telefon +41 79 364 62 53
|
||||||
|
|
||||||
|
|
||||||
|
Bewerbungen per E-Mail können leider nicht berücksichtigt werden.
|
||||||
|
|
||||||
|
Für diese Stelle nehmen wir keine Dossiers von Personalvermittlern entgegen.
|
||||||
|
|
||||||
|
Das bieten wir.
|
||||||
|
Benefits
|
||||||
|
Wo immer möglich setzen wir auf flexible Arbeitszeiten und moderne Arbeitszeitmodelle. Darüber hinaus sind wir als Arbeitgeberin auch flexibel, wenn es darum geht, dein Berufsleben mit deinem Privatleben in Einklang zu bringen.
|
||||||
|
|
||||||
|
Mehr erfahren
|
||||||
|
Unterschiede willkommen
|
||||||
|
Mit über 150 verschiedenen Berufen bieten wir eine beeindruckende Vielfalt an Einstiegs- und Entwicklungsmöglichkeiten. Ebenso vielfältig sind unsere Mitarbeitenden. Darum engagieren wir uns dafür dass alle Mitarbeitenden ihre individuellen Stärken und Denkweisen einbringen können.
|
||||||
|
|
||||||
|
Mehr erfahren
|
||||||
|
Karriere und Entwicklung
|
||||||
|
Wir fördern unsere Mitarbeitenden entlang ihren persönlichen Bedürfnissen und Ambitionen. Dafür stellen wir ein breites Angebot an fach- und bereichsübergreifenden Weiterbildungsangeboten zur Verfügung. An ausgewählten externen Weiterbildungen, beteiligen wir uns finanziell und zeitlich.
|
||||||
|
|
||||||
|
Mehr erfahren
|
||||||
|
Wir bewegen heute schon Grosses.
|
||||||
|
Jetzt bewerben
|
||||||
|
Grosses bewegen.
|
||||||
+112
-7
@@ -1672,15 +1672,111 @@ def save_seen(seen):
|
|||||||
_atomic_write_json(STATE_FILE, seen)
|
_atomic_write_json(STATE_FILE, seen)
|
||||||
|
|
||||||
|
|
||||||
|
# Board-specific req-ID patterns, tried in order against the URL path+query. Every key is
|
||||||
|
# scoped by host (see _decision_key), so an ID only ever has to be unique within one board
|
||||||
|
# and cross-board collisions are impossible by construction.
|
||||||
|
_JOB_ID_PATTERNS = [
|
||||||
|
# Amazon: the slug is truncated to a fixed width and that width has changed between runs,
|
||||||
|
# so the same req yields different URLs. This is the drift that motivated the whole helper.
|
||||||
|
(r"amazon\.jobs$", r"/jobs/(\d+)"),
|
||||||
|
(r"careers\.microsoft\.com$", r"/job/(\d+)"),
|
||||||
|
(r"google\.com$", r"/results/(\d+)-"),
|
||||||
|
# Workday: trailing _REQID on the job slug (Roche 202608-120791-1, Novartis REQ-…, NVIDIA JR…).
|
||||||
|
# Also collapses the /apply suffix some rows carry and others don't.
|
||||||
|
(r"myworkdayjobs\.com$", r"_([A-Za-z]*[\d-]+\d)(?:/apply)?/?$"),
|
||||||
|
(r"smartrecruiters\.com$", r"/(\d{6,})"),
|
||||||
|
(r"greenhouse\.io$", r"/jobs/(\d+)"),
|
||||||
|
(r"careers\.cisco\.com$", r"/job/(\d+)"),
|
||||||
|
# PostFinance publishes one req per locale (…/74421-fr_FR, …/74372-de_DE) — same job.
|
||||||
|
(r"jobs\.postfinance\.ch$", r"/(\d+)-[a-z]{2}_[A-Z]{2}/?$"),
|
||||||
|
# Apple: same req appears with ?team=… and with a /locationPicker suffix.
|
||||||
|
(r"jobs\.apple\.com$", r"/details/([\d-]+)"),
|
||||||
|
(r"successfactors\.eu$", r"[?&]jobId=(\d+)"),
|
||||||
|
(r"taleo\.net$", r"[?&]job=(\d+)"),
|
||||||
|
(r"bis\.org$", r"/vacancies/(jr\d+)"),
|
||||||
|
(r"metacareers\.com$", r"/job_details/(\d+)"),
|
||||||
|
(r"finn\.no$", r"[?&]finnkode=(\d+)"),
|
||||||
|
(r"linkedin\.com$", r"/jobs/view/.*-(\d+)/?$"),
|
||||||
|
(r"careers\.roche\.com$", r"/job/([\w-]+)/"),
|
||||||
|
# Greenhouse-backed careers pages that carry the req in a query param (Databricks,
|
||||||
|
# Fivetran, Datadog, Elastic — Elastic repeats gh_jid twice; the first match wins).
|
||||||
|
(None, r"[?&]gh_jid=(\d+)"),
|
||||||
|
# Teamtailor (Axpo, Telenor) — /jobs/<id>-<slug>.
|
||||||
|
(None, r"/jobs/(\d+)-"),
|
||||||
|
# Ashby / Lever / Recruitee-style boards (RUAG, BKW, BFH, SBB) — trailing UUID.
|
||||||
|
(None, r"/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-"
|
||||||
|
r"[0-9a-f]{4}-[0-9a-f]{12})/?$"),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def _decision_key(url):
|
||||||
|
"""Stable per-job identity for the decision log, resilient to URL drift.
|
||||||
|
|
||||||
|
Boards rewrite their own URLs: Amazon truncates the slug to a width that has changed
|
||||||
|
between runs, PostFinance publishes one URL per locale, Apple appends ?team= or
|
||||||
|
/locationPicker, Workday adds /apply. Keying decisions on the raw URL therefore loses
|
||||||
|
them — an already-skipped role silently resurfaces as undecided (this is what happened
|
||||||
|
to the AWS Principal Delivery Consultant req between the 2026-08-18 and 08-21 runs).
|
||||||
|
|
||||||
|
Returns "<host>#<req-id>" when a board pattern matches, else "<host>#<normalized path>".
|
||||||
|
Host-scoping keeps two boards that use the same numbering scheme from colliding, so a
|
||||||
|
wrong match can never mark a genuinely undecided role as decided at a *different* company.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
parts = urllib.parse.urlsplit(url.strip())
|
||||||
|
except ValueError:
|
||||||
|
return url.strip()
|
||||||
|
host = (parts.netloc or "").lower().split(":")[0]
|
||||||
|
if host.startswith("www."):
|
||||||
|
host = host[4:]
|
||||||
|
target = parts.path + (f"?{parts.query}" if parts.query else "")
|
||||||
|
|
||||||
|
for host_pat, id_pat in _JOB_ID_PATTERNS:
|
||||||
|
if host_pat and not re.search(host_pat, host):
|
||||||
|
continue
|
||||||
|
m = re.search(id_pat, target)
|
||||||
|
if m:
|
||||||
|
return f"{host}#{m.group(1)}"
|
||||||
|
|
||||||
|
# No known ID shape: fall back to the path with cosmetic variation stripped.
|
||||||
|
path = parts.path.rstrip("/")
|
||||||
|
if path.endswith("/apply"):
|
||||||
|
path = path[: -len("/apply")]
|
||||||
|
return f"{host}#{path.lower()}"
|
||||||
|
|
||||||
|
|
||||||
def load_decisions():
|
def load_decisions():
|
||||||
"""Decision log keyed by job URL: {url: {company, title, decision, note, date}}.
|
"""Decision log keyed by job URL: {url: {company, title, decision, note, date}}.
|
||||||
Decisions persist across runs so we don't re-evaluate roles we've already judged
|
Decisions persist across runs so we don't re-evaluate roles we've already judged
|
||||||
(shortlist / skip / applied / paused / rejected — free-text, not enforced)."""
|
(shortlist / skip / applied / paused / rejected — free-text, not enforced).
|
||||||
|
|
||||||
|
The file stays URL-keyed — it is hand-edited and the URL is the useful thing to read.
|
||||||
|
Lookups go through index_decisions() instead, which is drift-proof."""
|
||||||
if DECISIONS_FILE.exists():
|
if DECISIONS_FILE.exists():
|
||||||
return json.loads(DECISIONS_FILE.read_text(encoding="utf-8"))
|
return json.loads(DECISIONS_FILE.read_text(encoding="utf-8"))
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
|
|
||||||
|
def index_decisions(decisions):
|
||||||
|
"""Build {stable key -> entry} for lookup. On collision the newest decision wins."""
|
||||||
|
idx = {}
|
||||||
|
for url, entry in decisions.items():
|
||||||
|
key = _decision_key(url)
|
||||||
|
prev = idx.get(key)
|
||||||
|
if prev is None or str(entry.get("date", "")) >= str(prev.get("date", "")):
|
||||||
|
idx[key] = entry
|
||||||
|
return idx
|
||||||
|
|
||||||
|
|
||||||
|
def find_decision_url(decisions, url):
|
||||||
|
"""Existing log URL for the same job, if one is already recorded under a drifted URL."""
|
||||||
|
key = _decision_key(url)
|
||||||
|
for existing in decisions:
|
||||||
|
if _decision_key(existing) == key:
|
||||||
|
return existing
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
def save_decisions(decisions):
|
def save_decisions(decisions):
|
||||||
_atomic_write_json(DECISIONS_FILE, decisions)
|
_atomic_write_json(DECISIONS_FILE, decisions)
|
||||||
|
|
||||||
@@ -1750,6 +1846,8 @@ def write_stats_table(stats, total_secs):
|
|||||||
|
|
||||||
def write_report(path, results, errors, new_only, include_weak, stats=None, total_secs=0.0,
|
def write_report(path, results, errors, new_only, include_weak, stats=None, total_secs=0.0,
|
||||||
decisions=None, hide_decided=False):
|
decisions=None, hide_decided=False):
|
||||||
|
# `decisions` here is the stable-key index from index_decisions(), not the raw
|
||||||
|
# URL-keyed log — job URLs drift between runs, the keys do not.
|
||||||
decisions = decisions or {}
|
decisions = decisions or {}
|
||||||
today = datetime.now().strftime("%Y-%m-%d")
|
today = datetime.now().strftime("%Y-%m-%d")
|
||||||
n_new = sum(1 for r in results if r["is_new"])
|
n_new = sum(1 for r in results if r["is_new"])
|
||||||
@@ -1774,7 +1872,7 @@ def write_report(path, results, errors, new_only, include_weak, stats=None, tota
|
|||||||
|
|
||||||
if not include_weak and weak:
|
if not include_weak and weak:
|
||||||
lines.append(f"\n_Hiding {len(weak)} weak/noise roles (score < 2). Use --include-weak to show._")
|
lines.append(f"\n_Hiding {len(weak)} weak/noise roles (score < 2). Use --include-weak to show._")
|
||||||
n_decided = sum(1 for r in results if r["url"] in decisions)
|
n_decided = sum(1 for r in results if _decision_key(r["url"]) in decisions)
|
||||||
if n_decided:
|
if n_decided:
|
||||||
shown = "hidden" if hide_decided else "tagged inline"
|
shown = "hidden" if hide_decided else "tagged inline"
|
||||||
lines.append(f"_{n_decided} role(s) already in the decision log ({shown}; "
|
lines.append(f"_{n_decided} role(s) already in the decision log ({shown}; "
|
||||||
@@ -1786,12 +1884,13 @@ def write_report(path, results, errors, new_only, include_weak, stats=None, tota
|
|||||||
buckets.append(("Weak / noise (score < 2)", weak))
|
buckets.append(("Weak / noise (score < 2)", weak))
|
||||||
|
|
||||||
for bucket_name, bucket in buckets:
|
for bucket_name, bucket in buckets:
|
||||||
shown = [r for r in bucket if not (hide_decided and r["url"] in decisions)]
|
shown = [r for r in bucket
|
||||||
|
if not (hide_decided and _decision_key(r["url"]) in decisions)]
|
||||||
if not shown:
|
if not shown:
|
||||||
continue
|
continue
|
||||||
lines.append(f"\n## {bucket_name} - {len(shown)} role(s)\n")
|
lines.append(f"\n## {bucket_name} - {len(shown)} role(s)\n")
|
||||||
for r in shown:
|
for r in shown:
|
||||||
d = decisions.get(r["url"])
|
d = decisions.get(_decision_key(r["url"]))
|
||||||
new_tag = " [NEW]" if r["is_new"] else ""
|
new_tag = " [NEW]" if r["is_new"] else ""
|
||||||
decided_tag = f" — 🗂 {d['decision'].upper()}" if d else ""
|
decided_tag = f" — 🗂 {d['decision'].upper()}" if d else ""
|
||||||
loc_tag = ("CH" if r["in_ch"] else
|
loc_tag = ("CH" if r["in_ch"] else
|
||||||
@@ -1927,7 +2026,10 @@ def main():
|
|||||||
return
|
return
|
||||||
url, status, note = rest[0], rest[1], " ".join(rest[2:])
|
url, status, note = rest[0], rest[1], " ".join(rest[2:])
|
||||||
decisions = load_decisions()
|
decisions = load_decisions()
|
||||||
prev = decisions.get(url, {})
|
# Update in place if this job is already logged under a drifted URL (truncated
|
||||||
|
# slug, other locale, /apply suffix) rather than adding a second row for it.
|
||||||
|
existing = find_decision_url(decisions, url)
|
||||||
|
prev = decisions.pop(existing, {}) if existing else {}
|
||||||
# Preserve any company/title already stored (filled when a report run tagged the URL).
|
# Preserve any company/title already stored (filled when a report run tagged the URL).
|
||||||
decisions[url] = {
|
decisions[url] = {
|
||||||
"company": prev.get("company", ""),
|
"company": prev.get("company", ""),
|
||||||
@@ -1935,6 +2037,8 @@ def main():
|
|||||||
"decision": status, "note": note, "date": today,
|
"decision": status, "note": note, "date": today,
|
||||||
}
|
}
|
||||||
save_decisions(decisions)
|
save_decisions(decisions)
|
||||||
|
if existing and existing != url:
|
||||||
|
print(f"(replaced earlier URL for the same job: {existing})", file=sys.stderr)
|
||||||
print(f"Recorded: {status} — {url}", file=sys.stderr)
|
print(f"Recorded: {status} — {url}", file=sys.stderr)
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -1961,6 +2065,7 @@ def main():
|
|||||||
|
|
||||||
seen = load_seen()
|
seen = load_seen()
|
||||||
decisions = load_decisions()
|
decisions = load_decisions()
|
||||||
|
dec_index = index_decisions(decisions)
|
||||||
last_scrape = load_last_scrape()
|
last_scrape = load_last_scrape()
|
||||||
all_results, errors, stats = [], [], []
|
all_results, errors, stats = [], [], []
|
||||||
new_last_scrape = dict(last_scrape)
|
new_last_scrape = dict(last_scrape)
|
||||||
@@ -2040,7 +2145,7 @@ def main():
|
|||||||
report_path = REPORTS_DIR / f"{today}.md"
|
report_path = REPORTS_DIR / f"{today}.md"
|
||||||
write_report(report_path, all_results, errors, new_only, include_weak,
|
write_report(report_path, all_results, errors, new_only, include_weak,
|
||||||
stats=stats, total_secs=total_secs,
|
stats=stats, total_secs=total_secs,
|
||||||
decisions=decisions, hide_decided=hide_decided)
|
decisions=dec_index, hide_decided=hide_decided)
|
||||||
|
|
||||||
# Plain data dump of every eligible role, unfiltered by keyword score — fit judgment
|
# Plain data dump of every eligible role, unfiltered by keyword score — fit judgment
|
||||||
# for these is done in conversation against the profile, not by the keyword scorer.
|
# for these is done in conversation against the profile, not by the keyword scorer.
|
||||||
@@ -2048,7 +2153,7 @@ def main():
|
|||||||
dump = [{
|
dump = [{
|
||||||
"company": r["company"], "title": r["title"], "location": r["location"],
|
"company": r["company"], "title": r["title"], "location": r["location"],
|
||||||
"url": r["url"], "posted": r["posted"], "is_new": r["is_new"],
|
"url": r["url"], "posted": r["posted"], "is_new": r["is_new"],
|
||||||
"decision": decisions.get(r["url"]),
|
"decision": dec_index.get(_decision_key(r["url"])),
|
||||||
"keyword_signal": {"score": r["score"], "pos": r["pos"], "neg": r["neg"]},
|
"keyword_signal": {"score": r["score"], "pos": r["pos"], "neg": r["neg"]},
|
||||||
"loc_flags": {
|
"loc_flags": {
|
||||||
"in_ch": r["in_ch"], "remote": r["remote"], "relocation": r["relocation"],
|
"in_ch": r["in_ch"], "remote": r["remote"], "relocation": r["relocation"],
|
||||||
|
|||||||
@@ -125,13 +125,6 @@
|
|||||||
"note": "C++/automotive, weaker fit vs his Python/data-platform stack.",
|
"note": "C++/automotive, weaker fit vs his Python/data-platform stack.",
|
||||||
"date": "2026-06-01"
|
"date": "2026-06-01"
|
||||||
},
|
},
|
||||||
"https://jobs.ashbyhq.com/snowflake/3eea87fa-73c8-46dc-b69b-7beb438b48d8": {
|
|
||||||
"company": "Snowflake",
|
|
||||||
"title": "Senior Software Engineer, Enterprise (Observe by Snowflake)",
|
|
||||||
"decision": "applied",
|
|
||||||
"note": "Observability-spine SWE on an Iceberg telemetry lakehouse; Zurich-commutable, comp CHF 176-253k base clears bar. Best-fit role in the 2026-06 search. | SENT 2026-06-06 (resume+CL finalized, ~86/100).",
|
|
||||||
"date": "2026-06-08"
|
|
||||||
},
|
|
||||||
"https://www.google.com/about/careers/applications/jobs/results/87066954308690630-senior-data-engineer?location=Switzerland": {
|
"https://www.google.com/about/careers/applications/jobs/results/87066954308690630-senior-data-engineer?location=Switzerland": {
|
||||||
"company": "Google",
|
"company": "Google",
|
||||||
"title": "Senior Data Engineer (Merchant Data Science)",
|
"title": "Senior Data Engineer (Merchant Data Science)",
|
||||||
@@ -1574,13 +1567,6 @@
|
|||||||
"note": "Claude judgment 2026-07-06: same Observe team as your pending application, but this req (query-execution internals) is more database-internals-specialized than your general profile",
|
"note": "Claude judgment 2026-07-06: same Observe team as your pending application, but this req (query-execution internals) is more database-internals-specialized than your general profile",
|
||||||
"date": "2026-07-06"
|
"date": "2026-07-06"
|
||||||
},
|
},
|
||||||
"https://jobs.ashbyhq.com/snowflake/db4f0492-ae21-49b7-a7eb-100be61e92bb": {
|
|
||||||
"company": "Snowflake",
|
|
||||||
"title": "Senior Software Engineer - Observe by Snowflake, Metrics Platform",
|
|
||||||
"decision": "paused",
|
|
||||||
"note": "Strong Observe metrics/data-platform overlap and CHF 176-253k band, but an Enterprise-team application has been open since 2026-06-06. Do not stack another cold application to the same organization/team; pursue recruiter routing or wait for status.",
|
|
||||||
"date": "2026-07-28"
|
|
||||||
},
|
|
||||||
"https://jobs.ashbyhq.com/snowflake/26a0ae52-97a6-4a46-9216-3c382570d89b": {
|
"https://jobs.ashbyhq.com/snowflake/26a0ae52-97a6-4a46-9216-3c382570d89b": {
|
||||||
"company": "Snowflake",
|
"company": "Snowflake",
|
||||||
"title": "Software Engineer Intern - Zurich (2026)",
|
"title": "Software Engineer Intern - Zurich (2026)",
|
||||||
@@ -1795,5 +1781,26 @@
|
|||||||
"decision": "skip",
|
"decision": "skip",
|
||||||
"note": "MISLABELLED REQ. Title says Principal Forward Deployed Engineer - Data Scientist - German Speaking, but required quals are network engineering: BGP, MPLS, SD-WAN, IPv4/IPv6, Palo Alto firewalls, Azure Virtual WAN, DNS/DHCP, load balancers, IDS/IPS, Zero Trust. This is a network security/infra role. Complete mismatch - do not trust the title on Microsoft FDE siblings.",
|
"note": "MISLABELLED REQ. Title says Principal Forward Deployed Engineer - Data Scientist - German Speaking, but required quals are network engineering: BGP, MPLS, SD-WAN, IPv4/IPv6, Palo Alto firewalls, Azure Virtual WAN, DNS/DHCP, load balancers, IDS/IPS, Zero Trust. This is a network security/infra role. Complete mismatch - do not trust the title on Microsoft FDE siblings.",
|
||||||
"date": "2026-08-18"
|
"date": "2026-08-18"
|
||||||
|
},
|
||||||
|
"https://jobs.sbb.ch/v2/offene-stellen/data-engineer-m-w-d-asset-management-infrastrukturanlagen/45fa2411-31dc-4520-827e-1c93a527534c": {
|
||||||
|
"company": "",
|
||||||
|
"title": "",
|
||||||
|
"decision": "applied",
|
||||||
|
"note": "Submitted 2026-08-25. Core, Evidence Fit 79, Document Quality 92, hard gate PASS. 2pp English resume, no CL (SBB waives); Tier 1 query-performance fix was already applied 2026-08-21. Anforderungsniveau K band status at submission: unconfirmed.",
|
||||||
|
"date": "2026-08-25"
|
||||||
|
},
|
||||||
|
"https://jobs.ashbyhq.com/snowflake/3eea87fa-73c8-46dc-b69b-7beb438b48d8": {
|
||||||
|
"company": "Snowflake",
|
||||||
|
"title": "Senior Software Engineer, Enterprise (Observe by Snowflake)",
|
||||||
|
"decision": "closed_no_response",
|
||||||
|
"note": "CLOSED 2026-08-25 by user decision at 80 days silent (sent 2026-06-06, ~86/100, 2pp resume + 1pp CL, cold channel). NO rejection was ever received - this is a presumed-dead call, not a recorded rejection; do not count it in rejection statistics. 80 days exceeds the longest real disposition in the log (Equinor, 79). Pre-dates the evidence-first-2026-01 cohort, so no cohort slot is freed.",
|
||||||
|
"date": "2026-08-25"
|
||||||
|
},
|
||||||
|
"https://jobs.ashbyhq.com/snowflake/db4f0492-ae21-49b7-a7eb-100be61e92bb": {
|
||||||
|
"company": "Snowflake",
|
||||||
|
"title": "Senior Software Engineer - Observe by Snowflake, Metrics Platform",
|
||||||
|
"decision": "maybe",
|
||||||
|
"note": "UNPAUSED 2026-08-25: the blocking reason is gone - the Enterprise/Observe application it was stacked behind was closed no-response at 80 days. Strong Observe metrics/data-platform overlap, CHF 176-253k band, Zurich-commutable. Caveat: the prior cold submit to this org drew zero response despite an ~86/100 package, so do not simply cold-apply again - route via recruiter or a warm contact.",
|
||||||
|
"date": "2026-08-25"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
Data Engineer (m/w/d) - Asset Management Infrastrukturanlagen
|
||||||
|
Jetzt bewerben
|
||||||
|
Beweg die Schweiz mit uns.
|
||||||
|
Data Engineer (m/w/d) - Asset Management Infrastrukturanlagen
|
||||||
|
Bern / Work Smart, ab sofort oder nach Vereinbarung, 60-100%
|
||||||
|
Jetzt bewerben
|
||||||
|
Darauf kannst du dich freuen.
|
||||||
|
Benefits wie kostenloses GA, vergünstigtes Reisen im Ausland - auch für die Familie - findest du auf unserer Website unter Benefits.
|
||||||
|
Das kannst du bewegen.
|
||||||
|
In dieser spannenden Rolle baust du Datenpipelines auf, betreibst und entwickelst sie weiter auf der Enterprise Analytics Plattform der SBB, die Batch- und Streaming-Ansätze vereint.
|
||||||
|
Unterschiedlichste Datenquellen integrierst du via APIs/Kafka und ermöglichst damit Analysen, Dashboards sowie vorausschauende Wartung.
|
||||||
|
Datenprodukte und semantische Modelle gestaltest du auf Snowflake und Power BI.
|
||||||
|
Du entwickelst RAMSI weiter – von der Webanwendung (Java Spring Boot/Angular) über Reports bis hin zu Dashboards für unsere Fachspezialist:innen.
|
||||||
|
In enger Zusammenarbeit mit dem Business nimmst du Anforderungen auf und sorgst für nachhaltige Lösungen im Betrieb.
|
||||||
|
Dein Wissen und deine Erfahrung teilst du im Team und trägst zur fachlichen Weiterentwicklung bei.
|
||||||
|
Das bringst du mit.
|
||||||
|
Starke Kommunikationsfähigkeiten und Teamorientierung mit der Bereitschaft, gemeinsam mit unseren Fachspezialist:innen konkrete Lösungen zu erarbeiten und die fachliche Entwicklung anderer Dateningenieur:innen zu fördern.
|
||||||
|
Agile, selbständige und lösungsorientierte Arbeitsweise mit ausgeprägter Verlässlichkeit und Bereitschaft, Verantwortung für die Qualität und Nachhaltigkeit technischer Lösungen zu übernehmen.
|
||||||
|
Mehrjährige praktische Erfahrung im Entwurf, Aufbau, der Entwicklung und dem Betrieb cloudbasierter Datenplattformen mit modernem Data Stack (ETL/ELT, Data Warehouses, Streaming, Orchestrierung – z. B. Snowflake, DBT, Helm, Argo Workflows, Kafka).
|
||||||
|
Fähigkeit, skalierbare und kosteneffiziente Datenarchitekturen zu entwerfen und Trade-offs zwischen Latenz, Konsistenz und Kosten kritisch zu beurteilen.
|
||||||
|
Erfahrung in Datenmodellierung (Star-/Snowflake-Modelle) und Reporting mit Power BI, fortgeschrittene SQL-Kenntnisse sowie Kenntnisse zur Abfrageleistungsoptimierung.
|
||||||
|
Software-Engineering-Fähigkeiten in Python, inklusive Tests, CI/CD, Packaging- und Deployment-Best-Practices.
|
||||||
|
Dein Lohn und deine Benefits.
|
||||||
|
|
||||||
|
Wir haben ein faires und fortschrittliches Lohnsystem und setzen uns aktiv für Lohngleichheit ein. Deshalb sind weiterführende und detaillierte Informationen zum Lohnsystem bei der SBB transparent einsehbar. Diese Stelle befindet sich im Anforderungsniveau K, Regionalzulage Stufe 1. Mehr zu Lohn und Benefits.
|
||||||
|
|
||||||
|
Damit gelingt der Einstieg.
|
||||||
|
|
||||||
|
Dass du mit uns die Schweiz bewegen willst, ist für uns die grösste Motivation. Darum verzichten wir bei dieser Stelle auf ein Motivationsschreiben. Falls du uns deine Motivation dennoch mitteilen möchtest, hast du in unserem Bewerbungstool nach wie vor die Möglichkeit dazu.
|
||||||
|
|
||||||
|
Grosses machen ist einfacher per du. Das beginnt bereits bei deiner Bewerbung.
|
||||||
|
|
||||||
|
So geht's weiter.
|
||||||
|
|
||||||
|
Bewerbung
|
||||||
|
|
||||||
|
Virtuelles Kennenlernen mit HR und Führungskraft
|
||||||
|
|
||||||
|
Persönliches Kennenlernen
|
||||||
|
|
||||||
|
Finaler Entscheid
|
||||||
|
|
||||||
|
Noch Fragen?
|
||||||
|
Zum Bewerbungsprozess
|
||||||
|
SBB Recruiting Support
|
||||||
|
Telefon + 41 51 220 20 29
|
||||||
|
recruiting@sbb.ch
|
||||||
|
|
||||||
|
#einfachDu
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
FAQ zur Bewerbung
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Zur Stelle
|
||||||
|
Job ID 103755
|
||||||
|
|
||||||
|
Andri Wienandts, People Leader
|
||||||
|
Telefon +41 79 364 62 53
|
||||||
|
|
||||||
|
|
||||||
|
Bewerbungen per E-Mail können leider nicht berücksichtigt werden.
|
||||||
|
|
||||||
|
Für diese Stelle nehmen wir keine Dossiers von Personalvermittlern entgegen.
|
||||||
|
|
||||||
|
Das bieten wir.
|
||||||
|
Benefits
|
||||||
|
Wo immer möglich setzen wir auf flexible Arbeitszeiten und moderne Arbeitszeitmodelle. Darüber hinaus sind wir als Arbeitgeberin auch flexibel, wenn es darum geht, dein Berufsleben mit deinem Privatleben in Einklang zu bringen.
|
||||||
|
|
||||||
|
Mehr erfahren
|
||||||
|
Unterschiede willkommen
|
||||||
|
Mit über 150 verschiedenen Berufen bieten wir eine beeindruckende Vielfalt an Einstiegs- und Entwicklungsmöglichkeiten. Ebenso vielfältig sind unsere Mitarbeitenden. Darum engagieren wir uns dafür dass alle Mitarbeitenden ihre individuellen Stärken und Denkweisen einbringen können.
|
||||||
|
|
||||||
|
Mehr erfahren
|
||||||
|
Karriere und Entwicklung
|
||||||
|
Wir fördern unsere Mitarbeitenden entlang ihren persönlichen Bedürfnissen und Ambitionen. Dafür stellen wir ein breites Angebot an fach- und bereichsübergreifenden Weiterbildungsangeboten zur Verfügung. An ausgewählten externen Weiterbildungen, beteiligen wir uns finanziell und zeitlich.
|
||||||
|
|
||||||
|
Mehr erfahren
|
||||||
|
Wir bewegen heute schon Grosses.
|
||||||
|
Jetzt bewerben
|
||||||
|
Grosses bewegen.
|
||||||
@@ -0,0 +1,166 @@
|
|||||||
|
# Critique — SBB, Data Engineer (m/w/d), Asset Management Infrastrukturanlagen
|
||||||
|
|
||||||
|
**Date:** 2026-08-21 · **Job ID:** 103755 · **Package:** 2-page English resume, no cover letter (SBB waives it)
|
||||||
|
**Documents reviewed:** `e2e_sbb_data_engineer_asset_mgmt_resume.tex` → `.pdf` (2 pages)
|
||||||
|
**JD:** `JD_SBB_DataEngineer_AssetMgmt.txt` — verbatim Playwright scrape 2026-08-21, live posting. **JD integrity: PASS.**
|
||||||
|
|
||||||
|
> **Framework note.** `.claude/skills/critique/SKILL.md` Part 3 asks for a single 8-dimension score including a 10% Publications weight. That conflicts with `critique_framework.md` ("Never collapse candidate-role fit and document polish into one score") and with CLAUDE.md ("Record Evidence Fit, Document Quality, and Channel Strength separately; never collapse them into one optimistic score"). **CLAUDE.md and `critique_framework.md` govern**, so this critique reports three separate scores. The Publications dimension is not applicable — this is a resume for an industry role and Dennis has no publications. The skill's genuinely useful lenses (reader sequence, tiered fixes, interview bridges, mechanical verification) are retained below.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Fit verdict and hard-gate audit
|
||||||
|
|
||||||
|
**Hard gate: PASS.** No minimum qualification is a Gap. The title-defining capability — build and operate cloud data pipelines and governed data products — is Direct and current. No clearance, relocation, language or authorization issue.
|
||||||
|
|
||||||
|
**Evidence Fit: 79/100 — Core (lower end).** Unchanged from Phase 0; a document cannot change candidate-role fit. Full dimension table is in the session file. The binding constraint is not fit but **level**: this seat sits below current Staff + Component Owner scope (scored 9/15), the same shape declined at BKW.
|
||||||
|
|
||||||
|
**Unresolved practical constraint:** Anforderungsniveau K is a capped GAV band with no published figures. Not a fit failure, but it is the decision gate.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Document Quality: 90/100
|
||||||
|
|
||||||
|
| Dimension | Weight | Score | Assessment |
|
||||||
|
|---|---:|---:|---|
|
||||||
|
| Truth and provenance | 25 | **24** | Every bullet traces to a canonical claim ID. Validator PASS (0 warnings). SW-1 scoped to "pipelines in the Fulfillment and Product Analysis domains" + "contributing to the wider company migration programme"; SW-7 builds *data products* **within** the mesh, never the mesh. Compass and Spotfire correctly scoped as practitioner and co-owner. No unverified metric anywhere. |
|
||||||
|
| Information hierarchy | 20 | **19** | Employer bold first, dates on the same line, title and location second, promotion shown. The guarded page break keeps every page's content under its own header. Minus one: the M.Eng. entry wraps onto two lines in the FIXED Education block, pushing its date to the second line. |
|
||||||
|
| Bullet evidence and impact | 20 | **16** | Bullets are specific, scoped and verb-accurate. **Zero quantified outcomes anywhere in the document** — the correct call given every canonical metric is `unverified`, but it is still a real cost against competitors who will quantify. Bullet 5 carries two accomplishments (delivery; automation + RCA) — at the limit, not over it. |
|
||||||
|
| Relevance and terminology | 15 | **11** | Covers most JD vocabulary naturally. Three cheap, *honestly available* terms are missing (see Tier 1/2). The largest terms cannot be carried at all. |
|
||||||
|
| Skills evidence | 10 | **10** | Six lines, every entry canonical `allowed` or `allowed-with-context`, every one interview-ready. No self-ratings. No tool listed merely because the JD says it. |
|
||||||
|
| Mechanics and readability | 10 | **10** | Compiles to exactly 2 pages. No clipping, overlap, orphaned heading or bad break. Umlauts render correctly. Bullets run 20–31 words with natural variation; none exceeds 35. |
|
||||||
|
| **Total** | **100** | **90** | Strong. Truth/provenance is well above the 8/10 automatic-failure line. |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Channel Strength: **Weak** — but uniquely upgradeable
|
||||||
|
|
||||||
|
Currently a tailored cold application, same as every entry in the log. **This is the first posting in the entire history that publishes a named hiring contact with a direct mobile number** (Andri Wienandts, People Leader, +41 79 364 62 53). One call moves this to Moderate. Given that cold-channel outcomes have been uniformly poor — Google 1 day, Microsoft ISE 39 days, Equinor 79 days, all no-interview — the channel is a higher-leverage variable than any remaining document edit.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. ATS / parser read
|
||||||
|
|
||||||
|
Extraction is clean; the layout is conventional and machine-readable. Term coverage against the JD:
|
||||||
|
|
||||||
|
**Present and natural:** ETL/ELT, Kafka, Airflow, streaming, data modelling, SQL, Python, tests, CI/CD, packaging, deployment, data products, Kubernetes, Docker, data governance, data quality, on-call, production operation, stakeholders, training, Teradata, Oracle, AWS, anomaly detection.
|
||||||
|
|
||||||
|
**Absent and honestly addable — the actionable finding:**
|
||||||
|
|
||||||
|
| Term | Status | Canonical support |
|
||||||
|
|---|---|---|
|
||||||
|
| query performance optimization | **0 occurrences** | BS-2's 3L variant: "optimized query performance and data availability". The JD names it in a *required* line. |
|
||||||
|
| agile | **0 occurrences** | SW-3 and SW-4 both record "agile DevOps team". The JD's second required line opens with "Agile ... Arbeitsweise". |
|
||||||
|
| API | **0 occurrences** | The JD says "Datenquellen integrierst du via APIs/Kafka". Kafka is covered; APIs are not. SW-7 onboards source systems. |
|
||||||
|
|
||||||
|
**Absent and NOT addable — accepted risk:** Snowflake, dbt, Argo Workflows, Helm, Power BI, Spring Boot, Angular, *predictive maintenance*, *asset management*. An automated screen keyed on any of these rejects the document, and nothing honest changes that. Note "asset management" appears once in a source-file **comment** only, not in rendered text.
|
||||||
|
|
||||||
|
> **On "predictive maintenance" specifically:** the phrase is deliberately absent. The nearest honest evidence is anomaly detection on streamed logs (PoC), defect classification, and a 2013 master's thesis on vibration-based condition monitoring that `claims.json` explicitly forbids presenting as a validated system. The Education block does carry the thesis title — *Development of a Web-Based Remote Fault Diagnosis System* — which is factual and does real work here without any claim being made. **Do not insert the term.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Reader sequence
|
||||||
|
|
||||||
|
| Reader | Verdict | Reason |
|
||||||
|
|---|---|---|
|
||||||
|
| **Parser / ATS** | Pass, with one exposure | Clean extraction and strong general term coverage; fails any screen keyed on the three named products. |
|
||||||
|
| **Recruiter (10s)** | **Forward** | Bern-local Staff engineer at Swisscom, German native, exact title match, no permit question. Nothing to disqualify. |
|
||||||
|
| **Hiring manager (2min)** | **Interview — probable** | The lead bullet is Component Ownership with on-call, quality and governance. That is this JD's "Betrieb" line answered by someone doing it today at a peer Swiss enterprise. |
|
||||||
|
| **Technical reviewer (10min)** | **Credible** | Expect two challenges: (1) "You have not used Snowflake or dbt — map your Teradata/Glue/Athena work onto them." (2) "How would you model a semantic layer over asset condition data?" Both are answerable; neither is bluffable. |
|
||||||
|
|
||||||
|
**Ceiling analysis.** The document is not the limiting factor — Document Quality 90 with a clean provenance record. The ceiling is set by (a) the three unnameable products, (b) the level inversion, and (c) a cold channel. Only (c) is under your control this week.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Competitive read
|
||||||
|
|
||||||
|
The obvious-fit competitor is a Swiss data engineer with 5+ years on the exact named stack, ideally already inside a transport, utility or infrastructure operator, and willing to maintain a Java/Angular internal web application. That last trait thins the field considerably — most pure data engineers do not want it.
|
||||||
|
|
||||||
|
**Dennis's real advantage:** he performs the operational half of this role today, in the same city, at comparable enterprise scale — plus a combination that is genuinely rare for this particular req: industrial sensor and asset data (defect records, wafer inspection images, PCM electrical parameters), anomaly detection over streamed logs, and containerized delivery into a continuously operating 24/7 environment.
|
||||||
|
|
||||||
|
**Their real advantage:** named-product fluency, and rail-domain vocabulary (asset taxonomy, EN 50126 RAMS, the swissTAMP/RIS ecosystem).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Claim audit
|
||||||
|
|
||||||
|
| Claim | Canonical ID | Direct/Adjacent | Safe? | Note |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| "Own Fulfillment ETL pipeline components as Component Owner" | SW-2 | Direct | ✅ | Allowed verb "own"; object scoped to components. |
|
||||||
|
| "Migrated pipelines in the Fulfillment and Product Analysis domains… contributing to the wider company migration programme" | SW-1 | Direct | ✅ | Scoped object + hedged programme reference. Avoids all four SW-1 forbidden phrasings. |
|
||||||
|
| "Build and model governed data products within Swisscom's company-wide Data Mesh" | SW-7 | Direct | ✅ | Verbs "build"/"model"/"onboard"/"maintain" all allowed; mesh is the container, never the object. |
|
||||||
|
| "active metadata and lineage (Atlassian Compass)" | SW-7 | Direct | ✅ | Practitioner framing; no admin/rollout/ownership claim. |
|
||||||
|
| "Build and operate Python data applications on Kubernetes with GitLab CI/CD" | SW-3 | Direct | ✅ | |
|
||||||
|
| "Integrated containerized ML inference… replacing manual image-based defect classification" | BS-1 | Direct | ✅ | "Integrated" not "trained"; no model-development claim. |
|
||||||
|
| "Built an anomaly-detection proof of concept" | BS-4 | Adjacent | ✅ | **PoC label retained** as required. |
|
||||||
|
| "Co-owned the TIBCO Spotfire environment… co-presented" | BS-5 | Direct | ✅ | Co-ownership and co-presentation both preserved. |
|
||||||
|
| "Served as Application Owner… defining SLOs" | BS-3 | Direct | ✅ | |
|
||||||
|
| Summary: "Component Ownership covering data quality, governance and on-call operation" | SW-2 | Direct | ✅ | No scale or impact inflation. |
|
||||||
|
|
||||||
|
**No Tier 1 truth findings.** Security Champion correctly omitted. No LOC or test counts. No fabricated tools.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Tiered improvements
|
||||||
|
|
||||||
|
### Tier 1 (≥1 pt) — ✅ RESOLVED 2026-08-21
|
||||||
|
1. ~~**Add query-performance optimization to BS-2.**~~ The JD names "Kenntnisse zur Abfrageleistungsoptimierung" in a *required* line and the document was silent on it, despite canonical support in BS-2's 3L variant. **FIXED:** BS-2 now reads "…tuning query performance for analysis teams working with semiconductor manufacturing data…", and "query performance tuning" was added to the Pipelines skills line. Two occurrences where there were zero. Validator re-run PASS, still 2 pages.
|
||||||
|
|
||||||
|
### Tier 2 (0.3–0.9 pt)
|
||||||
|
2. ~~**Surface "agile"**~~ — ✅ **RESOLVED 2026-08-21.** SW-3's canonical 2L variant records "in an agile DevOps team"; that phrase is now in the SW-3 bullet. The JD's second required line opens with *Agile … Arbeitsweise*.
|
||||||
|
3. **Name APIs alongside Kafka** in the SW-7 onboarding bullet, matching the JD's "via APIs/Kafka". **NOT APPLIED — deliberately.** `claims.json` SW-7 records "onboard source systems" with no mention of APIs, and SW-2's ingestion is Oracle → Kafka. There is no canonical evidence that source onboarding used APIs, so adding the term would be vocabulary substitution, exactly what `ai_fingerprint_rules.md` §5 forbids. **Only add if Dennis confirms from memory that it is true.**
|
||||||
|
|
||||||
|
### Tier 3 (<0.3 pt)
|
||||||
|
4. The M.Eng. Education entry wraps to two lines, orphaning its date. FIXED section — flagged, not edited.
|
||||||
|
5. Consider whether "Staff Data Engineer" in the headline should read "Staff Data, Analytics & AI Engineer" to match the employer's formal title exactly. Current form is a permitted normalization and reads better against this JD; no change recommended.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. Interview bridge points
|
||||||
|
|
||||||
|
1. **Snowflake / dbt.** "I have not used them by name. I have run the same shape of work on Teradata and Oracle, then on Glue, Athena with Iceberg and Redshift, with Airflow for orchestration — modelling, testing and lineage discipline transfer; the syntax is what I would pick up."
|
||||||
|
2. **Power BI.** "I co-owned a BI platform rather than just consuming one — TIBCO Spotfire at Bosch, including C# extensions and wafer-map visualizations, which I co-presented at TIBCO Analytics Forum 2022."
|
||||||
|
3. **Predictive maintenance.** Lead with Bosch sensor and process data and the ELK/Kafka anomaly-detection PoC. The master's thesis on vibration-based condition monitoring is a genuine interest signal — **describe it as a methods prototype, never as a validated system.**
|
||||||
|
4. **RAMSI / Spring Boot / Angular.** Be straightforward: Java is professional but historical, Spring Boot was a PoC contribution roughly a decade ago, Angular is absent. Better to ask what share of the role this actually is than to oversell it.
|
||||||
|
5. **The level question, asked of them.** "The posting reads as a senior IC seat. Does it carry design ownership for the pipelines and the semantic layer, or is the architecture set elsewhere?" This is diligence, and it also surfaces whether the seat can grow.
|
||||||
|
6. **Anforderungsniveau K.** Ask directly for the band range for this level with Regionalzulage Stufe 1. It is a published, collectively-bargained system — asking is normal, not pushy.
|
||||||
|
7. **Why leave Swisscom.** Have an answer ready that is about the work (physical infrastructure, asset condition data, a visible public mission) rather than about the pay band, since the pay band is likely lower.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10. Cover letter
|
||||||
|
|
||||||
|
**Not provided — correctly.** SBB states: *"Darum verzichten wir bei dieser Stelle auf ein Motivationsschreiben."* Under the `cl_reference.md` gate a letter is written only when required or when it adds what the resume cannot. Neither holds, and submitting one anyway would signal the posting was not read.
|
||||||
|
|
||||||
|
**Does the resume stand alone? Yes.** The lead bullet delivers the operator identity within the first ten seconds, the skills block resolves the stack question, and the Bosch block carries the domain thread without a letter needing to explain it. The one thing a letter could have added — motivation for a lateral move to a public infrastructure operator — is better delivered on the phone call, where it can be a conversation instead of an assertion.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 11. Mechanical verification
|
||||||
|
|
||||||
|
- [x] Canonical validator: **PASS**, 0 warnings
|
||||||
|
- [x] Compiles: **2 pages**, exactly as required
|
||||||
|
- [x] `pdftotext` order verified: employer → dates → title → location on every entry
|
||||||
|
- [x] Both pages visually inspected: no clipping, overlap, tiny text, isolated heading or awkward break
|
||||||
|
- [x] Umlauts (Universität, München) render correctly
|
||||||
|
- [x] Forbidden-token scan: none of the seven non-canonical JD tools present in the document
|
||||||
|
- [x] Scope-discipline scan: no full-ownership verb paired with an org-scale object
|
||||||
|
- [x] Email is `dennis@thiessen.io` per config
|
||||||
|
- [x] No date of birth, marital status, gender, children, or photo
|
||||||
|
- [x] Certifications listed once; no duplication
|
||||||
|
- [x] Bullet lengths 20–31 words, natural variation, none over 35
|
||||||
|
- [x] No LOC counts, no test counts, no unverified metric
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 12. Verdict
|
||||||
|
|
||||||
|
| Axis | Result |
|
||||||
|
|---|---|
|
||||||
|
| **Hard gate** | PASS |
|
||||||
|
| **Evidence Fit** | 79/100 — Core, lower end |
|
||||||
|
| **Document Quality** | 90/100 |
|
||||||
|
| **Channel Strength** | Weak (upgradeable to Moderate with one phone call) |
|
||||||
|
|
||||||
|
**The document is ready.** One Tier 1 fix is worth making (query performance optimization) and two Tier 2 terms are cheap. None of them is blocking.
|
||||||
|
|
||||||
|
**The package is not the constraint — the decision is.** Do not submit before the Anforderungsniveau K answer. A 90-quality document against a capped band that lands near current compensation is effort spent to create a decision you have already made twice (BKW, and the standing 180k bar). Make the call first.
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
% SBB — Data Engineer (m/w/d), Asset Management Infrastrukturanlagen (Job ID 103755)
|
||||||
|
% Profile: International Tech, English, 2 pages. Languages line names German as mother tongue
|
||||||
|
% per user instruction 2026-08-21.
|
||||||
|
% Generated from resume_builder/canonical/claims.json + normalized experience files.
|
||||||
|
% Seven tools named in the JD are non-canonical and are deliberately absent from this
|
||||||
|
% document; they are listed and bridged in the session file's Gap Assessment. Do not
|
||||||
|
% reintroduce them here, not even in a comment -- the validator scans raw file text.
|
||||||
|
|
||||||
|
\documentclass{resume}
|
||||||
|
\usepackage[utf8]{inputenc}
|
||||||
|
\usepackage[T1]{fontenc}
|
||||||
|
\usepackage{lmodern}
|
||||||
|
\usepackage[a4paper,left=0.65in,right=0.65in,top=0.55in,bottom=0.55in]{geometry}
|
||||||
|
\usepackage{xcolor}
|
||||||
|
\usepackage{hyperref}
|
||||||
|
\hypersetup{hidelinks}
|
||||||
|
\usepackage[version=4]{mhchem}
|
||||||
|
\usepackage{fancyhdr}
|
||||||
|
\pagestyle{fancy}
|
||||||
|
\fancyhf{}
|
||||||
|
\renewcommand{\headrulewidth}{0pt}
|
||||||
|
\fancyfoot[R]{\small \thepage/\pageref{LastPage}}
|
||||||
|
|
||||||
|
\name{Dennis Thiessen, M.Eng.}
|
||||||
|
\headline{Staff Data Engineer $\vert$ Cloud Data Platforms $\vert$ Pipeline Ownership \& Governed Data Products}
|
||||||
|
\contactline{Bern, Switzerland $\vert$ \href{mailto:dennis@thiessen.io}{dennis@thiessen.io} $\vert$ +41 795 955 585 $\vert$ \href{https://linkedin.com/in/dennis-thiessen}{LinkedIn}}
|
||||||
|
|
||||||
|
\begin{document}
|
||||||
|
|
||||||
|
\begin{rSection}{Summary}
|
||||||
|
Staff data engineer who builds and runs production data pipelines and governed data products on AWS at Swisscom, with Component Ownership covering data quality, governance and on-call operation. Earlier work at Bosch centred on semiconductor manufacturing data -- defect records, wafer inspection images and electrical parameter tests -- and on anomaly detection over streamed logs.
|
||||||
|
\end{rSection}
|
||||||
|
|
||||||
|
\begin{rSection}{Technical Skills}
|
||||||
|
\skillline{Programming}{Python, SQL, PySpark; Java and C\# (professional, historical)}
|
||||||
|
\skillline{Pipelines and streaming}{Apache Kafka, Apache Airflow, ETL/ELT, data modelling, query performance tuning, Oracle, Teradata, Hadoop/Impala}
|
||||||
|
\skillline{Cloud and platform}{AWS (S3, Glue, Athena/Iceberg, Redshift, Lambda, Step Functions), CloudFormation, Kubernetes, Docker, GitLab CI/CD, Ansible}
|
||||||
|
\skillline{Data products and analytics}{Data Mesh data products, active metadata and lineage (Atlassian Compass), data governance; TIBCO Spotfire (co-owned, C\# extensions), Grafana, Prometheus, ELK (proof of concept)}
|
||||||
|
\skillline{Certifications}{AWS Solutions Architect -- Associate; Data Engineering with AWS; iSAQB CPSA-F; ITIL Foundation}
|
||||||
|
\skillline{Languages}{German (native), English (fluent)}
|
||||||
|
\end{rSection}
|
||||||
|
|
||||||
|
\begin{rSection}{Professional Experience}
|
||||||
|
|
||||||
|
\begin{rSubsection}{Swisscom (Schweiz) AG}{Oct 2023 -- Present}{Staff Data, Analytics \& AI Engineer (promoted from Senior, Apr 2025)}{Bern, Switzerland}
|
||||||
|
\item Own Fulfillment ETL pipeline components as Component Owner, covering production operation, data quality, governance, incident handling and on-call duty across Oracle, Kafka, Python and Teradata processing.
|
||||||
|
\item Migrated pipelines in the Fulfillment and Product Analysis domains onto Swisscom's AWS platform using Glue, Athena with Apache Iceberg, Redshift, Airflow and CloudFormation, contributing to the wider company migration programme.
|
||||||
|
\item Build and model governed data products within Swisscom's company-wide Data Mesh, onboarding source systems and maintaining active metadata and lineage so downstream teams can find and reuse data.
|
||||||
|
\item Build and operate Python data applications on Kubernetes with GitLab CI/CD in an agile DevOps team, covering automated tests, packaging and deployment from development through production operation.
|
||||||
|
\item Gather requirements with business stakeholders and deliver data products, analyses and dashboards; automate recurring technical processes and run root-cause analysis under 2nd- and 3rd-level support.
|
||||||
|
\end{rSubsection}
|
||||||
|
\end{rSection}
|
||||||
|
|
||||||
|
\newpage
|
||||||
|
|
||||||
|
\begin{rSection}{Professional Experience (continued)}
|
||||||
|
\begin{rSubsection}{Robert Bosch Semiconductor Manufacturing Dresden GmbH}{Feb 2020 -- Dec 2022}{Senior Engineer, Data Analysis (Data Engineering)}{Dresden, Germany}
|
||||||
|
\item Developed Python, Java and C\# data services over Oracle and Hadoop/Impala, tuning query performance for analysis teams working with semiconductor manufacturing data -- defect-management records, wafer inspection images and electrical parameters from process control monitoring.
|
||||||
|
\item Served as Application Owner for analytics applications and upstream pipelines, defining SLOs, coordinating vendors and delivering user training and documentation.
|
||||||
|
\item Integrated containerized ML inference with Docker, Kubernetes and Ansible into a continuously operating semiconductor-fab environment, replacing manual image-based defect classification.
|
||||||
|
\item Built an anomaly-detection proof of concept on Elasticsearch, Logstash, Kibana and Kafka, with Grafana, Prometheus and Loki monitoring for continuously operating manufacturing systems.
|
||||||
|
\item Co-owned the TIBCO Spotfire environment, built C\# extensions and wafer-map visualizations, and co-presented the work at TIBCO Analytics Forum 2022.
|
||||||
|
\end{rSubsection}
|
||||||
|
|
||||||
|
\begin{rSubsection}{Fraunhofer CML}{Sep 2018 -- Oct 2019}{Research Software Engineer}{Hamburg, Germany}
|
||||||
|
\item Set up Jenkins CI/CD with quality gates, developed C\#/.NET software for a maritime crew-scheduling system and built containerized microservices for a research data-exchange platform.
|
||||||
|
\end{rSubsection}
|
||||||
|
|
||||||
|
\begin{rSubsection}{Vizrt}{Jul 2017 -- May 2018}{Test Automation / DevOps Engineer}{Bergen, Norway}
|
||||||
|
\item Developed automated audio/video integration and unit tests in Python and connected them as quality gates in the CI/CD pipeline.
|
||||||
|
\end{rSubsection}
|
||||||
|
|
||||||
|
\begin{rSubsection}{Generali Deutschland Informatik Services GmbH}{May 2015 -- Jun 2017}{IT Consultant}{Hamburg, Germany}
|
||||||
|
\item Introduced BDD test automation through a proof of concept, held technical responsibility for the suite and Jenkins jobs, and trained colleagues in the Java community.
|
||||||
|
\end{rSubsection}
|
||||||
|
|
||||||
|
\end{rSection}
|
||||||
|
|
||||||
|
\begin{rSection}{Education}
|
||||||
|
\compactentry{M.Eng. Computer Aided Engineering (Software Design \& Engineering), Universität der Bundeswehr München}{Apr 2012 -- Oct 2013}
|
||||||
|
Thesis at Tongji University, Shanghai: \textit{Development of a Web-Based Remote Fault Diagnosis System}; grade 1.0.
|
||||||
|
|
||||||
|
\compactentry{B.Eng. Information and Telecommunication Technologies, Universität der Bundeswehr München}{Oct 2009 -- Oct 2012}
|
||||||
|
\end{rSection}
|
||||||
|
|
||||||
|
\end{document}
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
\ProvidesClass{resume}[2026/07/27 Evidence-first professional resume]
|
||||||
|
\LoadClass[11pt,a4paper]{article}
|
||||||
|
|
||||||
|
\RequirePackage{enumitem}
|
||||||
|
\RequirePackage{ifthen}
|
||||||
|
\RequirePackage{lastpage}
|
||||||
|
\RequirePackage{parskip}
|
||||||
|
\RequirePackage{needspace}
|
||||||
|
|
||||||
|
\pagestyle{empty}
|
||||||
|
\setlength{\parindent}{0pt}
|
||||||
|
|
||||||
|
\def\@resumename{}
|
||||||
|
\def\@resumeheadline{}
|
||||||
|
\def\@resumecontact{}
|
||||||
|
|
||||||
|
\newcommand{\name}[1]{\def\@resumename{#1}}
|
||||||
|
\newcommand{\headline}[1]{\def\@resumeheadline{#1}}
|
||||||
|
\newcommand{\contactline}[1]{\def\@resumecontact{#1}}
|
||||||
|
|
||||||
|
\newcommand{\printresumeheader}{%
|
||||||
|
{\LARGE\bfseries \@resumename}\par
|
||||||
|
\vspace{0.15em}
|
||||||
|
\ifthenelse{\equal{\@resumeheadline}{}}{}{\@resumeheadline\par}
|
||||||
|
\vspace{0.1em}
|
||||||
|
{\small \@resumecontact}\par
|
||||||
|
\vspace{0.45em}
|
||||||
|
}
|
||||||
|
|
||||||
|
\AtBeginDocument{\printresumeheader}
|
||||||
|
|
||||||
|
\newenvironment{rSection}[1]{%
|
||||||
|
\vspace{0.35em}
|
||||||
|
{\bfseries #1}\par
|
||||||
|
\vspace{0.1em}\hrule\vspace{0.35em}
|
||||||
|
}{%
|
||||||
|
\vspace{0.2em}
|
||||||
|
}
|
||||||
|
|
||||||
|
% Arguments: employer, dates, formal title, location.
|
||||||
|
\newenvironment{rSubsection}[4]{%
|
||||||
|
\Needspace{6\baselineskip}%
|
||||||
|
{\bfseries #1}\hfill{\small #2}\par
|
||||||
|
{\itshape #3}\hfill{\itshape #4}\par
|
||||||
|
\vspace{0.1em}
|
||||||
|
\begin{itemize}[leftmargin=1.25em,label=\textbullet,itemsep=0.18em,topsep=0.15em,parsep=0pt,partopsep=0pt]
|
||||||
|
}{%
|
||||||
|
\end{itemize}
|
||||||
|
\vspace{0.25em}
|
||||||
|
}
|
||||||
|
|
||||||
|
\newcommand{\skillline}[2]{%
|
||||||
|
\textbf{#1:} #2\par
|
||||||
|
\vspace{0.08em}
|
||||||
|
}
|
||||||
|
|
||||||
|
\newcommand{\compactentry}[2]{%
|
||||||
|
\textbf{#1}\hfill #2\par
|
||||||
|
}
|
||||||
@@ -0,0 +1,297 @@
|
|||||||
|
# Session: SBB (Schweizerische Bundesbahnen) — Data Engineer (m/w/d), Asset Management Infrastrukturanlagen
|
||||||
|
|
||||||
|
## STATUS: SUBMITTED 2026-08-25
|
||||||
|
|
||||||
|
Application sent by the user on 2026-08-25 (2pp English resume, no cover letter — SBB waives it;
|
||||||
|
the Tier 1 query-performance fix was already applied on 2026-08-21, so the submitted document is
|
||||||
|
the 92/100 version). Cohort slot consumed: **Core 2/7** in `evidence-first-2026-01`.
|
||||||
|
|
||||||
|
**Submitted with the comp question still open.** The channel plan below called for phoning Andri
|
||||||
|
Wienandts *before* applying, and the critique's closing line advised against submitting ahead of the
|
||||||
|
Anforderungsniveau K answer. That did not gate the submission. Consequence, carried forward: the K
|
||||||
|
band and the design-scope question are now **screening-call topics, not pre-cleared facts**, and the
|
||||||
|
same is true of Kidz Care childcare support (SBB covers "bis zu 90 %" of Betreuungskosten but scales
|
||||||
|
it on *gross household income*, and the bracket table is intranet-only — assume far below 90 % at
|
||||||
|
this band). Prep an honest answer before any call rather than discovering the number in it.
|
||||||
|
|
||||||
|
## JD Integrity
|
||||||
|
- File/source: `JD_SBB_DataEngineer_AssetMgmt.txt` (this folder) — copied from `JDs/JD_SBB_DataEngineer_AssetMgmt.txt`
|
||||||
|
- Source URL: https://jobs.sbb.ch/v2/offene-stellen/data-engineer-m-w-d-asset-management-infrastrukturanlagen/45fa2411-31dc-4520-827e-1c93a527534c
|
||||||
|
- Retrieval method and date: Playwright headless scrape via `job_scout/.venv`, 2026-08-21 (board is a JS-rendered SPA; WebFetch is JS-blind on it)
|
||||||
|
- Verbatim posting: YES — full visible posting body, German original, no paraphrase
|
||||||
|
- Posting status: LIVE as of 2026-08-21. Discovered on the 2026-08-21 scout run, posted 2026-08-20. Job ID 103755.
|
||||||
|
- Named contact on posting: Andri Wienandts, People Leader, +41 79 364 62 53
|
||||||
|
- Notable: SBB explicitly waives the cover letter for this req ("verzichten wir bei dieser Stelle auf ein Motivationsschreiben")
|
||||||
|
|
||||||
|
## Application Decision
|
||||||
|
- Audience profile: **International Tech, in English** — user decision 2026-08-21. Phase 0 had provisionally recommended Swiss/DACH on the strength of the German-language posting and `#einfachDu` register; the user chose English, and since the document carries no photo and no demographic data, International Tech (the config default) is the coherent profile. The single Swiss/DACH element retained is an explicit **Languages line naming German as mother tongue**, at the user's instruction — it answers the obvious recruiter question on a German-language posting.
|
||||||
|
- Evidence Fit: **79/100**
|
||||||
|
- Fit class: **Core** (75+, no hard-gate failure)
|
||||||
|
- Hard gate: **PASS** — no minimum qualification is a Gap; the title-defining capability (build/operate cloud data pipelines and data products) is Direct and current; no clearance, relocation, language or authorization issue.
|
||||||
|
- Channel Strength: **Moderate (achievable)** — the posting names the People Leader with a direct mobile number. Every application in the log to date has been Weak/cold; this is the first with a published warm entry point. Rated Weak until the call actually happens.
|
||||||
|
- Channel plan: call Andri Wienandts **before** applying. Two questions to settle: (1) the Anforderungsniveau K salary band ceiling, (2) whether the seat carries architecture/design scope or is purely build-and-run.
|
||||||
|
- Cohort slot: Core would be **2/7** (Google SWE III consumed 1/7). Adjacent 1/2, Stretch 0/1 unchanged.
|
||||||
|
- Decision: **PROCEED to Phase 1 — but only after the comp question is answered.** The technical and practical fit is real and the hard gate passes cleanly. The blocker is not fit: it is that this seat is a lateral-or-below step in a capped federal pay band. If Anforderungsniveau K tops out near the current 140k, Phase 1 is wasted work no matter how good the framing is.
|
||||||
|
|
||||||
|
### Evidence Fit breakdown (per `critique_framework.md`)
|
||||||
|
| Dimension | Weight | Score | Reasoning |
|
||||||
|
|---|---:|---:|---|
|
||||||
|
| Required qualifications | 35 | **29** | 6 required lines. R1, R2, R3 (core), R6 Direct; R4 Direct–Adjacent; R5 split — SQL/modelling Direct, Power BI a named Gap. |
|
||||||
|
| Core responsibilities | 25 | **20** | P1, P2 (integration), P3 (data products), P5, P6 Direct; P2 predictive maintenance Adjacent-strong; **P4 (Spring Boot/Angular) a Gap**. |
|
||||||
|
| Level and ownership | 15 | **9** | The dimension asks whether title, decisions and leadership *match*. They do not: the seat sits **below** current Staff + Component Owner scope. Capability is not the issue — fit of level is. Revealed behaviour already rejected this exact shape once (BKW, same Bern tier, declined as a lateral), so scoring it as a near-match would contradict the Competitive Read below. |
|
||||||
|
| Recency and depth | 10 | **10** | The strongest evidence is his current job, at a peer Swiss enterprise, today. Nothing here is historical. |
|
||||||
|
| Domain/tool transfer | 10 | **6** | Snowflake, dbt, Argo, Helm, Power BI, Spring Boot, Angular all non-canonical. Each is individually substitutable and the JD says "z. B." — but seven named tools is a real deduction. |
|
||||||
|
| Practical constraints | 5 | **5** | Bern resident, German native, EU citizen + B permit, hybrid, no clearance. Best in the log. |
|
||||||
|
| **Total** | **100** | **79** | **Core** (75+), at the lower end. For calibration: Google SWE III 89, Kraken 87.2, MS ISE 85.8, MS Principal FDE 84.2, BIS 80.5, Aker BP 79, NATO JWC 77.5. Reads as *good fit with one unresolved blocker*, not *best fit in the log*. |
|
||||||
|
|
||||||
|
## ATS Keywords
|
||||||
|
|
||||||
|
Extracted from the JD. **Bold = canonical and safe to use.** Struck-through = named in the JD but **not canonical — must not appear in any output document.**
|
||||||
|
|
||||||
|
- **Core function:** **Data Engineer**, **Datenpipelines**, **ETL/ELT**, **Data Warehouse**, **Batch**, **Streaming**, **Orchestrierung**, **Datenprodukte**, Enterprise Analytics Plattform, semantische Modelle
|
||||||
|
- **Platform/cloud:** **cloudbasierte Datenplattformen**, **Kubernetes**, **Docker**, **AWS**, **CI/CD**, **GitLab CI/CD**, ~~Helm~~, ~~Argo Workflows~~
|
||||||
|
- **Data stack:** **Kafka**, **Airflow**, **PySpark**, **SQL**, **Datenmodellierung**, Star-/Snowflake-Schemata, **APIs**, ~~Snowflake~~, ~~dbt~~
|
||||||
|
- **Languages/SWE:** **Python**, **Tests**, **Packaging**, **Deployment**, **Java** (with context), ~~Spring Boot~~, ~~Angular~~
|
||||||
|
- **BI/reporting:** **Reporting**, **Dashboards**, **Abfrageleistungsoptimierung**, TIBCO Spotfire (canonical, as the bridge), ~~Power BI~~
|
||||||
|
- **Domain:** **Anlagenmanagement**, **Infrastrukturanlagen**, **vorausschauende Wartung / Predictive Maintenance**, **Sensordaten**, **Anomalieerkennung**, Zustandsdaten, RAMS, RAMSI
|
||||||
|
- **Ways of working:** **agil**, **Betrieb**, **Datenqualität**, **Governance**, **On-Call**, **Verantwortung**, **Mentoring / fachliche Entwicklung**, **Stakeholder**, Fachspezialist:innen
|
||||||
|
|
||||||
|
**ATS risk, stated plainly:** an automated screen keyed on the literals *Snowflake*, *dbt* or *Power BI* would reject this resume, because none of the three can honestly appear. That risk is accepted, not solvable — it is exactly the case the warm channel exists to bypass.
|
||||||
|
|
||||||
|
## Gap Assessment
|
||||||
|
|
||||||
|
| Gap | Severity | Why it is not a hard gate | How it is handled |
|
||||||
|
|---|---|---|---|
|
||||||
|
| **Snowflake** | Medium — named in a required line *and* a responsibility | Prefixed "z. B."; the requirement is cloud data platforms with a modern stack | Bridge from Teradata/Oracle → AWS warehouse work (SW-1) and data products (SW-7). Never write the word. |
|
||||||
|
| **Power BI** | Medium — named in a required line | BI tooling is genuinely substitutable; he **co-owned** a BI platform | Bridge from TIBCO Spotfire co-ownership + C# extensions + TAF 2022 (BS-5). |
|
||||||
|
| **dbt** | Low–Medium | "z. B." | Bridge from Airflow + PySpark transformation/testing discipline. |
|
||||||
|
| **Argo Workflows** | Low | "z. B."; direct orchestrator substitution | Bridge from Airflow. |
|
||||||
|
| **Helm** | Low | Not a standalone requirement; implied by Kubernetes | Kubernetes is canonical; **Helm is not — do not list it.** |
|
||||||
|
| **Spring Boot / Angular (RAMSI)** | Medium — a whole responsibility line | One of six responsibilities; not the title, not in the required list | Java is `allowed-with-context` (GN-3, BS-2). Do not claim Spring Boot or Angular. Raise it honestly in the call — he may not want this work. |
|
||||||
|
| **Rail/RAMS domain** | Low | No JD line requires it | Bridge: industrial asset/sensor data at Bosch; condition-monitoring thesis. Ask about RAMSI rather than assuming. |
|
||||||
|
| **Anforderungsniveau K comp** | **Unresolved — decision-blocking for the user, not a fit gap** | Not a qualification at all | Ask the People Leader. Do not research further; the figures are not public. |
|
||||||
|
|
||||||
|
**No Gap sits on a minimum qualification, and the title-defining capability is Direct.** Hard gate: **PASS.**
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
Requirement text is the JD's German original, abbreviated. "Required" = listed under *Das bringst du mit*; "Responsibility" = listed under *Das kannst du bewegen*.
|
||||||
|
|
||||||
|
| # | Requirement | Required/preferred | Direct/Adjacent/Gap/Constraint | Canonical evidence | Gate? |
|
||||||
|
|---|---|---|---|---|---|
|
||||||
|
| R1 | Kommunikation, Teamorientierung, **fachliche Entwicklung anderer Dateningenieur:innen fördern** | Required | **Direct** | Staff Engineer (Engineer IV) since 2025-04; BS-3 Application Owner incl. training and documentation; GN-1 training ownership | No |
|
||||||
|
| R2 | Agile, selbständige Arbeitsweise; Verantwortung für Qualität und Nachhaltigkeit technischer Lösungen | Required | **Direct** | SW-2 Component Owner — operation, data quality, governance, incidents, on-call | No |
|
||||||
|
| R3 | Mehrjährige Erfahrung in Entwurf, Aufbau, Entwicklung und **Betrieb cloudbasierter Datenplattformen** mit modernem Data Stack (ETL/ELT, DWH, Streaming, Orchestrierung — **z. B.** Snowflake, dbt, Helm, Argo Workflows, Kafka) | Required | **Direct** (core) / **Gap** (named products) | SW-1 AWS migration of his domains' ETL from Teradata/Oracle; SW-2; SW-3 Python apps on Kubernetes + GitLab CI/CD; SW-7 governed data products; skills: Kafka, Airflow, AWS, PySpark, Kubernetes all production-current | **No** — the product list is prefixed **"z. B."** (for example), so it enumerates a stack archetype, not mandates. See Gap note below. |
|
||||||
|
| R4 | Skalierbare und **kosteneffiziente Datenarchitekturen** entwerfen; Trade-offs Latenz / Konsistenz / Kosten beurteilen | Required | **Direct–Adjacent** | SW-1, SW-2, SW-3. Design/trade-off reasoning is real and current; **cost-efficiency figures are `metrics: unverified`** — describe the practice, never quantify a saving | No |
|
||||||
|
| R5 | **Datenmodellierung (Star-/Snowflake-Schemata)**, Reporting mit **Power BI**, fortgeschrittenes SQL, Abfrageleistungsoptimierung | Required | SQL **Direct**; modelling **Direct**; dimensional schemas **Adjacent**; Power BI **Gap (Adjacent via Spotfire)** | SQL production-current; SW-7 models data products (allowed verb "model"); BS-5 co-owned TIBCO Spotfire environment and built C# extensions, co-presented at TIBCO Analytics Forum 2022 | **No** — BI tooling is genuinely substitutable and he co-owned a BI platform. But this is the single weakest required line. |
|
||||||
|
| R6 | **Software-Engineering in Python** — Tests, CI/CD, Packaging, Deployment Best Practices | Required | **Direct (strongest line in the JD)** | Python production-current; SW-3 GitLab CI/CD on Kubernetes; VZ-2 automated tests wired to CI/CD quality gates; GN-1 BDD + Jenkins | No |
|
||||||
|
| P1 | Datenpipelines auf der **Enterprise Analytics Plattform** aufbauen, **betreiben**, weiterentwickeln (Batch **und** Streaming) | Responsibility | **Direct** | SW-1, SW-2, SW-3; Kafka + Airflow + PySpark production-current. "Betreiben" maps exactly to Component Ownership incl. on-call. | No |
|
||||||
|
| P2 | Datenquellen via **APIs/Kafka** integrieren; ermöglicht Analysen, Dashboards und **vorausschauende Wartung** | Responsibility | Integration **Direct**; predictive maintenance **Adjacent (strong)** | Kafka production-current; SW-7 source onboarding. PdM cluster: BS-2 fab sensor/process data (defect records, wafer inspection images, PCM electrical parameters); BS-4 ELK/Kafka anomaly-detection PoC; BS-1 containerized ML inference in 24/7 production; EDU-MENG thesis on vibration-based condition monitoring | No |
|
||||||
|
| P3 | **Datenprodukte und semantische Modelle** auf **Snowflake und Power BI** gestalten | Responsibility | Data products **Direct**; both named products **Gap** | SW-7 — builds governed data products and onboards sources inside Swisscom's company-wide Data Mesh, Atlassian Compass for metadata/lineage | No |
|
||||||
|
| P4 | **RAMSI** weiterentwickeln — Webanwendung (**Java Spring Boot / Angular**), Reports, Dashboards | Responsibility | **Gap** — the clearest one | Java is `production-historical`, `allowed-with-context` (GN-3 Java/J2EE workflow features; BS-2 Java data services). **Spring Boot: absent from canonical. Angular: absent; JavaScript is `production-historical-limited`.** | **No** (one of six responsibilities, not the title) — but see Open Risks |
|
||||||
|
| P5 | Anforderungen mit dem Business aufnehmen; nachhaltige Lösungen im Betrieb | Responsibility | **Direct** | SW-4 delivers data products/dashboards/analyses with internal B2B stakeholders and product owners | No |
|
||||||
|
| P6 | Wissen im Team teilen, zur fachlichen Weiterentwicklung beitragen | Responsibility | **Direct** | Same as R1 | No |
|
||||||
|
| C1 | Standort **Bern** / Work Smart (hybrid), 60–100% | Constraint | **Direct — best in the entire application log** | Lives in Bern. No relocation, no commute problem, hybrid matches the stated 2–3 day maximum | No |
|
||||||
|
| C2 | German-language posting and process | Constraint | **Direct** | German native | No |
|
||||||
|
| C3 | Work authorization | Constraint | **Direct** | German citizen (EU), Swiss B permit, no sponsorship required | No |
|
||||||
|
| C4 | **Anforderungsniveau K, Regionalzulage Stufe 1** | Constraint | **UNRESOLVED — the real risk** | SBB GAV runs 15 collectively-bargained levels A–O with a fixed Basiswert/Höchstwert per level; K is the 11th. Current K figures are **not published** in the sources reachable on 2026-08-21 (the SEV brochure documents the mechanism, not the table; the GAV PDF download returns an error page). | **Not a fit gate — a user-decision gate.** See Open Risks. |
|
||||||
|
|
||||||
|
### Gap note on R3 (important — do not overstate it)
|
||||||
|
Five products are named: Snowflake, dbt, Helm, Argo Workflows, Kafka. Only **Kafka** is canonical. Snowflake, dbt, Argo Workflows and Helm are **absent from `claims.json`** — under `shared_ops.md` ("omit anything absent, ambiguous or unverified") none of them may appear in any output document.
|
||||||
|
|
||||||
|
This is survivable **only because the JD writes "z. B."**. The requirement as written is *cloud data platforms with a modern data stack*, exemplified by those tools. The substitution map is honest and defensible in an interview:
|
||||||
|
|
||||||
|
| JD names | Canonical equivalent | Transfer honesty |
|
||||||
|
|---|---|---|
|
||||||
|
| Snowflake | Teradata / Oracle / AWS warehouse work (SW-1), data products (SW-7) | Strong — cloud MPP warehouse concepts, but **never claim Snowflake itself** |
|
||||||
|
| dbt | Airflow + PySpark transformation pipelines | Good — same modelling/testing/lineage discipline, different tool |
|
||||||
|
| Argo Workflows | Airflow | Strong — direct orchestrator substitution |
|
||||||
|
| Helm | Kubernetes (production-current-and-historical) | Adequate — **Helm itself is not canonical; do not list it** |
|
||||||
|
| Power BI | TIBCO Spotfire co-ownership (BS-5) | Good — BI platform ownership transfers; the product does not |
|
||||||
|
|
||||||
|
## Competitive Read
|
||||||
|
- **Obvious-fit candidate:** a Swiss data engineer with 5+ years on Snowflake + dbt + Power BI, ideally already inside a Swiss infrastructure/utility/transport operator, German-speaking, and comfortable maintaining a Java/Angular internal web application. That last trait is the unusual one — most pure data engineers do not want it, which measurably widens the field for Dennis.
|
||||||
|
- **Dennis's advantage:** he does the *operational* half of this job today, at a peer Swiss enterprise, in the same city. Component Ownership with on-call, data quality and governance is exactly "Betrieb" and "Verantwortung für Qualität und Nachhaltigkeit". Add the genuinely rare combination for this specific req: **industrial sensor/asset data (Bosch fab: defect records, wafer inspection images, PCM parameters) + anomaly detection on streaming data (ELK/Kafka) + a master's thesis on vibration-based condition monitoring of machine tools.** For a role whose stated purpose includes *vorausschauende Wartung* on physical infrastructure assets, that combination is worth more than Snowflake syntax.
|
||||||
|
- **Their advantage:** named-product fluency on the exact stack (Snowflake, dbt, Power BI) and, for the strongest candidates, rail domain knowledge — the asset taxonomy, EN 50126 RAMS vocabulary, swissTAMP/RIS ecosystem.
|
||||||
|
- **Level/scope comparison:** **This is the inversion, and it is the crux of the application.** Every other role in the log was a level stretch upward; this one reads *below* current scope. Dennis is Staff (Engineer IV) with Component Ownership at Swisscom; this is a senior IC data-engineer seat that asks him to *mentor* other data engineers but not to own architecture. The JD's only architecture language is "Datenarchitekturen entwerfen" as a personal skill, not an ownership mandate. Same shape as BKW, which the user declined as a lateral in this same Bern WLB-exception tier.
|
||||||
|
|
||||||
|
## Company Context
|
||||||
|
- **Employer:** Schweizerische Bundesbahnen SBB, division Infrastruktur — Anlagenmanagement (infrastructure asset management). Swiss federal railway; Bern is the corporate seat.
|
||||||
|
- **Where the role sits:** SBB runs a real, funded asset-management data ecosystem. **swissTAMP** (swiss Track Analysis & Maintenance Planning) is its central source for asset condition and behaviour — inspection data, measurement and operating data, trends and forecasts — and SBB describes it explicitly as enabling the move *"from reactive through proactive to predictive maintenance."* Alongside it sit **RIS** (Räumliche Informationssysteme, incl. Datenbank feste Anlagen) and the **Mess- und Diagnosetechnik (MUD)** department, which does automated condition monitoring of track, switches and power-supply systems across the standard-gauge network. SBB also operates a **Competence Center Predictive Maintenance**.
|
||||||
|
- **Current investment signal:** SBB has an active EU-journal tender (235005-2026) for up to **three new-generation infrastructure diagnostic vehicles** to sustain and expand condition-data monitoring. More diagnostic vehicles means more sensor volume, which is precisely what an Enterprise Analytics Platform pipeline role exists to absorb. The domain is funded and growing, not a maintenance backwater.
|
||||||
|
- **RAMSI:** not publicly documented. Almost certainly an internal application in the RAMS family (Reliability, Availability, Maintainability, Safety — EN 50126, the standard railway discipline) applied to Infrastruktur. **Treat as inference — do not state it as known fact in any document or interview; ask about it instead.** Good question for the People Leader call.
|
||||||
|
- **Culture signals:** `#einfachDu` (mandated informal "du" from first contact), Work Smart flexible/hybrid working, published pay system and active pay-equity commitment, cover letter deliberately waived, 60–100% part-time explicitly welcome. Process: application → virtual meeting with HR + line manager → in-person meeting → decision.
|
||||||
|
- **"Why them" angle:** public infrastructure whose data work has a physical consequence — keeping the Swiss network running — combined with a Bern seat and a genuinely on-thesis technical brief. This is the first role in the log where the mission and the commute both work without compromise.
|
||||||
|
|
||||||
|
## Framing Strategy
|
||||||
|
- **Professional identity:** Staff-level data engineer who *builds and runs* governed data products on a cloud platform in a large Swiss enterprise — pipeline construction, operation, data quality and stakeholder delivery — with unusual depth in **industrial sensor and asset data**.
|
||||||
|
- **Lead narrative:** "I already do the operational half of this job at Swisscom, on the same kind of platform, in the same city — and I have handled machine and sensor data since Bosch."
|
||||||
|
- **Strongest proof points:**
|
||||||
|
1. SW-2 — Component Owner for business-critical Fulfillment ETL: operation, data quality, governance, incidents, on-call. Maps to "Betrieb" + "Verantwortung für Qualität und Nachhaltigkeit".
|
||||||
|
2. SW-1 — migrated his domains' ETL from Teradata/Oracle to AWS (scoped, hedged per KB correction: **his domains**, contributor to the wider programme).
|
||||||
|
3. SW-7 — builds governed data products and onboards sources within Swisscom's company-wide Data Mesh; Atlassian Compass for metadata and lineage. Maps to "Datenprodukte und semantische Modelle".
|
||||||
|
4. SW-3 + VZ-2 + GN-1 — Python on Kubernetes with GitLab CI/CD, automated tests wired to quality gates. Covers R6 completely.
|
||||||
|
5. BS-2 / BS-4 / BS-1 — fab sensor and process data, ELK/Kafka anomaly detection, containerized ML inference in a 24/7 production environment. This is the predictive-maintenance bridge and the real differentiator.
|
||||||
|
- **Honest adjacent bridges (state as transfer, never as the named tool):** Spotfire → Power BI; Airflow → Argo Workflows; Teradata/Oracle/AWS warehouse → Snowflake; PySpark/Airflow transformation discipline → dbt.
|
||||||
|
- **Explicit gaps (never paper over):** Snowflake, dbt, Argo Workflows, Helm, Power BI, Spring Boot, Angular — none are canonical, none may appear in output. Rail domain knowledge is absent.
|
||||||
|
- **Emphasize:** operation and ownership over greenfield build; sensor/asset data lineage from Bosch to now; German-language Swiss enterprise delivery; mentoring (R1) since it is a *required* line and Staff level evidences it.
|
||||||
|
- **Downplay:** GenAI/LLM work entirely — SW-8 is irrelevant here and its forbidden list is long. Also downplay FDE/customer-facing framing carried over from recent applications; this is an internal-stakeholder role (SW-4 is the right frame).
|
||||||
|
- **Do NOT include:** Security Champion (SW-5 — JD has no security requirement; default is OMIT). LOC/test counts. Any cost or performance metric (`metrics: unverified` across the board).
|
||||||
|
- **User directives:** none given for this JD.
|
||||||
|
- **Scope discipline watch (recurring error):** SBB will read "Data Mesh", "data platform" and "migration" as org-scale objects. Never pair a full-ownership verb with one. Correct: "builds governed data products within Swisscom's company-wide Data Mesh", "migrated my domains' ETL stack". Never: "built a Data Mesh", "migrated the warehouse".
|
||||||
|
|
||||||
|
## Critique Context
|
||||||
|
- **Reviewer persona:** a Swiss enterprise engineering lead (Andri Wienandts, People Leader) plus an SBB HR screener. Reads German. Screens for: does this person actually *operate* platforms or only build them; will they stay in a banded federal role; can they talk to Fachspezialist:innen.
|
||||||
|
- **Competitive landscape:** see Competitive Read. The Java/Angular half of the role narrows the field.
|
||||||
|
- **Domain vocabulary:** Anlagenmanagement, Infrastrukturanlagen, vorausschauende Wartung / Predictive Maintenance, Zustandsdaten, Diagnose, Enterprise Analytics Plattform, Datenprodukte, semantische Modelle, Batch und Streaming, Orchestrierung, Fachspezialist:innen, RAMS.
|
||||||
|
- **Likely first technical challenge:** "You have not used Snowflake or dbt — walk me through how your Teradata-to-AWS work maps." Prepare the substitution map above as a spoken answer, and answer the Power BI question with the Spotfire co-ownership honestly.
|
||||||
|
|
||||||
|
## Cover Letter Decision
|
||||||
|
- **NO** (provisional — revisit only if the People Leader call suggests otherwise)
|
||||||
|
- **Reason:** SBB explicitly waives it — *"Darum verzichten wir bei dieser Stelle auf ein Motivationsschreiben."* Under `cl_reference.md` a letter is generated only when required or when it adds information the resume cannot show. Neither holds. Writing one anyway risks reading as not having read the posting.
|
||||||
|
- **Better use of the same effort:** the phone call to Andri Wienandts, which converts a Weak channel into a Moderate one — the single highest-value action available on this application, and the variable the cohort has never yet tested.
|
||||||
|
- **If a letter is later wanted,** verified hooks are available: swissTAMP's reactive→proactive→predictive framing; the MUD condition-monitoring remit; the new-generation diagnostic-vehicle tender; and the honest thesis link (vibration-based condition monitoring — framed as a methods prototype, never as a validated system).
|
||||||
|
|
||||||
|
## Resume Plan — CONFIRMED BY USER 2026-08-21
|
||||||
|
|
||||||
|
### User decisions
|
||||||
|
1. **Role type + bundle: CONFIRMED.** Primary `bundle_data_engineer.md` (Staff/Senior Data Engineer, Tier 1). Secondary `bundle_analytics_engineer.md`, used only to reframe BS-5 (Spotfire) as the Power BI bridge.
|
||||||
|
2. **Language: ENGLISH**, with an explicit **Languages line stating German as mother tongue** — user's direct instruction. Because the document is English and carries no photo, the **International Tech** profile (config default, 2 pages) is the coherent choice; the one Swiss/DACH element retained is that Languages line, which the user asked for and which answers the obvious recruiter question on a German-language posting.
|
||||||
|
- Languages line: **German (native) · English (fluent)**. Norwegian/Russian (basic) optional — recommend omitting as non-professional.
|
||||||
|
- **Never list French or Italian** (config.md KB correction — Swisscom Zeugnis boilerplate, not accurate).
|
||||||
|
3. **Framing: delegated to Claude.** Chosen: lead on *operate-and-own*, carry the industrial sensor/asset-data thread from Bosch to now, drop GenAI/LLM material entirely.
|
||||||
|
|
||||||
|
### Format
|
||||||
|
- International Tech, **2 pages**, English, no photo, no demographic data
|
||||||
|
- Summary: 2–3 lines — operator identity plus the sensor/asset-data thread
|
||||||
|
- Skills: 4–6 compact lines, canonical `allowed` / `allowed-with-context` only
|
||||||
|
- Bosch title for this JD: **Senior Engineer, Data Analysis (Data Engineering)** — official title preserved with a transparent parenthetical per `resume_reference.md` §8
|
||||||
|
- Swisscom promotion shown: Senior → Staff (Engineer IV), April 2025
|
||||||
|
|
||||||
|
### Bullet plan — 11 bullets
|
||||||
|
|
||||||
|
**Swisscom — Staff Data, Analytics & AI Engineer (Oct 2023 – Present)** — budget 4–5, selected **5**
|
||||||
|
|
||||||
|
| | ID | Achievement | JD match | Why |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| * | SW-2 | Component Owner, Fulfillment ETL (Oracle → Kafka → Teradata), on-call SLA, governance | **Direct** R2, P1, P5 | **Lead bullet.** "Betrieb" and "Verantwortung für Qualität und Nachhaltigkeit" are the JD's own words; this is the closest evidence in the KB. |
|
||||||
|
| * | SW-1 | Migrated his domains' Teradata/Oracle ETL to AWS (S3, Glue, Athena/Iceberg, Redshift, Airflow, CloudFormation) | **Direct** R3, R4, P1 | Cloud data-platform build and operation. Scope-corrected: **his domains'**, contributor to the wider programme. |
|
||||||
|
| * | SW-7 | Governed data products and active metadata (Atlassian Compass) within the company-wide Data Mesh | **Direct** P3, R5 | The only direct answer to "Datenprodukte und semantische Modelle". Never claim ownership of the mesh. |
|
||||||
|
| * | SW-3 | Python data applications on Kubernetes with GitLab CI/CD | **Direct** R6 | Covers the required Python / tests / CI-CD / deployment line outright. |
|
||||||
|
| o | SW-4 | B2B data products and dashboards; process automation; RCA under 2nd/3rd-level support | **Direct** P5, P2 | Covers "Anforderungen mit dem Business aufnehmen". **First to cut** if space is tight. |
|
||||||
|
| x | SW-6 | PySpark | — | Fold into Skills, not a bullet. |
|
||||||
|
| x | SW-5 | Security Champion | — | JD has no security requirement. Default OMIT stands. |
|
||||||
|
| x | SW-8 | Domain-grounded LLM agents | — | Off-thesis here, long forbidden list. Dropped per framing. |
|
||||||
|
|
||||||
|
**Bosch — Senior Engineer, Data Analysis (Feb 2020 – Dec 2022)** — budget 3–4, selected **4**
|
||||||
|
|
||||||
|
| | ID | Achievement | JD match | Why |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| * | BS-2 | Data services in Python/Java/C# over OracleDB and Hadoop/Impala — fab sensor and process data: defect-management records, wafer inspection images, PCM electrical parameters | **Adjacent (strong)** P2 | **The differentiator.** Genuine industrial sensor/asset data for a role whose purpose includes *vorausschauende Wartung*. Also carries the Java thread. |
|
||||||
|
| * | BS-3 | Application Owner, analytics suite — SLOs, training, documentation, vendor management | **Direct** R1, R2 | Ownership plus the training/knowledge-transfer evidence R1 requires. |
|
||||||
|
| * | BS-5 | Co-owned TIBCO Spotfire platform, built C# extensions, co-presented TAF 2022 | **Bridge** R5 | **Carries the Power BI gap** — the weakest required line. A co-owned BI platform plus a public speaking credential is the honest answer. |
|
||||||
|
| * | BS-4 | ELK + Kafka anomaly-detection **PoC**, Grafana/Prometheus/Loki monitoring | **Bridge** P2 | Closest evidence to condition monitoring on streaming data. **PoC label must be retained.** |
|
||||||
|
| o | BS-1 | Containerized ML inference (Docker/K8s/Ansible) into 24/7 fab, automated defect classification | Adjacent | Strong bullet, but the JD wants pipelines that *enable* predictive maintenance, not ML delivery. Swap in for BS-4 if the production-ML angle is preferred. |
|
||||||
|
|
||||||
|
**Vizrt — Test Automation / DevOps Engineer (Jul 2017 – May 2018)** — selected **1**
|
||||||
|
|
||||||
|
| | ID | Achievement | JD match | Why |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| * | VZ-2 | Python A/V integration and unit test suite wired as CI/CD quality gates | **Direct** R6 | Reinforces the required tests/CI-CD line with a second, independent example. |
|
||||||
|
| x | VZ-1 | Distributed video transcoding backend | — | C++ — off-stack, and C++ is de-emphasized by standing preference. |
|
||||||
|
|
||||||
|
**Generali — IT Consultant (May 2015 – Jun 2017)** — selected **1**
|
||||||
|
|
||||||
|
| | ID | Achievement | JD match | Why |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| * | GN-1 | Introduced BDD; technical ownership of the automation suite; Jenkins administration; trained colleagues and presented to the Java Community | **Direct** R1 | R1 is a *required* line about developing other engineers. This is the clearest "introduced a practice and taught it" evidence in the KB. |
|
||||||
|
| o | GN-3 | Java/J2EE workflow features; WebServices to XLDeploy; **Apache Camel + Spring Boot PoC** | Bridge P4 | Only if the user wants to signal willingness for the RAMSI web-app work. See open question below. |
|
||||||
|
|
||||||
|
**Fraunhofer — 0 bullets.** FC-1 is C#/.NET plus Jenkins, off-stack here.
|
||||||
|
|
||||||
|
> **FC-4 deliberately excluded.** "Predictive Maintenance Research Grant Contribution" is a *grant proposal* contribution ("Mitarbeit"), not delivered work, and it is **absent from `claims.json`**. Despite being the most tempting keyword match in the entire KB for this JD, it must not be used as a predictive-maintenance credential — CLAUDE.md Rule 5 and the anti-fabrication rules both bar it.
|
||||||
|
|
||||||
|
**Total: 11 bullets** (Swisscom 5, Bosch 4, Vizrt 1, Generali 1) — bottom of the 11–14 guide, which is right here; padding to 14 would mean weaker evidence.
|
||||||
|
|
||||||
|
### Skills lines (draft, canonical only)
|
||||||
|
- **Languages & Data:** Python · SQL · PySpark · Java (Bosch/Generali) · C# (Bosch/Fraunhofer)
|
||||||
|
- **Pipelines & Streaming:** Apache Kafka · Apache Airflow · ETL/ELT · Oracle · Teradata · Hadoop/Impala
|
||||||
|
- **Cloud & Platform:** AWS (S3 · Glue · Athena/Iceberg · Redshift · Lambda · Step Functions) · CloudFormation/IaC · Kubernetes · Docker · GitLab CI/CD
|
||||||
|
- **Data Products & Governance:** Data Mesh data products · active metadata and lineage (Atlassian Compass) · data governance · data modelling
|
||||||
|
- **Analytics & Monitoring:** TIBCO Spotfire (co-owned, C# extensions) · Grafana · Prometheus · ELK (PoC)
|
||||||
|
- **Languages:** German (native) · English (fluent)
|
||||||
|
|
||||||
|
> **Explicitly absent, by design:** Snowflake, dbt, Argo Workflows, Helm, Power BI, Spring Boot, Angular, Terraform, Azure, GCP. Never substitute a JD word for an evidenced tool.
|
||||||
|
|
||||||
|
### Open question for the user (does not block Phase 2)
|
||||||
|
**Spring Boot.** `experience_generali.md` GN-3 records a contribution to an *Apache Camel + Spring Boot Dispatcher PoC* (2015–17). Canonical GN-3 records only "contributed to integration proofs of concept", and **Spring Boot is absent from the canonical skills list**, so it stays out of the document either way — a 9-to-11-year-old PoC is not a resume claim. But if the memory is accurate it is a legitimate *interview* answer to the RAMSI question. Worth confirming.
|
||||||
|
|
||||||
|
## Reuse Safety & Phase 2 Gates
|
||||||
|
- **`historical_outputs.json` checked 2026-08-21.** No prior package is reusable here and none is a match in kind: every existing output folder is an **English International Tech** resume, and six are on the `unsafe_do_not_reuse` list. **This would be the first Swiss/DACH German-language package in the repo** — build fresh from canonical claims, per policy.
|
||||||
|
- **Phase 2 forbidden-token gate (must not be skipped):** after generating the `.tex`, grep it for `Snowflake`, `dbt`, `Power BI`, `Spring Boot`, `Angular`, `Argo`, `Helm`, `LangChain`, `Terraform`, `Azure`, `GCP`. All must be **absent**. They appear throughout *this* session file because it analyses them as gaps — that is correct here and wrong in the document.
|
||||||
|
- Standard gates still apply: `validate_resume_system.py --document`, compile with MiKTeX pdflatex at full path, inspect the rendered PDF.
|
||||||
|
|
||||||
|
## Open Risks (surface to the user before Phase 1)
|
||||||
|
1. **Comp (C4) — the deciding factor, and it is unresolved.** Anforderungsniveau K is a collectively-bargained band with a fixed ceiling; the top of the band is not negotiable the way a private offer is. The current K figures could not be retrieved from public sources on 2026-08-21. Against the standing bar (Swisscom ~140k, moves only at 180k+ all-in) this is the most likely reason not to proceed, and it is a question for the People Leader, not for further desk research.
|
||||||
|
2. **Level (lateral or below).** Senior IC seat vs current Staff + Component Owner scope. The Bern/Thun WLB-exception tier deliberately accepts below-bar *comp*; it has never accepted below-*level* scope, and BKW was declined on exactly this. Worth asking whether the role carries design/architecture ownership in practice.
|
||||||
|
3. **P4 Java/Spring Boot/Angular.** A full responsibility line is web-application development on a stack that is historical (Java) or absent (Spring Boot, Angular). Not a gate, but it will come up, and it is work he may not want.
|
||||||
|
4. **Five named products in the required stack are non-canonical.** Defensible because of "z. B.", but the resume will visibly not say Snowflake, dbt or Power BI. An ATS keyword screen configured on those literals would drop him. Nothing can honestly be done about that.
|
||||||
|
|
||||||
|
## Output Files
|
||||||
|
- Resume: `e2e_sbb_data_engineer_asset_mgmt_resume.tex` → `.pdf` (**2 pages**, generated 2026-08-21)
|
||||||
|
- Cover letter: **intentionally omitted** — SBB explicitly waives it
|
||||||
|
- Critique: `critique_sbb_data_engineer_asset_mgmt.md` (2026-08-21)
|
||||||
|
|
||||||
|
## Critique Summary
|
||||||
|
- Evidence Fit: **79/100 — Core (lower end)**, unchanged; a document cannot move candidate-role fit
|
||||||
|
- Hard gate: **PASS**
|
||||||
|
- Document Quality: **92/100** after Edit 1 (was 90 at critique time) — truth/provenance 24/25, well clear of the 8/10 automatic-failure line
|
||||||
|
- Channel Strength: **Weak**, but uniquely upgradeable — the first posting in the log with a named hiring contact and a direct number
|
||||||
|
- **Tier 1 fix (one):** the JD names *Abfrageleistungsoptimierung* in a required line and the document is silent on query performance, despite canonical support in BS-2's 3L variant. The only substantive gap that costs nothing in honesty.
|
||||||
|
- Tier 2: "agile" **RESOLVED** (Edit 1, SW-3). APIs **not applied** — no canonical evidence that source onboarding used APIs; needs user confirmation before it can be added.
|
||||||
|
- **No Tier 1 truth findings.** Claim audit clean across all 13 bullets; SW-1 and SW-7 both avoid every forbidden phrasing.
|
||||||
|
- Reader sequence: ATS pass (fails only a screen keyed on the three unnameable products) · Recruiter **Forward** · Hiring manager **Interview, probable** · Technical reviewer **Credible**.
|
||||||
|
- **Verdict: the document is ready; the decision is the constraint.** Do not submit before the Anforderungsniveau K answer.
|
||||||
|
- Framework note: the critique skill's single 8-dimension score (incl. Publications) conflicts with `critique_framework.md` and CLAUDE.md, which mandate three separate scores. Followed CLAUDE.md.
|
||||||
|
|
||||||
|
### Phase 2 record
|
||||||
|
- **13 bullets** shipped, not the 11 planned. Two deliberate changes during generation:
|
||||||
|
1. **Fraunhofer kept 1 bullet (FC-1 + FC-3 combined), not 0.** Dropping the role would have opened an unexplained **21-month gap** (Vizrt ends May 2018, Bosch starts Feb 2020). Chronology integrity outranks the bullet budget.
|
||||||
|
2. **BS-1 added** as a fifth Bosch bullet (marked `o`/available in the plan). Not padding: it is HIGH priority in `bundle_data_engineer.md`, and containerized delivery into a *continuously operating* environment reads directly onto an employer that runs a 24/7 network. It also improved page-2 fill.
|
||||||
|
- **Page-break decision.** Tested the natural flow with `\newpage` removed: page 1 filled completely, but two Bosch bullets then landed on page 2 with no visible employer header — an information-hierarchy defect under `resume_reference.md` §3/§9. Kept the guarded break so every page's content sits under its own header. Remaining bottom whitespace is acceptable per §4 ("white space is acceptable when hierarchy and readability are strong") and the 2026-07-27 KB correction removing page-fill quotas.
|
||||||
|
- **Skills line relabelled** — the first line read "Languages" (programming) and the last "Languages spoken", which scanned as a duplicate. Now **Programming** and **Languages**.
|
||||||
|
- **Gates:** canonical validator **PASS** (0 warnings) · forbidden-token scan **PASS** (none of the seven non-canonical JD tools present) · scope-discipline scan **PASS** (no ownership verb paired with an org-scale object) · compile **PASS** (exactly 2 pages) · both pages visually inspected — no clipping, overlap, orphaned heading or bad break; umlauts render correctly.
|
||||||
|
- **Note for future runs:** the validator scans **raw file text including comments**. A header comment listing the banned tool names failed the gate on the first pass. Describe them; never name them.
|
||||||
|
|
||||||
|
## Edit History
|
||||||
|
|
||||||
|
### Edit 1 (2026-08-21): critique Tier 1 + one Tier 2
|
||||||
|
- **Source:** `critique_sbb_data_engineer_asset_mgmt.md` items 1 and 2
|
||||||
|
- **Changes (all MODIFY — no bullet added, removed or swapped):**
|
||||||
|
1. BS-2 bullet: "giving analysis teams access to…" → "**tuning query performance for** analysis teams working with…". Canonical support: BS-2 3L variant, "optimized query performance and data availability".
|
||||||
|
2. Pipelines skills line: added "query performance tuning".
|
||||||
|
3. SW-3 bullet: added "**in an agile DevOps team**". Canonical support: SW-3 2L variant.
|
||||||
|
- **Not applied:** the API term (critique Tier 2 item 3). No canonical evidence that source onboarding used APIs — adding it would be vocabulary substitution. Needs user confirmation.
|
||||||
|
|
||||||
|
| Metric | Before | After | Delta |
|
||||||
|
|---|---:|---:|---|
|
||||||
|
| Page count | 2 | 2 | 0 |
|
||||||
|
| Bullets | 13 | 13 | 0 |
|
||||||
|
| Validator | PASS | PASS | 0 |
|
||||||
|
| Forbidden tokens | 0 | 0 | 0 |
|
||||||
|
| "query" occurrences | 0 | **2** | +2 |
|
||||||
|
| "agile" occurrences | 0 | **1** | +1 |
|
||||||
|
| Longest bullet (words) | 31 | 34 | +3 (still under the 35 flag) |
|
||||||
|
|
||||||
|
- **Verification:** validator PASS (0 warnings) · forbidden-token scan PASS · compile PASS at 2 pages · both pages re-rendered and inspected — no clipping, overlap, orphan or bad break.
|
||||||
|
- **Effect on scores:** Document Quality relevance/terminology moves 11→13, so **Document Quality 90 → 92/100**. Evidence Fit unchanged at 79 (edits do not change candidate-role fit).
|
||||||
|
|
||||||
|
## Status
|
||||||
|
- Fit gate: **DONE — PASS, Core, Evidence Fit 79/100**
|
||||||
|
- Phase 0: **DONE** (2026-08-21)
|
||||||
|
- Phase 1: **DONE** (2026-08-21) — user confirmed bundle, chose English with German-native stated, delegated framing
|
||||||
|
- Resume: **DONE** (2026-08-21, Edit 1 applied) — 13 bullets, 6 skills lines, 2 pages, all gates PASS
|
||||||
|
- Cover letter: NO (SBB waives it)
|
||||||
|
- Critique: **DONE** (2026-08-21) — Document Quality 92/100 after Edit 1; **no outstanding Tier 1 fixes**
|
||||||
|
- Application/outcome: **not submitted — held pending the comp answer**
|
||||||
|
- Next: call Andri Wienandts (+41 79 364 62 53) on the Anforderungsniveau K band and the seat’s design scope → then either apply the Tier 1 query-performance fix and submit, or close as NO-GO on comp
|
||||||
@@ -102,7 +102,9 @@ Python, Kafka, AWS (S3 · Glue · Athena · Redshift · Airflow · CloudFormatio
|
|||||||
**Institution type:** Industry — tech company, scale-up, or enterprise platform team
|
**Institution type:** Industry — tech company, scale-up, or enterprise platform team
|
||||||
|
|
||||||
**Opening hook pattern:**
|
**Opening hook pattern:**
|
||||||
> "As a Staff Data Engineer at Swisscom — Switzerland's largest telco — I currently own the business-critical Fulfillment ETL pipelines that feed our data warehouse, while simultaneously leading the migration of our legacy stack to a cloud-native AWS architecture. [Tie to their specific need / JD signal]."
|
> "As a Staff Data Engineer at Swisscom — Switzerland's largest telco — I currently own the business-critical Fulfillment ETL pipelines that feed our data warehouse, and I migrated my own domains' pipelines onto the company's AWS platform as part of its wider cloud migration programme. [Tie to their specific need / JD signal]."
|
||||||
|
|
||||||
|
> **Scope warning (corrected 2026-08-21).** This hook previously read "*leading the migration of our legacy stack*", which contradicts both `claims.json` SW-1 (`forbidden`: "led the migration of the legacy warehouse", "sole technical lead") and point 2 of the narrative thread directly below. Never pair a full-ownership verb with a company-scale object. See CLAUDE.md → Scope Discipline.
|
||||||
|
|
||||||
**Key narrative thread:**
|
**Key narrative thread:**
|
||||||
1. **Ownership at scale** — Component Owner at Swisscom, Application Owner at Bosch: not just building pipelines, but running them in production with SLA accountability
|
1. **Ownership at scale** — Component Owner at Swisscom, Application Owner at Bosch: not just building pipelines, but running them in production with SLA accountability
|
||||||
|
|||||||
Reference in New Issue
Block a user