First of all, E-6 is not a mean rank. It is one of the backbone ranks in the army. The jump from E-6 to E-7 is one of the hardest promotions there is.
There are many more promotable E-5's and E-6's than there are billets at the E-7 level.
A great deal depends on one's MOS. Some billets turn over more often than others because they entail getting shot at. One of the reasons why West Point Grads seek to branch infantry is because promotions come faster in that branch.
Of course, so do the real estate deals and the special retirement plans. (Remember, West Point selects for leadership potential, not necessarily the sharpest pencils in the box.)
"never got in any trouble or anything"
Wait a minute. He's a noncom. He's been in 18 years. Is his halo golden, silver or bronze? Seriously, unless you were to see his personnel jacket, you have no idea what's in there. But still, being in 18 years and holding the rank of E6 is not proof that he's done anything wrong. He just might not be judged ready yet to climb to the seriously senior rank of Sergeant First Class. There might be so little turnover in his MOS that TIS is more like 20 years.
The average time in service for selectees to E-7 is 13.6 years. That includes the infantry, which has a maddening tendency to burn up Platoon Sergeants and Platoon Leaders both. And it includes the rear echelons blokes, among whom E-6 is nothing to sneeze at, 'cos the higher-ups don't get killed or crippled quite as frequently.
The really challenging part of the jump to E-7 is that the soldier's unit has no input into the process beyond how it maintains the soldier's personnel records. The selections are made by a central board, based SOLELY on the content of the soldier's promotion records. The soldiers CAN write to the board to draw attention to something special, but are counseled against doing so unless there is something really really important that is not in the promotion records or present so subtly and tangentially that the board, which has to look at hundreds of files in each MOS, will miss it.