Imagine a simple Akka actor system consisting of two parties: MonitoringActor and NetworkActor . Whenever someone ( client ) sends CheckHealth to the former one it asks the latter by sending Ping . NetworkActor is obligated to reply with Pong as soon as possible (scenario [A]). Once MonitoringActor receives such a reply it immediately replies to the client with Up status message. However MonitoringActor is obligated to send Down reply if NetworkActor failed to respond with Pong within one second (scenario [B]). Both workflows are depicted below: Apparently there are at least three ways to implement this simple task in Akka and we shall study their pros and cons. Ordinary actor In this scenario MonitoringActor listens for Pong directly without any intermediaries: class MonitoringActor extends Actor with ActorLogging { private val networkActor = context.actorOf(Props[NetworkActor], "network") private var origin: Option[ActorRef] = None def re