В некоторых проектах джунов иногда вижу довольно сильный упор на узко-направленные исключения. Например:

public class UserNotFoundException extends RuntimeException {
    public UserNotFoundException(String message) {
        super(message);
    }
}
public class EventNotFoundException extends RuntimeException {
    public EventNotFoundException(String message) {
        super(message);
    }
}

И так далее, сколько сущностей, столько и исключений. Но поведение у них у всех одно. Поэтому зачем их плодить?

Достаточно создать одно исключение NotFoundException и использовать его:

public class NotFoundException extends RuntimeException {
    public NotFoundException(String message) {
        super(message);
    }
}

Создавайте самостоятельное исключение, только если предпологается его какая-то особенная обработка, или если существующие исключения вам не подходят. Например, странно бросать NotFoundException, если ситуация будет связана с проблемами доступа. Тогда лучше создать какой-нибудь AccessException.