← Prisma 7 — ORM, Migrations & Data Modeling
Guided Course · Phases 09–11

Dangerous Schema Changes

Here’s the simple reason this matters: A schema change is dangerous when old application code or existing rows cannot satisfy the new schema immediately. Safe rollouts often expand, backfill, verify, then contract. In this course, we connect it directly to the Prisma layer that maps application code to PostgreSQL while keeping migrations explicit, so you can see where the idea lives in a real project instead of memorizing a definition.

≈ 1,898 structured instructional words

Learning contract

What you should be able to do

Objectives

Before you start

  • Complete the previous lesson in Prisma 7 — ORM, Migrations & Data Modeling or demonstrate equivalent skill.
  • Start from a healthy project/checkpoint.
Plain-English lesson

First, understand the idea without the jargon

A schema change is dangerous when old application code or existing rows cannot satisfy the new schema immediately. Safe rollouts often expand, backfill, verify, then contract.

You will use this idea while working on the Prisma layer that maps application code to PostgreSQL while keeping migrations explicit. We keep the example small first, then connect it back to TaskFlow so the framework does not hide the underlying behavior.

Keep these ideas in your head

  • Name the owner: decide which layer or runtime is responsible for Dangerous Schema Changes.
  • Name the input and output: write down what crosses the boundary and what callers can observe.
  • Predict before running: expected output is part of the exercise, not an afterthought.
  • Prefer one small change at a time so a failure has a narrow list of possible causes.
  • Finish by changing the requirement slightly; if the idea still makes sense, you are learning the concept rather than the snippet.

A simple way to practice it

  1. Read the plain-English explanation of Dangerous Schema Changes and say it back in your own words.
  2. Inspect the current project state and identify the smallest file or boundary that must change.
  3. Read the worked example but do not run it yet. Predict the output or state transition.
  4. Type the example yourself and run the narrowest possible verification.
  5. Compare actual evidence with your prediction. If they differ, stop and explain why before continuing.
  6. Replace the toy value with a TaskFlow-oriented case so Dangerous Schema Changes is connected to the real course project.
  7. Complete the controlled failure lab, fix it, and rerun the same verification.
  8. Close the solution and rebuild the core behavior from memory.
Mental model

Understand the boundary before the syntax

Start with the plain-English idea. A schema change is dangerous when old application code or existing rows cannot satisfy the new schema immediately. Safe rollouts often expand, backfill, verify, then contract.

Now place it in TaskFlow. This lesson belongs to the Prisma layer that maps application code to PostgreSQL while keeping migrations explicit. Ask four questions while you work: what enters this boundary, who owns the decision, what dependency does it use, and what evidence proves the result?

Keep the change small. Predict what you should see before you run anything, then compare the prediction with the real terminal, browser, HTTP, database, test, container, or CI evidence. If they differ, debug the first mismatch instead of editing several places at random.

The goal is not to remember the exact snippet below. The goal is to be able to explain Dangerous Schema Changes in your own words, rebuild the core behavior, and adapt it when the requirement changes.

I10.11 — Evidence loop
requirement
predict
small diff
run
observe
break
diagnose
repair
test
transfer
Treat every implementation as a chain of observable boundaries. Debug the first mismatch, not the loudest downstream symptom.
Current project state

Know where you are before changing code

You are working inside the Prisma 7 — ORM, Migrations & Data Modeling track. The project is healthy before this lesson, and the learner has completed the preceding checkpoint.

  1. 01

    Open the project root in VS Code and a terminal.

  2. 02

    Confirm you are on the intended Git branch and have no unrelated uncommitted changes.

  3. 03

    Run the previous checkpoint verification before changing code.

  4. 04

    Keep browser DevTools, API client, database console, or Docker logs visible when they are relevant to the boundary.

Step-by-step code-along

Build it in small pieces you can explain

  1. 01

    State the requirement for Dangerous Schema Changes in one observable sentence. Avoid implementation words at first; describe what a user, caller, compiler, database, or deployment should observe.

  2. 02

    Confirm the baseline is healthy. Run the narrowest existing verification and record the result so a new failure can be attributed to this lesson rather than an earlier problem.

  3. 03

    Inspect the current boundary relevant to Dangerous Schema Changes. Identify the input, owner, dependency, output, and failure mode before adding code.

  4. 04

    Read the working example below without running it. Predict the exact output, HTTP status, compiler result, database state, UI state, or deployment evidence.

  5. 05

    Type the smallest working slice yourself. Do not paste a finished subsystem. Keep the diff small enough that every new line can be explained.

  6. 06

    Run the narrowest command or interaction that proves the slice. Compare the observed evidence with the prediction and write down any mismatch.

  7. 07

    Extend the slice one step toward TaskFlow. Preserve the same ownership rule while replacing toy data with the real project boundary used by Dangerous Schema Changes.

  8. 08

    Introduce the controlled failure described below. Capture the first useful error line, request/response, query plan, browser state, test failure, container log, or CI job evidence before editing anything.

  9. 09

    Locate the first boundary where expected and actual evidence diverge. Change only the root cause, then rerun exactly the same verification.

  10. 10

    Add a repeatable regression check when practical: a test, type assertion, SQL constraint, health check, CI gate, security test, or documented smoke-test step.

  11. 11

    Close the lesson and rebuild the core behavior from memory. If you cannot explain one step, reopen only that section rather than copying the whole solution.

