One issue Instagram faces as it continues to try and expand its userbase is how to reach folks who are in parts of the world without great internet access. That’s why the Facebook-owned company has turned to a New York-based team of engineers to help streamline and optimize its app for better compatibility with network environments that don’t involve omnipresent high-speed access.
A key issue with building systems that improve performance is that it can be hard for software engineering teams to see when users are being turned off of an app. Lola Priego, an engineer on the team in New York that’s responsible for maintaining performance in the Instagram app, said in an interview with VentureBeat that people will stop using an app if it doesn’t perform well, so it can be hard to tell when those performance issues are affecting user experience.
“Performance is really difficult to identify through metrics,” Priego said. “If the performance of the app isn’t good, you won’t use it.”
While users in markets like the U.S. will often have strong network connections and high-performance phones with recent versions of their respective operating systems, that’s not necessarily the case in other countries. The sorts of practices that work well enough in other markets don’t translate as well across borders.
Priego and her team developed a system that lets Instagram’s app pre-fetch content while on a strong network connection, so that customers can see photos from their friends that have been uploaded to the social network between the last time they closed the app and when they’re expected to next open it.
The system works by trying to predict when people will re-open the app, and then fetching the latest data just in time for folks to see the most up-to-date stuff. That way, if they’re unable to connect to a network (or the networks they’re on limits how much bandwidth they can use), it’s still possible for them to get up-to-date images.
All of that is baked into a framework that Instagram engineers can use to enable prefetching for the features they’re working on within the application.
In addition to that system, another part of the performance team developed a system for the Instagram Android app that makes it easier for developers to split each function within the app into different modules that can then be loaded independently of one another. That helps improve a key metric: startup time.
Previously, Instagram’s Android app had different features that relied on one another to get going, which is something the company has been working to do away with, according to Julian Krzeminski, a senior software engineer at the company. Now, the different components of the app are decoupled from one another.
Because the app doesn’t need to load all of its components at once, it’s possible for people to start browsing Instagram faster, while the system uses “lazy loading” to pull in additional modules roughly when it makes sense. Assuming it all goes according to plan, people should actually see improved performance.
Instagram open sourced its tools for lazy loading, which means that Java developers writing Android apps can start taking them for a spin when contemplating how to optimize their applications’ performance. Those tools aren’t necessarily right for every developer, since the require a certain degree of technical skill and understanding of how Android works, but for companies that are looking to expand their reach or improve their applications’ performance, this could be a boon.
As tech companies continue to seek new avenues of growth, this sort of international compatibility work will only become more important.