One extremely important skill that a surprisingly large amount of programmers lack is the ability to create a new idea, and then make an in depth plan before writing any code. Knowing ahead of time exactly how to structure every part of your project is very important, and can save you a tremendous amount of time. Perhaps you are already doing this, but you also need to become comfortable with growing ideas. A good exercise for this is as follows (I use this, and it's really helpful for big games. Everything after the colon for each of the following steps is an example):
- Pick a general game style: a single player 2d platformer. Horizontal and vertical scrolling.
- Then create the main playable characters: a ninja.
- Define what the main characters are attempting to do (the goal): break into a mansion, re-kidnap the ninja's cat (find it first), and escape.
- List all the abilities your characters have: run left/right, jump up, wall jump, crouch, crawl.
- If there is a storyline to your game, write it down: The ninja's cat got kidnapped and he has to rescue it.
- Describe any side-kicks and what they do
- Define anything that can interact with the player:
- Cameras, which trigger near-by traps. Some sweep horizontally.
- Mines that can be triggered by any object landing on them.
- Trap doors (on the floor. Falling through them simply leads you one floor down)
- Vertical locked doors. Unlock them by finding the corresponding key.
- Vertical barriers that can be activated by cameras that spot you in order to trap you (They'd slide down from the ceiling).
- This section could get pretty long. I suggest you draw sketches of some of the objects that are hard to describe (4 and especially 5)
- If there are any bosses/living enemies, describe them - what they look like, how hard they should be, what their actions should be.
- Create a sample level on paper, this may inspire you to add to the list.
- Sketch all the other levels. For a game like this, you don't need to put a huge amount of time into this step, you can refine them later. This is more to make sure that you design the game in a way that will allow for everything you want.
- Decide how to structure your code, and what tools you will need for the project. Make sure you know how you are going to make the game function.
- Start coding!
Depending on the type of the game, you might not include all of the steps (IE bosses or storyline or sidekicks). It's important to get all ideas you have on paper. Not only because you might not remember them later, but also because writing it down can help trigger other thoughts for building on the idea. Even the ideas that you think might not be that good should get written down, you may change your mind, or refine the idea to where it actually is a good one.
I did supply you with a sample game idea (Though not fully developed, that'd take too long for a simple forum post), hopefully you get the idea.