Learn in Public

Reading

The work in these essays stands on a lot of other people's. This is the running library underneath it - the papers and references the methodology is built on, with a line on why each one matters. It is the same bibliography the essays cite, kept in one place so you can read past my framing to the sources themselves.

Evaluation & LLM-as-a-judge

How to score model output reliably - panels over single judges, the reliability of LLM judges, and where consensus helps and where it stops.

Measurement & validity

The older science underneath the scores: comparative judgment, paired-comparison models, construct validity, and when a number is even allowed to be averaged.

Determinism & long context

Why you cannot simply dial in reproducibility, and how long contexts degrade in ways a bigger window does not fix.

  • OpenAI Developer Community “Temperature in GPT-5 models.”

    Reasoning models reject a temperature knob - only the default is accepted - so you cannot buy determinism by turning temperature down.

  • Microsoft Learn “How to generate reproducible output with Azure OpenAI.”

    A seed is best-effort: identical output is not guaranteed across system or hardware changes. Reproducibility has to be engineered at the seams, not toggled on.

  • Liu, N. F. et al. (2023). “Lost in the Middle: How Language Models Use Long Contexts.” arXiv:2307.03172 (TACL 2024).

    Models use the beginning and end of a long context well but degrade sharply on information buried in the middle - so a longer context window is not the same as a usable one.

  • Modarressi, A., Deilamsalehy, H., Dernoncourt, F. et al. (2025). “NoLiMa: Long-Context Evaluation Beyond Literal Matching.” arXiv:2502.05167 (ICML 2025).

    When needle and question share no literal overlap, 11 of 13 models fall below half their short-context accuracy by 32K tokens (GPT-4o: 99.3% to 69.7%) - degradation well before the window is full, so more context is not more usable context.

  • Chen, L., Zaharia, M. & Zou, J. (2023). “How is ChatGPT's Behavior Changing Over Time?.” arXiv:2307.09009, published in HDSR.

    GPT-4's prime-identification accuracy fell 97.6% to 2.4% between the March and June 2023 versions - same endpoint, same model name, silently different behavior. The founding receipt for continuous monitoring of hosted models.

Retrieval & context

What actually helps a model answer from your data - and where retrieval pipelines quietly lose the signal they were built to carry.

  • Lewis, P. et al. (2020). “Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks.” arXiv:2005.11401 (NeurIPS 2020).

    The founding RAG paper: a parametric model paired with a non-parametric index for open-domain question answering - retrieval earns its keep precisely when you cannot point in advance to the passage that answers the question.

  • RAGFlow (2025). “From RAG to Context.”

    A retrospective from inside the RAG camp conceding that for fixed, well-structured data, much simpler approaches than retrieval suffice - the tool-fit framing stated by the tool's own advocates.

  • AI21 Labs (2025). “RAG and structured data.”

    A retrieval vendor's own admission that chunk-based semantic retrieval is suboptimal and ineffective at scale for tabular and structured data.

  • “RAG "Hype" vs. Reality.” (2025).

    A practitioner catalog of RAG's operational limits that keeps returning to the same bottleneck: the whole system is capped by retrieval quality, and chunking routinely shreds document structure to hit a token budget.

  • Shi, F. et al. (2023). “Large Language Models Can Be Easily Distracted by Irrelevant Context.” arXiv:2302.00093 (ICML 2023).

    Adding irrelevant context to a problem the model otherwise solves sharply degrades accuracy - direct evidence that extra input is not neutral and can actively pull a model off, not just fail to help.

Tooling & the declarative turn

