Duplicate: http://stackoverflow.com/questions/130933/design-coding-top-to-bottom-or-bottom-to-top
I think I have found in my recent experience that I design software differently than most of my peers. I tend to take the incremental bottom up approach after gathering enough requirements to get a high level idea of the components in the software.
So, in the case of designing an interface that would support multiple concrete classes...I would take a look at what is common to each specific concrete candidate, asking how would I get the job done for each concrete (while thinking about being robust for future concrete). Then I take that set of commonalities and make an interface, which I believe is a "bottom-up" approach.
In the case of a top down approach I would believe that the designer would look at the client side of the interface and how a client would interact with the interface and then try to implement the concrete classes.
So I can see advantages and disadvantages of top-down / bottom-up. I just would like to know which is more efficient and provides a better result based off of your previous experiences?
Note: I'm not talking about development methodology (agile, waterfall, etc.), I'm talking about design approaches.