“Not a single dramatic moment — more like a Tuesday at 3pm when they realized they hadn't thought about schema changes that require migration scripts for existing content — the cost in two weeks. sanity had absorbed it. The tool had graduated from experiment to infrastructure without them noticing.”
When I'm the content team wants to add a new content type: a comparison page where two pr, I want to build a content model that's flexible enough to serve the product's needs and, so I can clear enough that non-developers can use it without documentation.
A developer who chose Sanity for a project that needed a content infrastructure serious enough to model complex relationships and flexible enough to be customized for a non-developer content team. They built the schema. They configured the Studio. They wrote the GROQ queries. The content team uses what they built every day. The developer's relationship with Sanity is: maintenance, evolution, and occasional deep satisfaction when the content model they designed months ago handles a new requirement gracefully.
To make sanity the system of record for build a content model that's flexible enough to serve the product's needs and. Not aspirationally — operationally. The kind of intention that shows up as a daily habit, not a quarterly goal.
The tangible result: build a content model that's flexible enough to serve the product's needs and happens on schedule, without manual intervention, and without the anxiety of schema changes that require migration scripts for existing content — the cost. sanity has earned a place in the daily workflow rather than being tolerated in it.
The content team wants to add a new content type: a comparison page where two products are placed side-by-side. Each side references an existing product document. The developer is adding a new document type to the schema. They're modeling two reference fields with a validation that requires both to be populated. They're adding a custom input component that shows both referenced documents side-by-side in the Studio editor so the content team can see what they're building while they build it. This is a 4-hour task. It will be used for 200 comparison pages.
Uses Sanity on 2–4 projects. Has built custom Studio configurations including custom input components, desk structure, and custom previews. Writes GROQ for content delivery. Works with a content team of 2–8 people who use the Studio daily. Has configured Sanity's image pipeline for automatic optimization and transformations. Has connected Sanity to a Next.js or Astro frontend. Has a Sanity webhook configured for cache invalidation on content publish. Knows where Sanity's content lake sits in the broader data architecture and can explain it to others.
They've stopped comparing alternatives. sanity is open before their first meeting. Build a content model that's flexible enough to serve the product's needs and runs on a cadence they didn't have to enforce. The strongest signal: they've started onboarding teammates into their setup unprompted.
It's not one thing — it's the accumulation. Schema changes that require migration scripts for existing content — the cost that they've reported, worked around, and accepted. Then a competitor demo shows the same workflow without the friction, and the sunk cost argument collapses. Their worldview — content is structured data — treating it like a document is a choice with consequences — makes them unwilling to compromise once a better option is visible.
Pairs with `contentful-primary-user` to map the developer-configured vs. out-of-box headless CMS philosophy. Contrast with `vercel-primary-user` for the full Next.js + Sanity + Vercel content delivery stack. Use with `figma-primary-user` for the design-to-content architecture workflow on large digital products.