Christian Schmid
Name
Christian Schmid
Role
AI Engineer, Telefónica Germany
Local time
Dachau, Bavaria · --:--
Status
Open to new roles

AI that makes enterprise sales teams faster.

I design and ship AI prototypes on Azure that connect Databricks pipelines with Salesforce, turning manual B2B sales work into automated workflows.

01Expertise

3 areas

Where AI, data and Salesforce meet.

I make sure a model doesn't stay a demo: it ends up in a sales rep's daily workflow, on data that can be trusted.

01

Fig. 1.1

Data → model → CRM

AI prototypes on Azure

Prototypes that take sales teams from manual work to automated workflows, built on Azure and shipped into the tools people already use.

Replaced third-party SaaS with in-house AI tooling

  • Azure
  • Python
  • Machine Learning
  • Databricks

02

Fig. 1.2

Medallion pipeline

Data platforms & pipelines

Reliable, tested pipelines from raw data to business-ready models, with quality gates that catch bad data before it reaches a dashboard.

320M records processed for under $10 of compute

  • Databricks
  • Snowflake
  • dbt
  • Airflow
  • Kafka

03

Fig. 1.3

Org-to-org sync

Salesforce engineering

Lightning Web Components, Apex and real-time integrations that remove manual data entry for large B2B sales organisations.

1.4M customer accounts on LWC + Apex

  • Salesforce
  • LWC
  • Apex
  • REST

02Selected work

6 projects · 2023–2026

Projects I've shipped.

Personal and lab projects across data engineering, machine learning and blockchain identity.

Featured · P.01

2026

Jersey City Bikeshare

230K
Trips processed
24
Automated tests
3
Environments
  1. Raw + stream
  2. Validation
  3. Silver
  4. Gold
  5. Marts

A production-style data platform for Citibike trip data: medallion architecture in dbt, Kafka streaming, Snowflake provisioned with Terraform and orchestrated by Airflow. A quarantine layer isolates bad rows instead of letting them break downstream models.

  • Snowflake
  • dbt
  • Airflow
  • Kafka
  • Terraform

Featured · P.02

2026

NYC Taxi Data Pipeline

320M
Taxi trips
7
Years of data
$9.94
Total compute
  1. Landing
  2. Bronze
  3. Quarantine
  4. Silver
  5. Gold

Seven years of New York yellow taxi trips moved through a Bronze, Silver and Gold pipeline on Snowflake and dbt. Warehouses auto-suspend after every load, which kept the total compute bill under ten dollars.

  • Python
  • Snowflake
  • dbt
  • Data Engineering
No.Project
  • P.03

    World ID Single Sign-On

    2023

    Built in Telefónica's innovation lab: a Next.js sign-on that proves a user is a unique human with World ID, comparing on-chain and cloud verification side by side.

    Next.js / Blockchain / Identity

  • P.04

    Stock Price Regression

    2024

    An ordinary least squares model for Apple's share price, and an honest look at why strong backtest numbers did not survive contact with real future data.

    Python / Machine Learning / Finance

  • P.05

    GAN Image Generation

    2024

    A generative adversarial network trained for 500 epochs to produce synthetic handwritten digits, evaluated with the FID score.

    PyTorch / Python / Computer Vision

  • P.06

    NFT Collection Factory

    2024

    A Solidity factory that deploys a new ERC-721 collection, mints the first token and hands over ownership in a single transaction.

    Solidity / ERC-721 / OpenZeppelin

03Code

3 excerpts · annotated

A look under the hood.

Excerpts from my own projects, with notes on the decisions behind them. Hover a note to highlight its lines.

models/quarantine/quarantine_trips.sqldbt · SQL · 33 lines
{{ config(
    materialized     = 'incremental',
    schema           = 'QUARANTINE',
    on_schema_change = 'fail'
) }}

