Remoting offers developers many ways to customize the communications process, for efficiency, security, performance and power, and allows seamless integration of components running on several computers into a single application. Typical challenges involve network latency, performance, predictability, scalability and partial failure.