The Hardest thing about Engineering is Requirements
The post argues that requirements are hard because engineering is really a communication problem. It compares shalls, user stories, use cases, user cases, and rapid prototyping as ways to capture stakeholder intent.