It's a matter of balance, always. A thin line. And dogmas that people on teams follow (we all do in some way).
Not invented here syndrome, always create a class, always put a class in its own file, premature optimization blablah, don't use goto, this and that is bad practice in that language, don't optimize until you need it (but you later don't have time to profile, or don't really want to...)