When encoding iso8601 dates you might want careful control of the format. When decoding iso8601 dates I think you want a lenient parser, especially if you're writing a parser that will be the default for all users of JSONDecoder. It's frankly bizarre that JSONDecoder uses seconds as the default format for Date instead of the iso8601 format. Seconds might make sense for how to encode/decode Date in general but not for JSON.
Aside from the fractional seconds issue when decoding iso8601 dates I've also run into an issue with dash vs colon in the time zone specifier. SwiftDate's ISOParser is lenient and accepts all these variants so for now I use a custom formatter for decoding iso8601 dates in JSON that's based on SwiftDate.
Date parsing is one of the bigger pain points in using Decodable.