BulkWriteOperation does not provide any means of detecting how many operations have been posted to it. Given that attempting to execute an empty BWO throws an exception, this makes it slightly more complicated than it ought to be to implement, say, a class that provides a single-record #insert() method and internally buffers operations for bulk execution. A private #flush() method in such a class (invoked by #insert() and by #close() when the client is finished inserting records) would need to explicitly coordinate with #insert to know whether or not to submit the BWO for execution.
This could be alleviated by providing #size() and/or #isEmpty() methods on BWO. Either could be used by #flush() to decide whether to execute the BWO. And they're very natural operations regardless.
Alternatively, one could take the JDBC approach, and make execution of any empty BWO a no-op, just as Statement#execBatch() on a statement object whose #addBatch() method has not been invoked is a no-op in JDBC. In my opinion, that's a more sensible design than throwing an exception, but it would potentially break existing appplications.