Creo que estás en el camino correcto. Ni tirar, atrapar ni documentar todas las excepciones potencialmente arrojables tiene mucho sentido. Hay momentos en que la rigurosidad del producto requiere un mayor grado de excepción de empleo y documentación (por ejemplo, ciertos aspectos críticos de seguridad de un sistema).
La estrategia de estar más a la defensiva, utilizando conceptos de contrato para identificar condiciones previas (y condiciones posteriores) en personas que llaman especialmente en sentido descendente (por ejemplo, cualquier cosa que se parezca a un miembro público o protegido) a menudo será más efectiva y más flexible. Esto se aplica no solo a la implementación, sino a la documentación. Si los desarrolladores saben lo que se espera, es más probable que sigan las reglas y es menos probable que se confundan o usen mal el código que ha escrito.
Algunas de las cosas comunes que deberían documentarse incluyen el caso de parámetros nulos. A menudo, hay una consecuencia de su uso que lleva el resultado a algo que normalmente no se esperaría, pero que se permite y usa por una variedad de razones, a veces por flexibilidad. Como consumidor de un miembro que tiene parámetros que permiten valores nulos u otros valores especiales no racionales (como tiempo negativo o cantidades negativas), espero verlos identificados y explicados.
Para parámetros no nulos, como consumidor de un miembro público o protegido, quiero saber que nulo no está permitido. Quiero saber cuál es el rango válido de valores en el contexto dado. Quiero saber las consecuencias de usar valores que están fuera del rango normal, pero que son válidos en un contexto de llamada diferente (por ejemplo, el valor del tipo generalmente es válido para cualquier operación, pero no aquí, como un parámetro booleano que no No esperes falso como un valor válido.
En cuanto a la plataforma, o interfaces bien conocidas, no creo que tenga que llegar a extremos al documentarla. Sin embargo, debido a que tiene la oportunidad como desarrollador de variar la implementación de cualquier guía de plataforma, tomar nota de cómo sigue esa guía puede ser valioso.
Las implementaciones específicas de IDisposable, a menudo de esta interfaz ofrecen un método alternativo que se prefiere sobre el proceso de eliminación explícito. En estos casos, resalte el método preferido y tenga en cuenta que no se prefiere la eliminación explícita.