Duplicate: 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.
I believe that with good software designers (and in my opinion all software developers should also be software designers at some level), the magic is in being able to do top-down and bottom-up simultaneously.
What I was “schooled” to do by my mentors is start by very brief top-down to understand the entities involved, then move to bottom-up to figure out the basic elements I want to create, then to back up and see how I can go one level down, knowing what I know about the results of my bottom up, and so forth until “they meet in the middle”.
Hope that helps.