The following blog post, unless otherwise noted, was written by a member of Gamasutras community.
The thoughts and opinions expressed are those of the writer and not Gamasutra or its parent company.
Suddenly you find yourself on the spotlight. You discover a major flaw in your game, and anything you do to try and fix it will start to ripple through all aspects of the game....what do you do? Specially when the game has already had some time in production, the prospect of taking a decision that will (potentially) change several aspects of the core game is scary. However, if you discovered an issue with your core gameplay, its a decision you will have to make. Core design problems are game-breakers, and they should be fixed as soon as they show up.
So generally, when one finds a game design problem your natural tendency is to go straight to the simplest solution. Overpowered weapon, make the player drop it as he leaves the room; walking around is boring, place random enemies around the level, jumping too high, place a ceiling..... These are simple to implement and they are (somewhat) isolated from the rest of the design, so they become reeeaaally tempting. However, there lies its problem. They are patches, they are not integrated with the design and they don't really solve the problem.
On the other hand you could try and implement a whole new design; scrap everything, we're taking it again from the top. New design means new programming, new assets, new everything.... but its worth it, to make a fun game. That is until you try to explain the rest of your team why it is that all their hard work is to be scrapped. Iteration is a given in the industry, but with milestones coming up and angry managers demanding to know what's the hold up, you can't restart the project.
So what to do. Well there is a third option....I'll be honest, its tough, its not evident, and it might be tricky to explain. The idea here is to slightly change the circumstances around the problem so it becomes a non-issue. Its much more subtle, instead of blocking the player from taking an action, you make it riskier, you try and dissuade him. I call this an elegant solution.
An elegant solution is the one that tweaks the game in such a way as to turn the flaw into a choice. Without forcing the player's hand and without redesigning the mechanics, the elegant solution changes the circumstances under which the player makes his gaming decisions. Don't attack the problem directly, look around it; check the other systems it affects and try and tweak it from there. For example: imagine a 2D shooter where the player has a high jump. This is important because it allows the player to jump onto platform, start combos, etc... However, this is also gives rise to bunny-hopping. You find out the player is able to jump all through the level and not even fire a shot. If you're already in production, go back and change the jump height will be a level apocalypse: platforms will have to be reset, art will have to be remade, months of work will go to the recycling bin. On the other hand you could stop the player from shooting while jumping. Then the game looses part of its essence, it looses action, and the problem still persists.
A third option would be to reduce the horizontal speed while jumping. Sure the player can keep avoiding bullets by jumping, but now he won't be able to advance as fast.....he has now a choice. Now the player can choose: slow and safe by jumping, or fast but challenging by running. Of course, for it to be truly meaningful, there must be some risk on both accounts; maybe you could sprinkle some AA enemies throughout the level. This solution only affects the player and enemy positioning, and it creates a new set of meaningful decisions. This would be an elegant solution.
I know this is not news for you, but I do believe its best to always strive for the best solution, not just the easy one; and its important to hammer home this fact. So often we feel the pressure of production that we loose objectivity on an issue. In the end, its important to remember that just getting the problem out of the way is not fixing it.