When interfacing with other systems, you often do not know the whole value range of data in advance, or even what to do with a certain data value. Assertions help during development in such cases, as you can easily leave an assertion in places you are uncertain of, and come back later after your program crashed to examine the unexpected values.