I like this metaphor, TechnicalDebt, describing the trade off between doing quick and dirty code versus taking time to design clean flexible code. These are not always mutually exclusive but typically they fall into those buckets.
You have a piece of functionality that you need to add to your system. You see two ways to do it, one is quick to do but is messy - you are sure that it will make further changes harder in the future. The other results in a cleaner design, but will take longer to put in place.