Not rivals, columns in a spreadsheet
These strategies are not rivals. They are answers for different columns of the same spreadsheet.
Avoid the mistake interviewers watch for, which is picking one pattern for the whole design. Real systems mix them per data type, because the questions that select a pattern are properties of the data rather than of the system.
Ask three questions of each thing you cache. How soon after a write is it read back? Seconds puts you in write-through territory, and hours or never points at write-around.
Ask what losing an acknowledged write costs you. If the answer is money or trust, write-behind is off the table. If it is a slightly wrong counter, write-behind is the cheapest capacity you will ever buy.
Ask what fraction of your writes are ever read again. Below roughly half, writing through the cache is mostly pollution.
One product, three combinations
Run a typical product through those questions. Sessions and cart state get read straight after writing and losing them is annoying but survivable, so write-through with a modest expiry.
Your product catalogue is written rarely by merchants and read constantly, so write-around with delete-on-write and cache-aside reads.
Your view counters are written constantly and losing a few is invisible, so write-behind with batched flushes. Three data types, three combinations, one cache cluster.
Give invalidation design time before your cache ships, whichever combination you chose. The old line about it being one of the two hard problems survives because the failure is silent. Nothing crashes, no alert fires, and people just see wrong data and lose a little trust per page.
Decide per data type who deletes or updates the key, what the expiry backstop is, and what the maximum staleness works out to. If you cannot say that window in seconds for a given key, you have not finished designing it.
Worked example
Tom's team is designing checkout for a flash-sale site and does the spreadsheet exercise in one meeting. Cart contents: written and re-read within seconds during the sale rush, so write-through, TTL 30 minutes. Product details: updated a few times a day by merchandising, read 50,000 times a second at peak, so write-around plus a Kafka-driven cache delete on catalog updates, TTL 10 minutes as a backstop. The hype counter showing how many people are viewing an item: write-behind, flushing to Postgres every 5 seconds, and everyone signs off that a crash losing 5 seconds of it costs nothing. Six months later the only cache bug is in the one item that skipped the meeting, a promo banner cached with no TTL that kept advertising a sale for 40 minutes after it ended.