One of the issues I am constantly seeing with mobile developers over last few years is that their applications are not optimized for the small and unreliable data pipes.
Most of mobile programmers starts out programming for desktop. In desktop, you constantly do not have to think about throughput and reliability the messages between client and the server amongst other things. Your application will have the benefit of process power and network throughput. It masks bad design and bugs – and it becomes a habit to ignore little things.
Developing for mobile platforms comes with some nuances. Thought mobile network (throughput and reliability) has improved a lot from when I started working on mobile applications (from 2005), it is still small compared to PC.
On mobile applications, the processor and data pipe is small - it takes time to complete a process and message transactions. It impact how design your application. For example, you have to delegate things off main thread and not lock the UI because processing will take bit longer on mobile. Client-Server interaction becomes interesting: would you download / upload in one large dataset or multiple small calls? It depends on type of data and your app but on desktop, you can easily skip worrying about these details.
Mobile devices switching between 3G, Wi-Fi, GSM, etc all the time. Each comes with reliability and network throughput. A mobile application should be able to handle that gracefully including spotty networks. Communication is unreliable so you will have to have retry logic somewhere. Retry also means some sort of caching in the application.