The frameworks and build systems the essays lean on - from Make and the System R optimizer through dbt and Dagster to typed agent contracts. Declare the what; the engine derives the how.

  • Google Cloud “Document AI: full processor and detail list.”

    Every stage of the intelligent-document-processing spine ships as a discrete, named cloud processor - classifier, splitter, parser, custom extractor - evidence that extract-to-schema is settled industry vocabulary, not a bespoke invention.

  • OpenAI “Structured Outputs.”

    Constrained decoding compiles a JSON schema into a grammar and restricts token choices at decode time, so output conforms to the schema by construction - extraction stopped being a hope and became a guarantee about structure.

  • Liu, J. “Instructor: structured outputs for LLMs.”

    The library that popularized schema-first LLM extraction - typed, validated outputs as the default interface to a model rather than free text.

  • Anthropic (2024). “Introducing the Model Context Protocol.”

    The protocol announcement: MCP collapses the N-by-M integration explosion toward N plus M by giving every client and every tool one shared protocol.

  • Model Context Protocol (2025). “MCP Specification (revision 2025-11-25): Transports.”

    The current spec revision: stdio and Streamable HTTP as the supported transports, with HTTP+SSE deprecated and retained only for backwards compatibility.

  • Anthropic (2025). “Code execution with MCP.”

    The protocol author's own numbers: one workflow drops from 150,000 tokens to 2,000 - a 98.7% cut - by not loading every tool definition into context and letting the model call a small generated API instead.

  • Anthropic (2025). “Agent Skills.”

    The lighter primitive: SKILL.md instruction files loaded by progressive disclosure, leaning on the filesystem and shell the model already knows rather than injecting a wall of tool schemas.

  • Ronacher, A. (2025). “Skills vs Dynamic MCP Loadouts.”

    A well-designed Sentry MCP server consumes roughly 8,000 tokens of tool definitions loaded up front, and definitions get trimmed and rewritten between versions - the API-stability problem stated from inside the ecosystem.

  • Ngiam, J. “MCPs, CLIs, and skills.”

    The clearest statement of where MCP uniquely earns its keep: non-developers invoking tools from inside a chat client, where there is no shell in the loop.

  • Willison, S. (2025). “The Lethal Trifecta for AI Agents.”

    Private data, untrusted content, and the ability to communicate externally - the combination with no reliable patch, whose only mitigation is not assembling it in the first place.

  • Taraghi, M., Morovati, M. M. & Khomh, F. (2026). “Real Faults in Model Context Protocol (MCP) Software: A Comprehensive Taxonomy.” arXiv:2603.05637.

    The first large-scale taxonomy of MCP-server faults - five high-level categories, validated by practitioner survey - empirical evidence that the layers you operate are layers that fail.

  • Microsoft (2026). “Microsoft Agent Factory.” Microsoft AI.

    The hybrid market structure in one primary source: managed agent platforms are sold alongside training, forward-deployed engineering support, and a partner marketplace. Productizing the factory can create a delivery ecosystem rather than remove one.

  • Google Cloud (2025). “Vertex AI Agent Builder overview.” Google Cloud documentation.

    A representative full-lifecycle factory: samples and tools, an agent development kit, managed deployment and scaling, evaluation, identities, and security controls are becoming platform capabilities rather than bespoke plumbing.

  • Feldman, S. I. (1979). “Make - A Program for Maintaining Computer Programs.” Software - Practice and Experience 9(4).

    Targets and prerequisites as declared artifacts; build order - and what NOT to rebuild - derived. Incrementality and parallelism fall out of the DAG.

  • Selinger, P. G. et al. (1979). “Access Path Selection in a Relational Database Management System.” SIGMOD 1979.

    The System R cost-based optimizer - the canonical deterministic derivation engine, and the ancestor of every EXPLAIN plan ever debugged.

  • Miller, P. (1997). “Recursive Make Considered Harmful.” AUUG 1997.

    The classic failure mode of a declarative engine given incomplete declarations: partitioned Makefiles hand the engine a fractured DAG, so it derives wrong or slow builds. The fix is total knowledge, foreshadowing Nix and Bazel.

  • Harris, R. (2018). “Virtual DOM is pure overhead.” Svelte blog.

    The honest counterweight to the React story: the derivation step itself has a cost the imperative version never paid. Svelte compiles the declaration to imperative code ahead of time instead.

  • Handy, T. et al. (2016). “The dbt Viewpoint.” dbt documentation.

    The founding philosophy of models-as-declarations: analytics code should be version-controlled, tested, and declarative-first; the DAG is derived from ref() calls.

  • Dagster Labs “What Is a Software-Defined Asset.” Dagster glossary.

    The canonical definition: "a description, in code, of an asset that should exist and how to produce and update it."

  • Schrock, N. (2022). “Rebundling the Data Platform.” Dagster blog.

    The launch argument for software-defined assets: orient orchestration around assets rather than tasks, and a single surface of lineage, observability, and quality monitoring falls out.

  • Ryza, S. (2022). “Declarative Scheduling for Data Assets.” Dagster blog.

    "You haven't scheduled any jobs, Airflow DAGs, or Prefect Flows. You've just declared how your data flows and when you expect it to be up-to-date." Scheduling derived from declared freshness.

  • Khattab, O. et al. (2023). “DSPy: Compiling Declarative Language Model Calls into Self-Improving Pipelines.” arXiv:2310.03714.

    The closest intellectual ancestor of declarative agents: typed signatures declared, prompts compiled and optimized against metrics. "Programming - not prompting - language models."

  • Wang, X. et al. (2024). “Executable Code Actions Elicit Better LLM Agents.” ICML 2024, arXiv:2402.01030.

    The code-as-action precedent: replacing JSON tool calls with executable Python as the unified action space, up to ~20% higher success across 17 models. The execution model NOOA builds on.

  • Furgale, P. et al. (NVIDIA) (2026). “NVIDIA-labs OO Agents: Native Python Object-Oriented Agents.” arXiv:2607.20709.

    The case study: an agent is a Python object - docstrings are prompts, type annotations are contracts, and methods with `...` bodies are implemented by the model at runtime. Code at github.com/NVIDIA-NeMo/labs-OO-Agents.

  • OWASP CycloneDX (2023). “CycloneDX v1.5: ML-BOM support.” CycloneDX specification.

    The SBOM standard grew model and dataset component types plus a modelCard object in June 2023 - the inventory half of the model-BOM problem is standardized; the sourcing-continuity half is not.

  • Linux Foundation Research (2024). “Implementing AI Bill of Materials (AI BOM) with SPDX 3.0.” LF Research implementation guide.

    SPDX 3.0's AI and Dataset profiles applied: model type, training information, limitations, energy use, safety assessments. Adoption is early - generators and prototypes, not yet procurement-grade demand.

  • Backstage Project Authors “System Model.” Backstage software catalog documentation.

    Shows how machine-readable components, APIs, resources, and relationships can support discovery and dependency visibility; an agent estate would extend this pattern with model routes, evidence, permissions, and operating ownership.

