I'v never liked the use of use cases in software design, mostly because they tie the design to specific tasks. Well, comes the rejoinder, you need to know what you want your software to do. Sure. But what users want to do is a different matter altogether. "In the real-world users are almost always doing 'other things' when they come to use a bit of software." Exactly. Which means to me that the best basis for design isn't function but rather enablement or affordance.