While contemplating some shortcuts I have taken, I realized there are two distinct categories. They are Debit Shortcuts and Credit Shortcuts.
Credit Shortcuts allow you to defer payment. Think of these as taking out a loan with interest.
“I’ll do it later”
usually punctuates these shortcuts. Over time these add up to a significant liability in your code.
A great example of this is a manual or multiple step deployment. Initially it’s cheaper than creating a cohesive install, but it will cost you dearly if it continues to live on(and these typically grow over time as well).
Debit Shortcuts cost you an initial investment, but potentially yield more and more as time passes. Not all of them yield dividends, but at most you lose the initial investment. Typically investments in code will snowball in a positive direction. A great example of this is abstraction.
Creating an abstraction bears some cost, but using the abstraction provides a benefit to the consumer. A great example is automating your build process. Hopefully you are doing daily builds! Imagine saddling one team member with the manual task of creating a build every time a manager, customer, tester and/or installer wants to see your progress.
By the same token, there is a significant cost associated with unnecessary abstraction. In the end, it generalizes to return on investment. When you favor Debit Shortcuts, you set roadblocks further down your path. When you load up on Credit Shortcuts, you may be in the red on some but overall you are creating a more productive future.