The documentation for Single.delay says that success or error signals will be delayed by the specified amount, but in fact errors are not delayed, only successes. I have no opinion on which one should be correct - I ran into it when mocking out the response for an incomplete backend to test a loading/error UI, e.g. Single.error(...).delay(3, TimeUnit.SECONDS), and found that my errors never had a delay. It seems that Observable has both options, with a version of the method that has a boolean flag delayError.
https://github.com/ReactiveX/RxJava/blob/2.x/src/main/java/io/reactivex/Single.java#L1636
https://github.com/ReactiveX/RxJava/blob/2.x/src/main/java/io/reactivex/internal/operators/single/SingleDelay.java#L66