My personal preferences is to keep the code base as small as is needed for the moment. I avoid creating functions/methods that are only called once. If possible, (like in C#) I prefer using local methods and lambda expressions. I try to avoid code dupplication (beyond the trivial). I am carefull with introducing abstractions as often it makes it harder to navigate and/or debug the code.