Prompt caching changed the economics of production prompts: providers cache the prefix of your prompt, so repeated calls that share an identical opening pay a fraction of the cost (up to ~90% cheaper on cached tokens) and respond much faster. But caching only works on exact prefix matches — one changed character invalidates everything after it.
The design rule: static first, volatile last. System instructions, policies, few-shot examples, tool definitions — all identical across calls — go at the top. Anything that changes per call (the user's message, retrieved documents, timestamps) goes at the bottom. The classic cache-killer is an innocent-looking dynamic value near the top: a timestamp in the system prompt, a randomly-ordered list, a per-user greeting. That one line turns every call into a cold cache miss.