When you've come up with an idea, I'd like you to please write down "bronze", "silver", and "gold" versions of it.
Gold will almost always be the idea as it first occurs to you: what the final product would look like with all the polish and features you'd like it to have.
Bronze is the idea stripped down to the MVP -- the bare minimum your product needs to be identifiable.
Silver is between the two: what you'd feel comfortable showing to a client as a "work in progress", were they to have commissioned this.
For a Tic Tac Toe game, the breakdown might look like this:
-
Bronze: An HTML page with a table of 9 cells. Just enough Javascript to show you who the current player is and change the background color of a cell when you click on it. Just enough CSS to make the cells visible.
-
Silver: Enough CSS to make it actually look like a game, and enough Javascript for a "reset" button.
-
Gold: CSS transitions or animations, showing "X" and "O" instead of colors, and Javascript that tells you when the game is over and who won.
Whenever you have a moment of "Ooh, I should add this" add it to your gold list. If that idea didn't occur to you at the start, it's probably not necessary for your MVP.
While creating the Tic Tac Toe examples for this last night, I — being totally confident in my abilities — didn't actually bother to write down my ideas for bronze, silver, and gold versions.
I stayed up until about 2am writing the "gold" version. It hardly looked any different from the "silver" version, and the code was much, much more complicated and convoluted than was necessary.
This morning, another instructor pointed out the huge leap from silver to gold. So I want back, actually planned out a gold version, renamed the old and poorly-executed gold version to the included "platinum" example, and in only about 40 minutes arrived at the current much-better gold version.
The moral of this story is that no matter how good you think you are, you are never too good to plan things out.