Lastly - I also believe that they key to getting rolls right consistently is to wait for the time value to be close to 0. That mostly means waiting until the day before or day of expiration before executing the roll.
I'd augment this advice to include analyzing current vs prospective theta. If the theta of the new position is higher than the current position (which naturally happens the closer you get to 0 time value) then it probably makes sense to roll. This is typically the right way to go with higher volatility, and the practical timeframe of this occurring is typically week-of.
One should be more considerate with lower volatility, as the roll out puts one's new contract at higher risk of being negatively impacted by volatility than the current, ostensibly safer contract. Waiting a few days on the current contract could see an increase in underlying volatility, which would increase the value of the farther expiration far more than the current contract, which of course is a win if the game is selling contracts. That's not to say its a rule of thumb, but its definitely a factor.