I've been writing a small CalDAV implementation, which isn't as bad as it's made out to be. Yes, it's a weird standard with lots of edge cases, but the development has been really linear, spec in hand, implementing sections at a time.
Testing, however, is a major pain. There's a lot of little things that will make accessing a CalDAV store silently fail.
Evolution, in particular, is picky. Namespaces declared on the wrong elements, despite being semantically equivalent, cause havoc. Using DAV: instead of D: as the prefix for elements (Are you even using namespaces, folks?!), not sending etags, having etags match, all of these will make Evolution silently ignore your calendar data.
This can be a lot better, folks.