Como uma questão subjetiva, isso deve ser fechado, mas como ainda está aberto:
Isso faz parte da política interna usada no meu local de trabalho anterior e funcionou muito bem. Isso tudo é da memória, então não consigo me lembrar da letra exata. Vale ressaltar que eles não usaram exceções verificadas, mas isso está além do escopo da pergunta. As exceções não verificadas que eles usaram caíram em 3 categorias principais.
NullPointerException: não atire intencionalmente. Os NPEs devem ser lançados apenas pela VM ao remover uma referência nula. Todo esforço possível deve ser feito para garantir que eles nunca sejam lançados. @Nullable e @NotNull devem ser usados em conjunto com as ferramentas de análise de código para encontrar esses erros.
IllegalArgumentException: lançado quando um argumento para uma função não está em conformidade com a documentação pública, de modo que o erro possa ser identificado e descrito em termos dos argumentos passados. A situação do OP se enquadra nessa categoria.
IllegalStateException: Lançada quando uma função é chamada e seus argumentos são inesperados no momento em que são passados ou incompatíveis com o estado do objeto do qual o método é membro.
Por exemplo, havia duas versões internas da IndexOutOfBoundsException usadas em itens que tinham um comprimento. Uma subclasse de IllegalStateException, usada se o índice for maior que o comprimento. A outra, uma subclasse de IllegalArgumentException, usada se o índice for negativo. Isso ocorreu porque você poderia adicionar mais itens ao objeto e o argumento seria válido, enquanto um número negativo nunca é válido.
Como eu disse, esse sistema funciona muito bem e foi preciso alguém para explicar por que a distinção existe: "Dependendo do tipo de erro, é bastante simples você descobrir o que fazer. Mesmo que você não consiga realmente descobrir Para descobrir o que deu errado, você pode descobrir onde detectar esse erro e criar informações adicionais de depuração ".
NullPointerException: manipule o caso Null ou insira uma asserção para que o NPE não seja lançado. Se você colocar uma afirmação, é apenas um dos outros dois tipos. Se possível, continue a depuração como se a afirmação estivesse lá em primeiro lugar.
IllegalArgumentException: você tem algo errado no site de chamadas. Se os valores transmitidos forem de outra função, descubra por que você está recebendo um valor incorreto. Se você estiver passando um de seus argumentos, propague o erro verifica a pilha de chamadas até encontrar a função que não está retornando o que você espera.
IllegalStateException: você não chamou suas funções na ordem correta. Se você estiver usando um de seus argumentos, verifique-os e gere uma IllegalArgumentException descrevendo o problema. Você pode propagar as bochechas contra a pilha até encontrar o problema.
De qualquer forma, o argumento dele era que você só pode copiar o IllegalArgumentAssertions na pilha. Não há como você propagar IllegalStateExceptions ou NullPointerExceptions na pilha porque eles têm algo a ver com a sua função.