WeMail (2014 Oct - Present)
Description
Email client app is a trending area recently, WeMail uses a new approach to organize email, instead of changing users’ behavior like Mailbox, WeMail groups email by sender and provides other advanced filter UI that allows you navigate faster.
My role and challenges
I joined the team right before their first public release, responsible for identifying the critical performance issues, prioritized the tasks according to remaining time and decided to fix before or after launch. In last few years I was working on code base that I built from group up, joining this team gives me opportunity to learn how to pick up other’s code fast and use my experience to improve the team’s workflow and code structure.
Links
9GAG Android (2013 - 2014)
Description
The 9GAG official Android app provides native Android experience to their large user base. The app supports all core features available on 9GAG web site including viewing posts in different lists, login, upvote, comment and share. This app got over 5M downloads and was featured on Google Play store.
My role and challenges
I joined 9GAG as their first Android developer, I built the whole Android app from scratch and did weekly release for almost a year. I was also responsible to refactor codes into components for other projects reuse and guide new hired Android developers to pick up the code base.
One of the challenging problem only 9GAG (and may be a few other apps) faces is the long image problem. As the site supports one image in each post, some creative users tried to concatenate multiple images to one post, or just want to keep other users scrolling, and resulted in very long images. Turned out there is a size limit for ImageView and openGL (mostly 1024px, some newer devices can do 2048px) so I have to implement tile generation in client side, custom view for display, and have to make it usable in ListView.
The image feed is the core of the app, displaying image smoothly is the most important task otherwise users will go for mobile web or other 3rd party apps. So besides doing all the performance tricks for efficient layout and drawing, I have also reviewed some opensource image loader library but cannot find one fit my usage so I developed one myself that optimized for the whole flow of image download, tile generation, display.
To support large amount of active users, my team and I developed a monitoring system to monitor crashes, server errors, and other abnormal cases and send out alert emails. The monitoring system also allowed us to do A/B testing to compare users usage in different features.
I also developed some code generators to convert config file to java code for multiple build support and manage repetitive code to avoid team making mistake when doing copy and paste.
Links
ActionSnap (2010 - 2012)
Description
A popular Android camera app developed in 2010. It takes multiple shot and combines to one photo and allows users to choose different layouts and effects. The app was featured on Android market a few times and got over 2M downloads. We also integrated Steply, a social photo sharing platform, to get more users by cross promoting each other’s products.
My role and challenges
It was a company’s side project, the goal was to let the team try out Android sdk and build something for fun. We built the prototype in a week then I contributed most of the codes in my personal time.
It was not an easy task to build a camera app in 2010, the first problem is the memory limit, devices that time only allowed 16MB memory for each process so you can only downscale the image to apply color effect to pixels, and it was even harder to combine 4 or 9 photo to one.
Another challenge was different devices support. After the app launched, we met quite many manufacture specific problems especially on camera, some cannot see the preview, some can see the preview but the result image was corrupted, as we did not have enough testing devices, we spend a few round of releases to fix the problems. Moreover, all Android 2.1, 2.2 and 2.3 are released in 2010 and there were new camera related api in every version. Camera orientation support was added in 2.2, front camera support was added in 2.3. I also did an internal sharing on image orientation issues.