prismaWorked example
// Risky when old rows exist:
status String

// Safer first expansion:
status String? @default("OPEN")
// backfill + deploy readers/writers, then make required later
What you should observe

The staged design preserves compatibility with existing data and rolling application versions.

Verification

Prove that it works

Evidence checklist

Break it on purpose

Controlled failure lab

Break the exact assumption this lesson depends on. For **Dangerous Schema Changes**, change one input, configuration, ordering rule, permission, state transition, or dependency so the example can no longer satisfy its contract. Before running it, write down the failure you expect. Then run the same verification, capture the first useful symptom, and repair only the root cause.

SymptomWhat to inspect
Nothing changes or the wrong code path runs.Confirm the exact file/route/process is active, then inspect the closest boundary input before changing implementation.
The output differs from the prediction.Compare expected and actual evidence in order: input → boundary → dependency → output. Stop at the first mismatch.
A downstream error hides the real cause.Move one boundary earlier. Check compiler diagnostics, request payload, framework registration, SQL state, container logs, or CI step output before the final symptom.
The fix works only once.Add a deterministic verification and reset state between runs. Look for hidden cache, environment, transaction, time, ordering, or shared-state dependencies.
Common mistakes

Things that usually confuse learners

Copying a large finished block before understanding the first change.

Better approach: Type one small slice, run it, and explain the evidence before adding the next slice.

Changing several files after one error.

Better approach: Find the first boundary where expected and actual evidence differ, then change only that cause.

Memorizing syntax without understanding ownership.

Better approach: Explain why Dangerous Schema Changes belongs in this boundary and what would go wrong if the same rule were duplicated elsewhere.

Testing only the happy path.

Better approach: Deliberately violate one assumption and confirm the failure is understandable and controlled.

Practice ladder

Follow → modify → debug → build → defend

Follow

Reproduce the Dangerous Schema Changes example exactly and explain each line before moving on.

Modify

Change one TaskFlow requirement while preserving the ownership rule demonstrated by Dangerous Schema Changes.

Debug

Reproduce the intentional Dangerous Schema Changes failure, capture evidence, and repair only the root cause.

Build

Implement a new TaskFlow variation of Dangerous Schema Changes without reopening the working example until your first attempt fails.

Defend

Explain why the chosen boundary for Dangerous Schema Changes is preferable to placing the same rule in an adjacent layer.

Knowledge check

Answer in your own words before opening the answer

In plain language, what does “Dangerous Schema Changes” mean?

Answer: A schema change is dangerous when old application code or existing rows cannot satisfy the new schema immediately. Safe rollouts often expand, backfill, verify, then contract.

A good Dangerous Schema Changes explanation describes the behavior or boundary, not only the API or syntax used to implement it.

What concrete evidence should the worked Dangerous Schema Changes example produce?

Answer: The staged design preserves compatibility with existing data and rolling application versions.

That evidence is the observable contract for the Dangerous Schema Changes example. Compare it with the real result before changing anything.

Where does Dangerous Schema Changes connect to the TaskFlow learning project?

Answer: You will use this idea while working on the Prisma layer that maps application code to PostgreSQL while keeping migrations explicit. We keep the example small first, then connect it back to TaskFlow so the framework does not hide the underlying behavior.

The course connects Dangerous Schema Changes to a real project boundary so ownership and failure modes are easier to remember.

If the intentional Dangerous Schema Changes failure appears, what should you do before editing code?

Answer: Capture the first useful symptom, compare actual evidence with the prediction, and identify the earliest boundary where they diverge.

For Dangerous Schema Changes, evidence-first debugging prevents random edits and keeps the investigation tied to the actual failure path.

What would prove that you mastered Dangerous Schema Changes instead of memorizing its example?

Answer: You can rebuild the core idea behind Dangerous Schema Changes, change one requirement, diagnose a broken version, and explain why the responsibility lives where you placed it.

Transfer and diagnosis are stronger evidence of Dangerous Schema Changes understanding than copy-paste success.

Production note

What changes in a real application

In production, Dangerous Schema Changes must have an observable failure mode. Decide what should be logged, measured, tested, constrained, or surfaced without leaking sensitive data.

Prefer explicit contracts over conventions that only one developer understands. The next engineer should be able to locate the owner of this behavior from the project structure and tests.

Do not add abstraction merely because the course mentions it. Introduce additional layers only when they isolate a real volatility, boundary, policy, or testability problem.

Quick recap

Before you leave this page

  • You should now be able to describe Dangerous Schema Changes simply.
  • You should know how it fits into the Prisma layer that maps application code to PostgreSQL while keeping migrations explicit.
  • You should have one working example, one deliberate failure, and one independent variation.
Exit ticket

Continue only when these feel true

Mastery evidence

Lesson progress

Record completion after the exit ticket

Your completion state is stored only in this browser.