EDIT: Accidentally duplicated post. Please see https://startrek.website/post/25896182 for all responses and put future responses there. Also, I have more theorizing there.
EDIT: Accidentally duplicated post. Please see https://startrek.website/post/25896182 for all responses and put future responses there. Also, I have more theorizing there.
Nog went up the ranks more quickly because of the war, which provided him with many opportunities. Also, his connections, which allowed him to intern on DS9 and the Defiant, again in the context of war.
Harry was on a ship isolated from Starfleet. If Janeway had promoted everyone who had the merit, she’d have had a ship full of commanders and a handful of captains by the time they got home. But most of those people would have had to keep doing the same jobs, anyway.
But the true reason for the discrepancy noted by OP is just down to the fact that Voyager’s writing team just wasn’t as good as DS9’s (or they were held back from above). The only characters to have a meaningful arc on Voyager were the Doctor, and Seven. The others mostly just had to reset at the end of every episode to preserve the show’s episodic nature.
Harry never got promoted because the writers never figured out how to evolve his function on the show. Now, I assign a small part of the blame to Garrett Wang himself: he rarely gave performances that stood out and made the writers want to write about him more. But most of the blame goes to the writers and show-runners.
For example, if they’d exploited dual crews more throughout the series, with more conflict, etc., Harry might have found a place. Imagine if the Maquis crew had had their own ship for a big part of the series? Harry, eventually frustrated at being passed over for promotion, might have joined them!
This one is a bit of a copout, because Kim’s official role as the ship’s operations officer would absolutely have been appropriate for a higher ranking officer. It’s the same job Data held as a Lieutenant Commander on the Enterprise; if anything, the strange bit is that it was given to a green ensign in the first place.
Ultimately, the real explanation is a much sillier bit of bad writing. According to Garret Wang, quoted here:
Why it was important that “somebody’s gotta be the ensign” is a mystery to me.
Kinda surprised they hadn’t made Naomi Wildman an ensign by the end of their run.