An app starts out with a single read-and-write database, and zero caching. The code is simple, and there's a single source of truth...
How many users do we have? → Check database → Counts the row in the users table → Returns 100.
How many users do we have? → Check cache → Not in the cache → Check database → Counts the row in the users table → Returns 100 *and puts 100 in the cache*
How many users do we have? → Check cache → 100 is stored in the cache, no need to ask the database → Returns "100".
And instead of users, it's other team members are the ones making requests to the database (each other).
Pre-caching: "Hey, can someone add me to Slack?"
Post-caching: Joins company → Reads an on-boarding document → Sees instructions on how to add themselves to Slack and does.