Taking time to design is the first step towards crafting quality software. It is the advice that everyone has heard many times and is still very worth repeating. Design is simply thinking about what you are doing before you do it. Most all practices and methods in design are intended to make do just that. Many developers tend to over-think design methodology. With hot-topic methodologies and practices paired with very opinionated developers, attempting an analysis of all design methodologies can be deceptive, frustrating, and endless. I think the best advice is to be sure to think about and have a clear idea of exactly what you are doing and how it accomplishes your goal.
Scale can be deceiving
Sometimes the most frustration encountered when working on software projects is not accomplishing a task in your desired time frame. A common cause of this is assuming a task or modification will be simple and diving headlong into writing code. Hours later you find yourself in a tangled mess of code that has a very unclear concept of what it is actually doing. Scale can be deceiving. Don’t let the simplicity of a high level software problem trick you into writing code without forethought. Plan your solution so you can write clearly, concisely and intelligently. You will save yourself from having to hack your way out of a confusing mess, if not having to completely scrap an entire first attempt.