The Mobile Problem
In a mobile device, we have four factors that are different from contemporary desktop computers. They are:
- Less memory
- Less CPU capacity
- Constrained network bandwidth
- Small screen size
These thing may seem difficult, but really we experienced this before in the early days of the web explosion. PC’s were much less powerful, common screen resolutions were 640 x 480, and network access was over a 14.4k modem or less. We’ve just gotten lazy in the days of blazing networks and a dozen iterations of Moore’s law, and some of us developing for mobile today never even lived through any of that.
Memory constraints certainly keep us on our toes. We can’t be sure our app will survive consistently in the phone OS, it could be terminated at any time due to memory constraints based on user activity. So we solve problems by making objects parcelable in Android, or persisting the state of any given network call in a database so we can pick up again at a later time if necessary.
These constraints are driving how we design apps and the systems that support them. REST + JSON gives us smaller network messages. We minimize CPU usage by preferring JSON over XML so there is less effort serializing, and we offload complex or data-intensive calculations to a server somewhere in the cloud.
Mobile has rightfully caused the rise of graphic design as a regular component in app development, not just something start-ups are doing. Apps are getting more user-friendly despite the small screen size, and focused in their functionality as a result of good design. Users like apps, no longer is it something they are forced to use because they have choices. Also, users finally get a vote (in $$) on whether or not an app succeeds. We are getting away from monolithic web apps. Smaller apps have fewer paths which make them more testable and have fewer bugs as a result which is better for users.
This time around developers have the benefit of having lived through the web explosion and learned what not to do. I hope more companies build enterprise-level mobile apps keeping this in mind and don’t recreate the nightmarish internal web apps on phones.