Files
claude-resume-kit/resume_builder/templates/resume_template.tex
T
dennisthiessenandClaude Opus 5 b8c5141279 fix(F18-F19): get evidence onto page one earlier, measured not asserted
F18 - page-one weighting
- Across four compiled packages the first employment entry began at 45-55% of
  page one. A reader reaching the middle of the page had seen a profile and a
  skills block, and no evidence.
- The old skills rule counted `\skillline` MACROS, which does not control
  density: six categories with long value lists wrap to twelve or more rendered
  lines. Replaced with a rendered-line budget verified in the compiled PDF, plus
  the rule that a skills line repeating what three bullets below already prove is
  spending the first screen to say it twice.
- Employer chronology stays reverse-chronological; the ordering freedom is
  WITHIN a position, where the bullet closest to the target role leads.
- New helper `page_metrics.py` measures page-one geometry from the PDF via
  pdftotext -bbox.

F19 - education and phrasing
- Degree + focus + institution crammed into one cell with a right-aligned date
  produced visible word spacing and mid-word breaks in SBB, NVIDIA and Aker BP.
  Split the entry, as RUAG_AI_Engineer_C5I already did. Template carries the rule.
- Grades and thesis stay only where concretely relevant. claims.json
  grade_output_rule already keeps grades off by default; the M.Eng. thesis earns
  its place on condition-monitoring or sensor-data roles and otherwise does not.

Validated by measurement rather than assertion
- page_metrics.py first reproduced the review's own figures (NVIDIA 55.4%,
  SBB 50.6%, RUAG 50.3%). That is what makes the after-figure meaningful.
- The NVIDIA CV was rebuilt FROM A COPY with the guidance applied: experience
  moved 55.4% -> 44.0% of page one, page-one text lines 47 -> 39, still two
  pages, zero overfull boxes, validator PASS.
- The submitted package itself was not modified. F17 classifies archives as
  evidence, not as drafts.

The percentage is a diagnostic, not a target: no pixel goal and no rule that
page two must be filled.

All 19 review findings are now complete. 37/37 tests pass.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qej5SBvhcbGXHwLqNWiskM
2026-09-11 20:56:17 +02:00

97 lines
6.4 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{ML delivery}{Production inference deployment and support, on-call operations; ELK, Grafana and Prometheus proof-of-concept work}
\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 (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}