This document discusses Angular change detection. It begins by asking what change detection is and what causes changes in an Angular application. It then explains that changes can be caused by events, XHR requests, timers, and callbacks. When a change occurs, the ApplicationRef listens to NgZone events to detect the change and re-runs change detection from the root component down. Using immutable objects and Observables can make change detection smarter by only checking parts of the application that actually changed. This improves performance by reducing the number of bindings that need to be checked during each change detection cycle.