WITH source AS (
    SELECT * FROM {{ ref('stg_yellow_taxi') }}
    {% if is_incremental() %}
    WHERE _loaded_at > (SELECT MAX(_loaded_at) FROM {{ this }})
    {% endif %}
),

validation AS (
    SELECT
        *,
        CASE
            WHEN dropoff_datetime <= pickup_datetime
                THEN 'dropoff_datetime <= pickup_datetime (trip ends before it starts)'
            WHEN trip_distance > 500
                THEN 'Unrealistic trip_distance > 500 miles: ' || CAST(trip_distance AS VARCHAR)
            WHEN passenger_count > 9
                THEN 'passenger_count exceeds max capacity: ' || CAST(passenger_count AS VARCHAR)
            -- … 8 more rules
            ELSE NULL
        END AS _rejection_reason
    FROM source
),

-- Only the INVALID rows (opposite of silver_trips.sql)
invalid_only AS (
    SELECT * FROM validation WHERE _rejection_reason IS NOT NULL
)

Notes

  1. 1

    Append-only by designL1–5

    Incremental without a unique key: once a row is rejected, its record is kept permanently.

  2. 2

    Only new dataL7–12

    A load-time watermark means each run only checks Bronze rows that arrived since the last one.

  3. 3

    A reason for every rejectionL17–26

    Each bad row says why it failed, so quarantine can be queried for root causes instead of guessed at.

  4. 4

    Same rules, opposite filterL30–33

    Silver keeps the rows that pass and Quarantine the rows that fail, so every row lands in exactly one.

04Career

4 roles · since 2018

Where I've worked.

From freelance web projects and internships in Munich and London to AI engineering at one of Germany's largest telecom providers.

  1. R.01

    2021 – Today

    Current role

    Telefónica Germany

    AI Engineer

    Full-time since Sep 2024 · dual study 2021–2024

    Mannheim, Germany

    • Shorten B2B sales cycles with AI prototypes on Azure that connect Databricks pipelines to Salesforce, freeing sales capacity for revenue-critical work.
    • Reduce vendor dependency by replacing third-party SaaS with purpose-built in-house AI tooling, cutting costs while keeping full control over data and models.
    • Removed manual data entry with a real-time Salesforce-to-Salesforce REST integration and Lightning Web Components managing 1.4M customer accounts.
    • Presented blockchain identity in the corporate innovation lab with a World ID single sign-on application built in Next.js.
  2. R.02

    2019 – 2021

    CS Development

    Founder & Lead Developer

    Part-time

    Munich, Germany

    • Won 15+ e-commerce clients alongside my studies, delivering custom full-stack web applications.
    • Grew organic traffic and conversion through SEO metadata, structured data and faster page loads.
  3. R.03

    2019 – 2020

    Giesecke+Devrient

    Software Development Intern

    Munich, Germany

    • Streamlined operating-system installation for payment card production with a cross-platform Python desktop application.
  4. R.04

    2018

    Avast Software

    Software Engineering Intern

    London, United Kingdom

    • Built a Chrome extension with secure authentication and a dashboard that shows users which websites track them.

05Background

Education · Languages · Tools

Education and skills.

Education

2021 – 2024

B.Sc. Business Informatics

DHBW Mannheim

  • Dual study programme with Telefónica Germany
  • Specialisation in Data Science & Machine Learning

Bachelor thesis

“Blockchain Identity Solutions in Telecommunications”

Languages

CEFR scale

  • German

    Native

  • English

    C1 · Fluent

Toolbox

17 tools

Languages
PythonTypeScriptJavaScriptSQLSolidity
Frameworks
ReactNext.jsLWCApexNode.js
Platforms
AzureDatabricksSalesforceSnowflakedbtAirflowDocker

06 Contact

Email · Phone · Social

Have a role or project in mind?

I'm open to new opportunities in AI and data engineering. The quickest way to reach me is by email.

christian.schmid.work@gmail.com

Phone+49 176 62867296

LinkedInView profile

GitHubView profile