On normal days, it's reliable enough in terms of following the posted schedule (I wish it ran more frequently, but that's a different story).
On foggy/snowy/rainy days, they reduce the frequency and extend the trip times (You can sign up for alerts:
How do I get Staten Island Ferry service updates? | City of New York ) Generally, boats run every 20-30 minutes instead of every 15-20 minutes. Depending on the exact situation, trip times may get extended from 25 minutes to 40-45 minutes (Sometimes they reduce the frequency and keep the trip times the same).
I live on Staten Island, so I know when they reduce the frequency to every 20 minutes, that schedule runs from 7-9AM Manhattan-bound and 5-7PM Staten Island-bound. (So ferries leave St. George at 7AM, 7:20AM, etc and Whitehall Street at 5PM, 5:20PM, etc). It's stupid that they don't actually put up the modified schedule, and expect you to guess as to when the ferry is going to come. I can't speak on the reverse-peak direction (Normally, they just leave the other end 30 minutes later, but in inclement weather like I said, the travel times get extended as well).
In any case, I can't speak personally on the reliability of the NYC Ferry, but I would still recommend it over the subway. It's the same price as the bus-subway (the SI Ferry is free either way) and it's also faster and saves you the stress of transferring (and in the case of Downtown Brooklyn, the traffic). The 4/5 are usually frequent/reliable (albeit crowded) but you should check the MTA website before you go to see if there are delays. I recommend you also use the SubwayTime app/website which tells you when the next train is coming (sometimes, the MTA website might show good service, but there's a 15 minute wait for a train, so if you check, you can take a backup subway line which might back the difference between making and missing the ferry).