Why not use 15 min in this case? Files are only downloaded when they have changed, so 15 or 30 min shouldn’t make much difference.
This is precisely what I’m currently doing, Not that I wouldn’t preferred the proposed alternative, Including having different intervals, but I see the opposite is documented.
Sounds reasonable to me to look e.g. for a “BEGIN: VCALENDAR” and a “BEGIN: EVENT” as well as for a closing “END:VEVENT” and “END:VCALENDAR” as a basic validation. I think from a user perspective this should be fine, the subscription would be fast and as it can happen at any time that a once valid resource becomes invalid (maybe due to an error while the .ics file was created, or a failed file download, or…) I don’t see a drawback in validating the whole file only when synchronizing.