Actors Should Do Only One ThingSingle Responsibility PrincipleCreate Specific SupervisorsKeep the Error Kernel SimpleFailure ZonesAvoid BlockingFutures Delegation ExampleJava futures are blocking!Pre-defining Parallel FuturesParallel Futures with the zip() MethodSequential FuturesCallbacks versus Monadic HandlingFutures and ExecutionContextPush, Don’t PullWhen You Must BlockManaged Blocking in ScalaAvoid Premature OptimizationStart SimpleDeterministicDeclarativeImmutableFunctionalLayer in Complexity via IndeterminismOptimize with MutabilityAdd mutability with compare and swap (CAS)Compose CAS with Software Transactional MemoryAdd locks as a last resortPrepare for Race ConditionsAvoid coding in a way where timing mattersTell, don’t askBe ExplicitName Actors and ActorSystem InstancesCreate Specialized MessagesCreate Specialized ExceptionsBeware the “Thundering Herd”Dampen message overloadUse circuit breakers for failure overloadDon’t Expose ActorsAvoid Using thisThe Companion Object Factory MethodNever Use Direct ReferencesDon’t Close Over VariablesUse Immutable Messages with Immutable DataHelp Yourself in ProductionMake Debugging EasierAdd MetricsExternalize Business LogicUse Semantically Useful LoggingAggregate Your Logs with a Tool Like FlumeUse Unique IDs for MessagesTune Akka Applications with the Typesafe ConsoleFixing StarvationHow do you fix it?Does PinnedDispatcher help?Failure zonesRoutersSizing DispatchersThe Parallelism-Factor SettingActor Mailbox SizeThroughput SettingEdge Cases