While i agree that the "freemium" model is better, there are cases in which
doUpgrade() can be useful.
One such real case is if i want to off-load users from the Beta (private) into the Production (public) version of my app. While both binaries are identical, the private channel does not get credit for serving RAF ads from RokuCo inventory. Because, bless the Co's ad-teamsters. And so, 500 odd users of the beta are being tortured with ads for naught. The doUpgrade() provides mechanism to do that in a low-friction manner.
Romans_I_XVI never answered in said thread, my guess is he saw profound lack of enthusiasm from contact of his at the Co and took that to mean doUpgrade() does not work.
This user's case illustrates a high-friction upgrade.