Software history & abstraction

The older papers and essays on how abstractions win, leak, and come back around - the fifty-year context the current agent moment rhymes with.

Industry & practice

Announcements, reporting, and field notes that mark where the industry is actually moving - the receipts behind the commercial claims.

  • Yao, S. et al. (2022). “ReAct: Synergizing Reasoning and Acting in Language Models.” arXiv:2210.03629.

    The paper that wrote down the agentic loop - reason, act, observe - as an explicit structure rather than an emergent behavior.

  • Shinn, N. et al. (2023). “Reflexion: Language Agents with Verbal Reinforcement Learning.” arXiv:2303.11366 (NeurIPS 2023).

    Extends the loop with reflect-and-retry - and quietly presupposes the thing most teams skip: a signal that says the last attempt was wrong.

  • Anthropic (2024). “Building Effective Agents.”

    Distinguishes predefined workflows from agents that dynamically direct their own process and tools, and recommends adding agentic complexity only when simpler approaches fall short.

  • National Institute of Standards and Technology (2023). “AI Risk Management Framework Core.” NIST AI Resource Center.

    Defines outcomes for targeted application scope, operator proficiency, human oversight, independent review, monitoring, appeal and override, deactivation, recovery, and change management.

  • Data Science Dojo (2026). “Loop Engineering.”

    Representative of the 2026 "loop engineering" genre: the right slogan - design the loop, not the prompt - that resolves into a guardrails checklist and stops where the engineering starts.

  • Shaw, S. D. & Nave, G. (2026). “Thinking—Fast, Slow, and Artificial: How AI is Reshaping Human Reasoning and the Rise of Cognitive Surrender.” Wharton working paper; SSRN 6097646; PsyArXiv DOI 10.31234/osf.io/yk25n_v1.

    Three preregistered experiments (n=1,372, ~10,000 trials): a confidently wrong AI drags answers 15 points below baseline while raising user confidence 11.7 points, and 73% of wrong answers were accepted without any attempt to override - the paper coins "cognitive surrender."

  • Kosmyna, N. et al. (2025). “Your Brain on ChatGPT: Accumulation of Cognitive Debt when Using an AI Assistant for Essay Writing Task.” arXiv:2506.08872 (MIT Media Lab).

    EEG study: AI-assisted writers showed the weakest, least-distributed neural connectivity of three groups and weaker recall of their own text - suggestive of a mechanism, not proof of permanent decline (small-N, short-horizon, essay writing).

  • Anthropic (2026). “How AI assistance impacts the formation of coding skills.”

    Randomized trial, 52 mostly-junior engineers: AI-assisted averaged 50% vs 67% hand-coded on comprehension - but conceptual-inquiry users scored 65%+ while generate-and-delegate users scored under 40%. The mode of use decided the outcome, not the tool.

  • Bainbridge, L. (1983). “Ironies of Automation.” Automatica 19(6):775-779.

    The classic irony: automating a process erodes the operator skill needed precisely in the abnormal moments when the human must take over.

  • Parasuraman, R. & Manzey, D. H. (2010). “Complacency and Bias in Human Use of Automation: An Attentional Integration.” Human Factors 52(3):381-410.

    Automation complacency and bias appear in experts as readily as in novices and are not cured by simple practice - the out-of-the-loop operator is a known hazard with a known shape.

  • Osmani, A. (2026). “Cognitive surrender and comprehension debt.”

    Sharpened "cognitive surrender" for practitioners and named comprehension debt: the widening gap between the volume of code in your name and the amount of it you actually understand.

  • Kahn, J. (2026). “Anthropic's Boris Cherny doesn't write code by hand anymore.” Fortune (Brainstorm Tech, Aspen, June 11, 2026).

    The primary source for the Cherny quote: "I haven't written a line of code by hand in, I think, eight months now."

  • Cherny, B. (2026). “"As engineering, product, design, DS, etc. melt into a new kind of role..." [Post].” X (June 28, 2026); cross-posted by the author to Threads the same day.

    Primary source for the five Claude Code team archetypes: prototyper, builder, sweeper, grower, maintainer. A hedged, forward-looking observation ("what I think is five archetypes") about one team, not a staffing study. Author fallback copy, publicly readable without an X account: https://www.threads.com/@boris_cherny/post/DaJgVFVj2PB/

  • Zaharia, M. et al. (2024). “The Shift from Models to Compound AI Systems.” Berkeley AI Research (BAIR) blog.

    Defines a compound AI system as one that tackles tasks using multiple interacting components - model calls, retrievers, external tools - and argues state-of-the-art results now come from the system, not a monolithic model.

  • Schmidt, J. (2025). “Trading Margin for Moat: Why the Forward Deployed Engineer Is the Hottest Job in Startups.” Andreessen Horowitz.

    The wave's own economics, said out loud: trade gross margin for control of the deployment layer, because the implementation-heavy companies (Salesforce, ServiceNow, Workday) started margin-ugly and ended up as systems of record. Also counts 22 of OpenAI's 311 open roles as forward-deployed/solutions engineering.

  • Orosz, G. (2025). “What are Forward Deployed Engineers, and why are they so in demand?.” The Pragmatic Engineer.

    The role's documented history: Palantir created the title in the early 2010s and called the people who held it "Deltas" - and until around 2016 the company had more forward-deployed engineers than conventional software engineers.

  • Palantir Technologies Inc. (2026). “Annual Report for the Year Ended December 31, 2025.” Form 10-K, U.S. Securities and Exchange Commission.

    Bounds the economic claim: Palantir reports subscription software, O&M, and professional services in one productized operating model, including customer-facing configuration, training, ontology, and data-modeling support. It reported 82% consolidated gross margin in 2025 but does not disclose an FDE-specific P&L.

  • PYMNTS (2026). “Forward-Deployed Engineers Emerge as One of AI's Fastest-Growing Jobs.” PYMNTS, citing the Financial Times.

    Secondary report of a Financial Times analysis of Indeed postings: monthly listings for the title reportedly grew more than 800% between January and September 2025. The underlying series is not reproduced, so the essay uses this only as a directional signal of title demand.

  • SAP SE (2015). “SAP Solution Manager 7.1: ALM Processes in Detail.” SAP Help Portal.

    Documents ASAP as a repeatable implementation method with roadmaps, customer-specific blueprints, configuration, testing, operations, and reusable implementation content.

  • Infosys Technologies Limited (2003). “Annual Report on Form 20-F for Fiscal 2003.” Infosys investor filing.

    A primary-source receipt for services industrialization: Infosys describes decomposing projects across client sites and offshore centers, training rapidly deployable professionals, reusing knowledge, and executing components where they are most cost-effective.

  • Accenture plc (2025). “Annual Report for Fiscal 2025.” Form 10-K, U.S. Securities and Exchange Commission.

    Describes standardized processes, methods, tools, automation, global delivery, industry specialization, and cost advantages as inputs to scalable, price-competitive services.

  • Deng, X. (N.) (2010). “Acting as Translators between Consultants and Users in ERP Implementation: An Exploratory Study of Analysts' Boundary Spanning Expertise.” International Research Workshop on IT Project Management.

    Direct precedent for the analyst-builder thesis: effective boundary spanners need overlapping business and technical knowledge, plus the standing to probe assumptions and challenge the status quo across both groups.

  • Ko, D.-G., Kirsch, L. J. & King, W. R. (2005). “Antecedents of Knowledge Transfer from Consultants to Clients in Enterprise System Implementations.” MIS Quarterly 29(1).

    A matched-pair study across 96 ERP projects. It treats the client's ability to apply implementation knowledge and maintain the system independently as an expected outcome, grounding capability transfer as more than a consulting slogan.

  • OpenAI (2026). “OpenAI launches the OpenAI Deployment Company to help businesses build around intelligence.” OpenAI.

    A primary-source receipt that the model provider is rebuilding the implementation layer: DeployCo launched with more than $4 billion of initial investment and approximately 150 forward-deployed engineers and deployment specialists from Tomoro.

  • Ode with Anthropic (2026). “Anthropic, Blackstone, and Hellman & Friedman Introduce Ode with Anthropic, an Enterprise AI Services Firm.” Ode.

    A second primary-source receipt that frontier-model access is being paired with a dedicated delivery institution. Ode combines Anthropic engineers with the acquired Fractional AI team and positions itself as an end-to-end partner from roadmap through deployment. The official announcement does not disclose a dollar value.

  • Bellan, R. (2026). “Anthropic, Blackstone bet the next trillion-dollar AI business is implementation, not just models.” TechCrunch.

    Reports Ode as a $1.5 billion company. The essay and figure keep this separate from DeployCo's officially disclosed initial investment because company value and invested capital are not directly comparable.

  • OpenAI (2026). “OpenAI API Pricing.” OpenAI.

    Primary-source evidence that API usage is metered and billed through input, cached-input, and output tokens. It establishes the recurring-usage mechanism without disclosing DeployCo's economics or proving that token pull-through motivated the investment.

  • Anthropic (2026). “Claude Model Pricing — All Platforms.” Anthropic.

    Primary-source rate card showing Claude API pricing per million input, output, and cache tokens. It supports recurring model-consumption economics while leaving Ode's services and referral economics undisclosed.

  • Prefect (2026). “Prefect Acquires Dagster Labs.” prefect.io, July 13, 2026.

    The commercial tell: the two leading Airflow successors merge, mapping Dagster as the "outcomes layer," Prefect as the "execution layer," and FastMCP as the "access layer" of an agent-orchestration platform.

  • Schrock, N. (2026). “Prefect is Acquiring Dagster.” Dagster blog, July 13, 2026.

    The founder's own note on the merger: Prefect's dynamic workflows are 'newly relevant in the agentic era'; Dagster brings partitioning, lineage, cataloging, and scheduling. Schrock steps down.

  • OpenAI “Model deprecations.” OpenAI developer documentation.

    The primary source for shutdown dates and notice floors: 6 months for GA models, 3 for specialized variants, as little as 2 weeks for previews. The July 23, 2026 wave retired 18 snapshots including the deep-research models.

  • Tursio Inc. (2025). “Prompt Migration: Stabilizing GenAI Applications with Evolving LLMs.” arXiv:2507.05573.

    The best quantified migration war story: a 100%-passing suite dropped to 97-98% on naive model swap; a systematic testbed and prompt restructuring recovered 100% and cut migration effort from several months to two weeks.

  • Anthropic (2025). “Commitments on model deprecation and preservation.” Anthropic research blog, Nov 4, 2025.

    The vendor acknowledging the problem: weights of all publicly released models preserved "for, at minimum, the lifetime of Anthropic as a company," plus post-deployment reports. Preservation is not availability - the 60-day retirement floor coexists with it.

  • Microsoft “Azure OpenAI model deprecations and retirements.” Microsoft Learn.

    GA models available a minimum of 12 months from launch with at least 60 days notice before retirement - the same weights on a longer contract. Azure lists o3-deep-research retiring ~5 months after OpenAI shut it off.

  • AWS “Amazon Bedrock model lifecycle.” AWS documentation.

    At least 12 months on platform and 6 months of Legacy notice, plus a paid Extended Access phase. Claude 3.7 Sonnet lived two months longer on Bedrock than on Anthropic's own API - distribution contract as sourcing terms.

  • Huckins, G. (2025). “The people who lost their AI companions when GPT-4o was retired.” MIT Technology Review, Aug 15, 2025.

    The serious account of the #Keep4o episode. A follow-up peer-reviewed study coded the responses: relational attachment, disappointment, grief - model updates as "significant social events."

  • Cognition (2025). “Rebuilding Devin for Claude Sonnet 4.5: Lessons and Challenges.” Cognition engineering blog.

    The counter-evidence to "a good harness makes models swappable": a better model "broke our assumptions about how agents should be architected" and required a harness rebuild - which then paid off at 2x speed.

  • OpenAI (2026). “OpenAI to acquire promptfoo.” openai.com, March 9, 2026.

    The vendor whose release cadence forces migrations bought the leading open-source migration-testing tool - model-swap evaluation is now strategic infrastructure, by the acquirer's own admission.

  • Willison, S. (2026). “The new GPT-5.6 family: Luna, Terra, Sol.” simonwillison.net, July 9, 2026.

    The replacement model, independently assessed: "definitely very competent," state of the art on some benchmarks - and even expert users publicly puzzling over which effort level to run it at. Capability was never the migration problem.

  • Forsgren, N. et al. (2019). “Accelerate State of DevOps 2019.” DORA research report.

    Reports an association between heavyweight external change approval and lower software-delivery performance, and recommends peer review plus automation; the finding is correlational and is not evidence to remove consequential review.

  • DORA (2026). “Platform engineering.” DORA capabilities guide, updated January 12, 2026.

    Treats an internal platform as a product and recommends measuring adoption, retention, task success, and delivery outcomes. Its research reports correlations and capability guidance, not causal proof for an AI operating model.

  • DORA (2024). “Accelerate State of DevOps Report 2024.” DORA research report.

    In a survey of nearly 3,000 technology professionals, a 25% increase in reported AI adoption was associated with better documentation, code quality, code review speed, and approval speed, but lower delivery throughput and stability. The estimates are correlational and the report charts 89% uncertainty intervals.

  • DORA (2025). “State of AI-assisted Software Development 2025.” DORA research report, version 2025.2.

    In a survey of nearly 5,000 technology professionals, the point estimate for AI adoption and software-delivery throughput was positive but its 89% interval narrowly crossed zero; the estimate for delivery instability was clearly positive. The standardized cross-sectional model differs from 2024, so direction can be compared but coefficient magnitude cannot be treated as a longitudinal trend.

  • Model Evaluation & Threat Research (METR) (2026). “Measuring AI Ability to Complete Long Tasks: Time Horizon 1.1.” METR research dashboard, updated May 8, 2026.

    Estimates the human-expert task duration at which models complete 228 well-specified technical tasks with 50% or 80% success. The results are not measures of autonomous job duration, carry wide uncertainty intervals, and are unreliable above 16 hours with the current task suite.

  • National Institute of Standards and Technology (2023). “Artificial Intelligence Risk Management Framework (AI RMF 1.0).” NIST AI 100-1.

    A voluntary, use-case-agnostic framework covering roles, inventory, deployment-context evaluation, monitoring, incident response, recovery, and decommissioning.

  • Fowler, M. (2024). “Strangler Fig Application.” martinfowler.com.

    Explains incremental modernization through outcome definition, decomposition, transitional architecture, and gradual replacement rather than a single high-risk cutover.

  • Google SRE “Canarying Releases.” The Site Reliability Workbook.

    Describes staged exposure, control comparison, evaluation, and rollback as a production-release discipline. Agentic work needs additional semantic and operating-consequence evaluation.

These sources underpin the Field Guide - the essays show what they look like in production.