System prompt sets the persona, constraints, and format conventions across the whole conversation. User prompt carries the per-turn request. A good system prompt never changes; it’s the model’s “job description” for the session. User prompt is the per-task input.
System: “You are a senior backend engineer. Answer in JSON {reasoning, code}”.
User: “Write me a function to compute retries with exponential backoff.”
Update system rarely. Iterate on user prompts during dev. Version system in code.
system = persistent rules + persona
user = per-task input
(model prioritizes system over user when in conflict)
System = rules. User = question. Treat them as separate artifacts with separate review cycles.