A very few problems depend so heavily on the lowest level things that it is better to work bottom up. As an example, a device driver for a peripheral will almost certainly have to be written around the control codes needed to operate the device and this might influence how you package the code to present to the rest of the system.
For most problems you are likely to meet, top-down (or top-down with a little bottom-up) will be the appropriate approach.
maspjw@