This is a specific application of "meta", but a valuable one for many people here and is probably generalizable to other areas:
Pretty much the best programmer I know (an author of a number of Boost libraries) once reduced his "secret to success" to DRY Principle.
The way I understood it that he looked for higher level of abstraction even if it was locally suboptimal (in small programs cut n' paste works fine); it might have taken longer in some instances, but made him a way better at creating abstractions.
When do you go meta? When do you stop going meta?
In the video Q and A Eliezer offered some advice about this (the emphasis is mine):
In his discussion post "Are you doing what you should be doing?", Will_Newsome identified what seems to be an important guiding principle of meta-thinking:
(where "time-saving results" can be replaced with "greater marginal utility" to obtain a form that is more generally applicable)
Some questions we could explore:
(I plan to try to compile the insights and advice here into a top-level post discussing the principles of, and heuristics for, effective meta-level thinking)
Edit: Changed minor wording and altered the third question posed.