> If I'm writing some sort of CRM library that I want to share with the
> world and have reused, then I should obviously document my interface well,
> and not be overly strict about what I accept.  Even so, it's very unlikely
> that someone else is going to have a class they're using that's
> similar-to-but-not-quite my OpenCRM::Customer class.  The benefits of a
> duck typing attitude are not likely to take root in this system.  But I'm
> creating a library that is aimed at reuse, so I should allow for reuse.

How about a delegator to your Customer class, with some extensions for
distributed computing?

That's a very common one that can be gotten wrong: Will your type checks
work with a dRb proxied object?

Ari