

Harry never got promoted because the writers never figured out how to evolve his function on the show.
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:
Kim was probed, beaten, tortured and held the distinction of being the first Voyager crew member to die and come back to life. What more does a guy have to do to get promoted to Lieutenant for frak’s sake? To add further insult to injury, other crew members such as Tuvok (Russ) and Paris were being promoted, demoted and then re- promoted throughout the seven-year run of Voyager.
I’m not trying to be negative here; just saying it like it is. During the fourth season, I called writer/producer Brannon Braga and asked him why my character hadn’t received a promotion yet. His response? “Well, somebody’s gotta be the ensign.” Geez, thanks. Thanks for nothing.
Why it was important that “somebody’s gotta be the ensign” is a mystery to me.
Did they ever open up Civ VI’s code the way they did for IV and V? Prior to VII coming out, they hadn’t left any way fro modders to do the kind of deep dive total conversion mods which happened with the older games.