Another factor is how old you are. The older you are, the more proof of continued residence you will have to provide. This will result in more review, and more time taken.
Nevertheless, USCIS can also simply make a mistake, and put a file in limbo. For example, if it notates that it awaiting records, but fails to actually request the records, then the file will just sit. If a case seems straight forward, and the delay seems long, asking for a status check is not a bad idea.