Multicasting with share
Explain why a cold Observable re-executes its producer per subscriber, and how share/shareReplay makes it multicast instead.
By default, most Observables (an HTTP call via HttpClient, an Observable wrapping setTimeout) are "cold" — every single subscriber independently triggers the producer function from scratch, meaning two subscribers to the same http.get() Observable actually fire two separate HTTP requests, not one shared request whose result both subscribers see. This surprises many developers the first time they hit it, and it's a common source of accidental duplicate network requests in real applications, especially when an Observable is subscribed to in multiple places (like once in a template via the async pipe, and once more in the component class).
A cold Observable is like ordering an individually-cooked meal every time someone asks for one, even if ten people ask for the exact same dish at the exact same moment; share()/shareReplay() is like cooking one large batch and serving everyone from it, with shareReplay additionally keeping a warm plate ready for anyone who shows up a little late.