When is it ok to subdivide?
When modelling something you would always add minimal geometry (eg. loop cuts) and work with it until the shape of the object cannot be further improved with the current geometry! This is very important, as if you start adding too much geometry initially, you will get lost and you make your task exponentially harder, because you will have to manually manipulate so much more verts. 

Now, in most cases you should avoid subdividing altogether, before you are finished modelling, in a sense. Meaning that with your modelling you would have laid out the optimal topology of the model and would have made sure that every vertex and every face is absolutely necessary for describing the object and maintaining the topology! Only then you would subdivide, to get a smoother result (as your object would be approximated at a higher resolution).

Having said that, don't consider the subdivision taboo and absolutely neglect it. Usually it is good practice to check the topology of your mesh, every once in a while, by subdividing it and seeing if it flows and looks natural... this way you can also spot duplicate vertices or holes in the mesh.

I am not a pro modeler and maybe someone could argue this is not always the case, however those are some tips that help me.