Good example: the EmailChannel needs the recipient to have an email property. This is not checked anywhere, send_notification simply calls process on all enabled channels, which in turn will call send_now, or leave it for send_notification_digests to call send_digest.
The process function should probably call some sort of should_send method. Yes, we have NotificationType.should_save but that's not exactly the same, as it's for the entire notification, not per channel.