Sorry for the wait, when I initially read your message I didn’t think of anything helpful to say.
This left me with some very dense geometry in certain parts of the model that I kind of carried with me to other areas. I’m not to sure if this is good or bad.
I wouldn’t consider that good if your loops are going out to other areas, but it’s not necessarily bad either. If it’s not making editing difficult and you’re getting the shape that you want without stretching, twisting, or random lumpiness, then it’s not a big deal.
I have no idea if this is an “allowed” amount of geometry or complete waste.
The reason this is hard to answer is because there are no rules! Haha, it’s modeling anarchy out there. Is it a waste? Only if you don’t need that much detail. To my eyes it does seem overkill, but if it’s needed to define all the features that you want then it’s fine. In general though, beginners (and myself to this day) tend to overcomplicate models, so I think it would be a worthwhile effort to simplify this model greatly and let subdiv do most of the work.
Here’s an example from when I was testing out RetopoFlow:

It’s definitely not perfect, so you wouldn’t want to follow it loop for loop, but in general that amount of density is as high as you would probably want to go.
Notice how it’s just enough detail for the subdiv modifier to crisp up without drastically changing the shapes.

If you’re just doing this for practice, I would recommend that amount of detail or even much less.
Hope that helps!