Bottlenecking happens whenever one of the components of your system isn't performing to the full of its capabilities. It is an inevitable thing to happen. Let's put it simply:
When a game is running:
- CPU at 40%
- GPU at 100%
- HDD at 2%
In this case, the bottleneck is in the graphics card. That means you won't see (meaningful) performance improvements if you get a better CPU or HDD. Here's another example:
When a game is LOADING:
- CPU at 70%
- GPU at 10%
- HDD at 20%
- RAM transfer at 100%
- RAM usage at 50%
This means the RAM bandwidth is the bottleneck, and you need faster RAM. If you upgrade your CPU, you'll still probably see some improvements, but they won't be that meaningful when compared to RAM. Another possible situation is this:
When a game is LOADING:
- CPU at 70%
- GPU at 10%
- HDD at 100%
- RAM transfer at 100%
- RAM usage at 100%
This means both the RAM and the HDD are the bottleneck, but the HDD usage is so high probably because you're paging, i.e. your RAM is maxed out and you're using your HDD instead. In this case, installing more (not necessarily faster) RAM will give you an improvement to performance.
All in all, depending on what you're doing, you'll always have a bottleneck somewhere. It's impossible that everything is running at 100%. I myself prefer to be GPU limited, while spending as much as I can (feel I need) in the GPU front. If you have a nice graphics card and you're still GPU limited, that means the rest of your system will probably handled at least one GPU upgrade in the future without requiring you to upgrade something else.
Also note that sometimes nothing is running at 100%. This may happen because either what you're running isn't that hard to run (like a movie or something), but in games it usually means your frames per second are capped by your monitor's refresh rate. In this case, your monitor is effectively the bottleneck
