{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "# Claude for Product Management \u2014 Advanced\n",
        "\n",
        "## Learning Objectives\n",
        "- Ethical considerations for user research synthesis\n",
        "- Handling confidential strategy docs\n",
        "- Alignment between GTM and engineering timelines\n",
        "\n",
        "## Time Estimate\n",
        "**1.5\u20132.5 hours**\n",
        "\n",
        "## Notebook Intent\n",
        "This notebook is designed to be run top-to-bottom. Each section ends with a small checkpoint you can reuse in your own projects.\n",
        "\n",
        "---\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## Guided Practice \u2014 Trade-offs + hardening\n",
        "\n",
        "You will:\n",
        "- implement a small, testable unit of logic\n",
        "- interpret the results in domain terms for **Claude for Product Management**\n",
        "- identify the next experiment that would most improve outcomes\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "from __future__ import annotations\n",
        "\n",
        "from dataclasses import dataclass\n",
        "from typing import Callable, Dict, List\n",
        "\n",
        "\n",
        "@dataclass\n",
        "class Policy:\n",
        "    name: str\n",
        "    max_cost: float\n",
        "\n",
        "\n",
        "def choose_policy(quality_need: float, policies: List[Policy], score: Callable[[Policy], float]) -> Policy:\n",
        "    feasible = [p for p in policies if score(p) >= quality_need]\n",
        "    if not feasible:\n",
        "        raise ValueError(\"no feasible policy\")\n",
        "    return min(feasible, key=lambda p: p.max_cost)\n",
        "\n",
        "\n",
        "policies = [\n",
        "    Policy(\"small_fast\", max_cost=0.2),\n",
        "    Policy(\"balanced\", max_cost=0.55),\n",
        "    Policy(\"max_quality\", max_cost=1.0),\n",
        "]\n",
        "\n",
        "\n",
        "def score(policy: Policy) -> float:\n",
        "    mapping = {\"small_fast\": 0.62, \"balanced\": 0.78, \"max_quality\": 0.9}\n",
        "    return mapping[policy.name]\n",
        "\n",
        "\n",
        "choose_policy(0.75, policies, score)\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## Exercise (Notebook)\n",
        "Pick one metric you care about for **Claude for Product Management** (quality, latency, cost, risk).\n",
        "\n",
        "1. Write down how you will measure it (even if approximate).\n",
        "2. Change one part of the code cell and rerun.\n",
        "3. Record what improved and what regressed.\n",
        "\n",
        "## Stretch\n",
        "Turn the code cell into a function with type hints and add one negative test (an input that should fail).\n"
      ]
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "name": "python",
      "version": "3.10.0",
      "mimetype": "text/x-python",
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 4
}
