Summary (TL;DR)
TDD works for most code, but fails at the physical boundary (e.g., ringing a bell) and the fiddling layer just before it (e.g., CSS, GUI setup). Manual testing is needed for these areas. Also, test support code (e.g., fixtures, doubles) doesn't need its own tests. Keep boundary layers humble by exporting logic into testable modules.
Public access expired
Save this link to your readplace queue and read every link without expiration.
Save to My Queue