If you are thinking about abstractions, design patterns, and programming principles while you are programming, you are not really programming, rather you are wasting valuable time fantasizing. The end goal is always to have good working readable code, not code that has been bent, twisted, and shoved into formations and structures in order to fulfill the vanity of someone living in a fairy tail.