Second-pass review of this session's work by another agent. It corrected several
real mistakes of mine and finished F06 gaps I had left open. Reviewed, verified
and committed as-is.
THE MISS THAT MATTERS
`job_scout/state/applications.json` — the authoritative application registry
introduced by F02 — was never actually tracked. `job_scout/state/*` in
.gitignore silently excluded it, so my checkpoint commit afdef7e claimed to add
it and did not. Only `application_cohort.json`, the GENERATED projection, was
version-controlled; the source of truth and the migration history backup were
not. .gitignore now carries explicit negations for both.
MY ERRORS, CORRECTED
- "kastellaun" was in CH_LOCATION_KEYWORDS. Kastellaun is in Rhineland-Palatinate.
I took it from a Bundeswehr reserve listing and filed it under Switzerland -
precisely the class of bug F12 existed to fix.
- The F12 fix only widened the keyword list; SmartRecruiters still discarded the
structured country, which was the concrete case the review named
(city=Baar, country=CH). The adapter now preserves it, and a COUNTRY_NAMES
mapping gives country precedence over a bare town name.
- F15 was applied to Taleo and Prospective only. Greenhouse still wrote
`updated_at` into `posted`; it now uses `published_at` and carries provenance.
- My negation guard `\b(no|not|...)\b[^.;]{0,60}$` was too loose - an unrelated
"not" within 60 characters could mask a real claim. Tightened to require the
negation to govern the term.
- F18's retirement of the macro-count rule missed "Four to six compact skills
lines" in the workflow; removed now.
F06 GAPS I LEFT OPEN, NOW CLOSED
Date-format validation on education/employment periods (the 2035-99 case named
in the review), evidence-structure validation, referential integrity on evidence
source files, and the missing-identity KeyError.
F10 TAKEN FURTHER, AND RIGHTLY
I demoted the US-GPA fields to *_orientation_only. They are now removed
entirely, with grade_output_rule saying what to do instead: use the German grade
and scale, and if a recipient requires a US GPA, use THEIR method and record it.
Keeping a number derived by a non-recognised method invites its use.
Also: the Capgemini omit-preference now sits in experience_capgemini.md itself,
alongside the instruction not to fill or explain the intentional gap.
BIS BASEL - REJECTED 2026-09-11
jr100429, applied 2026-07-10, no interview, no reason given. Recorded in the
registry with a dated event and in the decision log; the "prep interview brief
when screening lands" next action is cleared. This also settles the 2026-09-04
observation that the req had vanished from the BIS board - it was a real
rejection, not just a closed posting.
VERIFICATION I RAN MYSELF BEFORE COMMITTING
49/49 tests. Validator PASS with 0 advisory warnings. Package manifest and
registry views current. All 12 F12 location cases still correct, including
Kastellaun now rejecting. The F05 counter-proof still catches all 9 violations.
SBB, NVIDIA, RUAG and Kdo Cy resumes still scan clean. Diffs are net-additive
across every reference file - the deletions are replacements, not losses.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qej5SBvhcbGXHwLqNWiskM
98 lines
6.2 KiB
TeX
98 lines
6.2 KiB
TeX
% Default profile: International Tech resume for US-tech/FAANG-style roles in Europe.
|
|
% Copy this file and resume.cls into a new output folder. Generate only from
|
|
% resume_builder/canonical/claims.json plus normalized experience files.
|
|
|
|
\documentclass{resume}
|
|
\usepackage[utf8]{inputenc}
|
|
\usepackage[T1]{fontenc}
|
|
\usepackage{lmodern}
|
|
% LANGUAGE — this template is English and relies on TeX's default (English) hyphenation.
|
|
% For a GERMAN package you MUST add babel, or words break with English patterns
|
|
% (`Hal-bleiterfertigung`, `automa-tisierte`) — a native reader notices, and no overfull
|
|
% box warns you. See the 2026-08-27 KB Corrections Log entry.
|
|
% \usepackage[ngerman]{babel}
|
|
% \hyphenation{Trans-krip-ti-on} % ngerman still breaks this one wrongly
|
|
% Then check the breaks in the compiled PDF — a clean box count proves nothing here.
|
|
\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.}
|
|
% Tailor this professional identity only within verified evidence.
|
|
\headline{Staff Data Engineer $\vert$ AWS Data Platforms $\vert$ Production ML Delivery}
|
|
% Optional when relevant: Swiss B permit; no employer sponsorship required.
|
|
\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 with over ten years of production software experience across telecom, semiconductor manufacturing, broadcast technology and insurance. Owns business-critical pipeline components at Swisscom and previously integrated containerized ML inference into a continuously operating Bosch semiconductor fab.
|
|
\end{rSection}
|
|
|
|
\begin{rSection}{Technical Skills}
|
|
\skillline{Languages}{Python, SQL; Java and C\# (professional, historical); C++ and JavaScript (limited historical use)}
|
|
\skillline{Data}{Apache Kafka, Airflow, PySpark, Oracle, Teradata, Hadoop/Impala, data products, metadata and governance}
|
|
\skillline{Cloud and platform}{AWS (S3, Glue, Athena/Iceberg, Redshift), CloudFormation, Kubernetes, Docker, GitLab CI/CD, Ansible}
|
|
\skillline{Certifications}{AWS Solutions Architect -- Associate; Data Engineering with AWS; iSAQB CPSA-F; ITIL Foundation}
|
|
\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, incidents and on-call obligations 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/Iceberg, Redshift, Airflow and CloudFormation while contributing to the wider migration programme.
|
|
\item Build governed data products and active metadata within Swisscom's company-wide Data Mesh, supporting discoverable data access for analytics and AI use cases.
|
|
\item Build and operate Python data applications on Kubernetes with GitLab CI/CD, covering containerized delivery from test through production operation.
|
|
\end{rSubsection}
|
|
\end{rSection}
|
|
|
|
% Default two-page balance: keep the most recent role on page 1 and start the
|
|
% second major evidence block on page 2. Recheck this break after tailoring.
|
|
\newpage
|
|
|
|
\begin{rSection}{Professional Experience (continued)}
|
|
\begin{rSubsection}{Robert Bosch Semiconductor Manufacturing Dresden GmbH}{Feb 2020 -- Dec 2022}{Senior Engineer, Data Analysis (Data \& ML Engineering)}{Dresden, Germany}
|
|
\item Integrated containerized ML inference with Docker, Kubernetes and Ansible into a continuously operating semiconductor-fab environment for automated image-based defect classification.
|
|
\item Served as Application Owner for analytics applications and upstream pipelines, defining SLOs and transition scope while coordinating vendors, user training and documentation.
|
|
\item Developed Python, Java and C\# data services over Oracle and Hadoop/Impala for defect-management and process-analysis teams.
|
|
\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 and built containerized microservices for maritime research platforms.
|
|
\end{rSubsection}
|
|
|
|
\begin{rSubsection}{Vizrt}{Jul 2017 -- May 2018}{Test Automation / DevOps Engineer}{Bergen, Norway}
|
|
\item Contributed Python and C++ engineering to a distributed video-transcoding backend and developed automated audio/video integration tests connected to CI/CD quality gates.
|
|
\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}
|
|
|
|
% EDUCATION LAYOUT (review finding F19, 2026-09-11)
|
|
% Keep the degree on the entry line and the institution on the line below. Cramming
|
|
% degree + focus + institution into one cell with a right-aligned date produces visible
|
|
% word spacing and mid-word breaks - seen in the SBB, NVIDIA and Aker BP packages.
|
|
% Grades and thesis only where they carry concrete relevance; see claims.json
|
|
% grade_output_rule, which keeps grades off by default.
|
|
\begin{rSection}{Education}
|
|
\compactentry{M.Eng. Computer Aided Engineering}{Apr 2012 -- Oct 2013}
|
|
Universität der Bundeswehr München; Software Design \& Engineering.
|
|
% Add thesis or grade only when relevant to this application, using the canonical facts.
|
|
|
|
\compactentry{B.Eng. Information and Telecommunication Technologies}{Oct 2009 -- Oct 2012}
|
|
Universität der Bundeswehr München.
|
|
\end{rSection}
|
|
|
|
\end{document}
|