For a map with a cached map service as the basemap, its extent is determined by the size of the map container, the map center and the zoom level the map is set to. So when you try to set the map's extent like map.setExtent(aExtent), the map will not be zoomed in/out to an extent that exactly equals aExtent. What setExtent actually does, as I understand, is to get the center of aExtent, and calculate which zoom level aExtent is within, then kind of apply map.centerAndZoom. So what you can expect is that the map will center at the aExtent center, and cover aExtent.
If the above description makes sense to you, then you may understand why the zoomfactor does not do its work all the time. Zoomfactor is not the zoom level for the map, but to change the given extent to be larger or smaller. Its result will still be an extent.