EDIT: I'm not suggesting that you ship code with known Technical Debt here and I'm sorry that I gave off that impression. That was not my intent.
Say you're given a choice between two directions:
Path A: Build a crude, simple, hard-coded solution to the immediate needs to get the first release out the door. You know full well that some of this work will have to be modified or maybe even rewritten for future releases.
Path B: Write an elegant solution upfront that addresses all of the needs, present and future, that you can forsee.
Every case is different, but my stock choice is Path A. Path B might very well lead to a reduced effort in the long run, but it comes with substantially more risk. But then again, you might be tackling a lot of complexity upfront in a speculative manner that can easily lead to wasted effort. On the other hand, I really do believe that as long as you write maintainable code with the full gamut of TDD and CI practices in Path A, you can grow the code to handle future needs.
All that aside, the single biggest risk is what if the initial release fails? You simply don't get a "future" if the first release bombs;)
My younger sister told me a story before her high school graduation. She was talking to the valedictorian of her class and was asking him how his speech was coming. She made a typically sarcastic remark that she hoped he wasn't using an analogy to Robert Frost's "The Road not Taken" poem because it was a terrible cliche. Sure enough, his face turned white and he ran off mumbling to himself.