Based on USN promotion eligibility criteria (Starfleet doesn't have 'up and out' so you don't need to be promoted to stay in), LaForge's career progression seems about right from ENS to JG, but there appears to have stalled temporarily between JG and LT (possibly he didn't get the necessary 'continous personal development oppurtunities on the Hood) as USN standards suggest LT after at least four years, whereas he had been in for seven, alternatively he met the criteria, but DeSoto wouldn't sign off on his promotion because of manning limitations (maybe Hood was only allowed one LT in the CONN department and he already had one) and he didn't want to lose LaForge for avoidable reasons, but had to given in when the Enterprise slot came up otherwise he'd 'get in trouble'. The latter option would better explain why LaForge was 'early promoted' to LTCDR - he had (almost) enough time in service for the promotion, and the billet he was holding was a LTCDR's one. Also, while it's possible that he might have remained as LTCDR as the D's ChEng, he could easily have been promoted to CMDR when he took the slot as the E's ChEng (maybe he was 'punished' for his unwitting part in the D's destruction by having his promotion paused?).
Riker on the other hand seems to have had a very brisk rank progression, LT within two years (basically jumped a grade), LTCDR c. 2362 (five years TIS, a year or two early compared to LaForge's 'early promote') and then promoted again one grade (but offered a captaincy, an at least implicit two grade bump, or at least 'one and a half') within three years (eight years TIS, at most half of the TIS req'd and that's if you assume that both posts he was offered are CMDR grade for 'seniority', even if you can wear CAPT pips in the latter). It's not difficult to imagine that either or both of Pressman and Kyle Riker were pulling strings behind the scenes to accelerate Will's career (in the former case as an inducement to keep quiet about the Pegasus affair).
As far as I can tell, Starfleet doesn't really have time-in-grade; it seems to be more analogous to a probationary period (judging from examples throughout the shows, films and books) of approximately one calendar year (for the purposes of this discussion, somebody promoted in January of 2376 and then again in November of 2377 counts as one calendar year), although there are certain exceptions, ala Christine Vale who was promoted after only six weeks when she accepted the XO billet aboard the
Titan. If there's no red flags (disciplinary actions, bad performance reviews, complaints from fellow crewmates), an officer/crewman could apply for a promotion or another posting or his/her/hir/its Commanding Officer could recommend them for a promotion or another posting (I'd also assume that said officer/crewman looking for a promotion would likely apply for a specific position which would come with a promotion, which would be more up to the Commanding Officer's discretion). For example, an enlisted engineer assigned to a transporter room on a
Galaxy-class ship puts in a request to transfer to a
Saber-class starship, where the only designated transporter operator is a Chief Petty Officer (although I'm also guessing that other engineers are capable of operating the transporter if the designated Transporter Chief is off-duty), should he get the job would also get the promotion; however, either the Captain, Executive Officer, or Chief Engineer of the
Saber-class ship, might select another engineer, possibly from their own crew or from another ship or starbase, to fill the post. That same
Galaxy-class engineer, should he not be selected as Transporter Chief on the
Saber-class, might also put in for a position on a
Luna- or
Intrepid-class ship (both of which are of course smaller than a
Galaxy-class but larger than a
Saber-class); there, he might not even be a transporter operator anymore but another section of engineering. It also seems likely that a crewman, especially an enlisted crewman or junior officer, is assigned to a specific billet for a designated amount of time; for example, one might be assigned to a starbase for a three-year tour of duty, where they may or may not get a promotion during the tour but would almost certainly receive one at the end when they move on to the next assignment.
Meanwhile, on the officer track, a newly-commissioned Ensign who's ultimate goal is to command a starship might start her career assigned to Starfleet Headquarters as a shuttle pilot, responsible for ferrying (most likely) senior officers and possibly even senior non-commissioned officers (again,
Star Trek has proven lousy - or at the very least, inconsistent - with NCOs/Petty Officers) around Earth or up to Starbase 1 or even throughout the Sol System. If she does a good job, gets along with her bosses, and doesn't piss off the wrong person, she might see a promotion to Lieutenant, junior grade within the year if/when a starship position becomes available, even if it's as a Science Officer, Engineer, or Operations Officer.
On the other hand, officers (particularly senior officers on ships named
Enterprise!) might (and, in the case of
Enterprise officers, do) decide that they like where they are; I'm sure they must get/have gotten numerous offers to transfer to another ship, which may or may not come with a promotion, but decline them in order to remain in place. While this does mean that other officers on other ships cannot serve aboard, say, the
Enterprise, they would be able to take the billet that the
Enterprise officer turned down. There are also officers like Montgomery Scott - well, maybe not the Scotty who was serving on the
Enterprise and
Enterprise-A - who would gladly transfer from ship to ship or even starbase serving as Chief Engineer, but would never put in for a position as XO or Commanding Officer of a starship, because he's happy being a Chief Engineer.
Anyways, those are my thoughts on the process.