AWS only have a temporary free usage tier so collect money right up front even on the smallest projects.
For that reason, these relatively large step functions in pricing at the low end are reasonable from where I'm sitting.
Heroku is a great deal for people just starting out, somewhat at the expense of those who have already grown larger. His strategy seems sound-- use Heroku at the beginning, then if and when it gets unjustifiably expensive, switch to AWS.
Heroku is only expensive if your time has no value.
If I want to upload files, is it necessary to have an Amazon account? As I understand it, you can't use Heroku for dynamic file storage.
We're hosting static media on S3, but this project has no UGC and very limited amount of media assets, so you'd have to consider the AWS costs depending on your own needs.
When I first deployed to Heroku, I was serving media right from the web dyno, and it was working, but since the app is serving up the files (not Nginx serving them directly instead, or similar), I'd imagine that's not a great solution in terms of scalability.