This blog entry from Gustavo Duarte is a neat comparison of bottom-up software design principles and Richard Feynman's problem-solving approaches.
I am a big fan of the bottom-up software design principle. Solve each problem properly and snowball your code into a grander system.