Вовсе необязательно использовать ASSERT. Прекрасную репутацию заслужил Debug.Out. Тоже самое, но без остановки кода. По хорошему, на все возможные ситуации должен быть предусмотрен обработчик. А если ситуация, которая по замыслу невозможна, но всё же случилась -- тут ассертов не напасёшься. Поэтому инженеры и не рассматривают такие случаи.