In a recent post, Rod Hilton presents a concise example of top-down and bottom-up development, and shows why the top-down, "need driven" approach is better.
I like the top-down approach because it's more focused on the user and the high-level, conceptual problem to be solved, while the bottom-up approach tends to get into implementation details too early. Also, as Rod points out, it's the top-level components that specify the API's of the lower-level ones. It's hard to get the low-level API's right in isolation.
One more benefit of the top-down approach - often overlooked - is that working code is available earlier for review and feedback from the customer.