Effective Interviews ⚡️ Jaewoong Eum
GDE for Android & Kotlin, Sr. Android dev advocate @getstream_io
Welcome back to the Effective Interviews ⚡️ a series of written interviews with well-known engineers from the Android worldwide community.
Today, I’m talking to Jaewoong Eum, Google Developer Expert for Android and Kotlin, Sr. Android dev advocate at getstream.io, and well known for his several contributions to the Android open-source ecosystem with libraries like Orbital, Balloon, Landscapist, and Sandwitch among many others.
🟣 Welcome to the Effective Interviews Jaewoong 👋 nice to have you here!
Hey Jorge! It’s an honor to be joining this interview. Thank you for inviting me. I’m Jaewoong (a.k.a skydoves), an Android Developer Advocate at Stream. I’m a GDE for Android / Kotlin and contribute to the open-source community by building open-source libraries on GitHub for billions of global end-users across millions of different Android apps.
🟣 What inspired you to become an Android dev, and how did you get started?
When I was a middle school student, I wanted to be a game developer, and I started to learn programming by myself. I learned C# and Ruby by searching on Google. To be honest, my parent never supported me in doing programming when I was a student, but it was really fun, and I realized programming suited my aptitude and fascinated me so much. As a result, I built an RPG online game using C# with my friends, and more than 5k users played the game. I remember that I persisted user data inside text files line by line because I didn't know the database. Of course, it used to throw I/O exceptions, but it was a really fun approach at that moment, and I enjoyed building a game that reflected my creative stories.
Back in 2014, when I was in my first year of the university, I had a great chance to work at a small company as a Windows application developer with my C# development experience. To be honest, I never expected to develop mobile apps, but the company needed an Android application that captured photos and detected/cut the edges of scoring cards using OpenCV. It was my first journey to develop an Android application with Eclipse and NDK for 4.4 Kitkat Android devices.
After working on the OpenCV project, I decided to dive into Android application development. It was enough to fascinate me a lot in terms of new technologies and mobility software, which means that I could bring my software everywhere and show other people what I build on top of my smartphone.
🟣 Your open-source work is remarkable. Is it part of your job as a developer advocate? how long have you been doing it? what is your secret for staying that active?
Thank you, Jorge! I started to build my open-source libraries back in 2017, and now it’s a part of my daily routine. Since I work as an Android Developer Advocate at Stream, I’ve contributed to many open-source libraries and projects under the Stream organization as daily work. However, most of my open-source projects are outside of my daily job. So I always try to keep them up to date after getting off my daily work and on weekends, and I treat my open-source libraries as a product, not just as toy projects. It may sound ridiculous that I wasted my PTOs to maintain my open-source projects in my previous companies, but that says how much I am passionate about them.
Managing my open-source project is somewhat challenging when I don't have enough time to update them. But I know that hundreds of thousands of developers download my open-source libraries every month and wait for my updates, which makes me have a lot of responsibilities to maintain them every day. This is why I always try to build the best solutions for my library users.
🟣 Are you the only maintainer of all your libraries? Do you get many bug reports and/or feature requests? How do you deal with it?
Yes, in most cases, I’m the only maintainer of my libraries. Definitely, It’s not easy to deal with a ton of bug reports and feature requests, and sometimes I receive more than 10+ issues and feature requests in a day. I was very intimidated the first time, but now I’m quite familiar with dealing with those situations.
The most important thing here is prioritizing my work every hour, measuring what tasks should be done first, and resolving them efficiently. If I have to solve many different kinds of tasks, I normally group and prioritize what tasks should be done together or first. For example, when I resolve a new issue for one of my open-source libraries, I usually fix other libraries facing similar problems in the same task scope. It will reduce time and resources for my future or current tasks because my brain is on the same page for the same problem and resolve the same issues quickly.
Prioritizing my tasks also reduces my work time and costs. Some kinds of tasks depend on other tasks. For example, I need to write code about fetching data from the network. In that case, I usually follow this sequence: create request/response models - write the API request specs - write business about API requests - and bind the result with UIs. If I start by writing API request specs with the Retrofit interface, I should go to a different page to write models and back to fill in the request and response spec in the Retrofit interface. It really depends on the situation, but I try to align my tasks by sequence as much as possible.
🟣 You are from Seoul, South Korea. In my old times as a semi-professional WarCraft III / StarCraft II player, the Koreans basically destroyed everyone else in any major tournaments. Are esports considered a national sport there? Is it part of your culture? Are esports broadcasted on national TV?
Ha, this is a very interesting question. Most Koreans are really serious about esports and games. They’re really proud of themselves that Koreans destroyed everyone else in any major tournaments. Actually, there’s the most popular gaming culture in South Korea - PC room, which is a type of gaming center where people can play multiplayer computer games for an hourly fee. They have hundreds of the newest specs computers, great keyboards, mouses, and gaming chairs; Even they provide a lot of food. You can find PC rooms in South Korea on every block of the street, and people can play games in a PC room for an hour by paying 1 Euro. Most Korean guys play games a lot there, along with friends, and I also used to play games with my friends, such as StarCraft and League of Legends, when I was a university student.
🟣 You worked for Korean companies since 2020. Why did you switch to an American company like Stream? Was it hard for you to adapt? What advice would you give to other people in the same situation?
Like Koreans win every tournament in esports, I believe American companies are the major tournament in technology fields, especially in programming and software, so I switched to an international company. I also wanted to grow up by experiencing many different cultures around the globe, and I believe that’s the shortcut to growing up in many ways.
For people who want to work for an American or international company - you should understand diversity, be a fast learner, and adapt quickly to many different situations. They will not wait for your lack of experience or bad performance. Be willing to do new things as much as possible, and don't fear failure. Be familiar with dealing with new things that you’ve never experienced. If you’re a non-native English speaker, you need more effort than other colleagues (which might be more than double), but I believe you will learn many things from the journey and get valuable experience.
🟣 Why did you decide to go into advocacy?
Since I started contributing to the open-source community, my motivation has been to “learn, build, and share innovations for everyone” so far. I really like acquiring new knowledge, studying hard, building something with magic spells, and sharing the result to help other developers. So that’s why I really enjoy building open-source software, writing blog posts, and giving a talk in front of people. Those activities led me to be a Google developer expert for Android and Kotlin, and also why the role of developer advocacy fits me well.
At the same time, I have tried to maintain a sense of engineering since I changed my role to advocacy. Technically, developer advocating is more related to developer marketing than engineering, so most of my tasks might be focusing on advocacy than engineering. But I do love both engineering and advocacy, so I usually connect my tasks as much as possible, such as building open-source libraries that promote my company and challenge me in engineering at the moment.
🟣 You wrote Orbital, a Jetpack Compose library to implement dynamic transition animations such as shared element transitions. Orbital relies on LookaheadLayout. I wrote about this layout during my explorations for the Jetpack Compose internals book.
Yes, I’m really interested in animations, and I like Jetpack Compose, so I built Orbital, a Jetpack Compose library to implement dynamic transition animations such as shared element transitions. LookaheadLayout is really interesting under the hood, and it’s a promising API for the future. Doris Liu works very hard on LookaheadLayout as a software engineer on the Android Toolkit team at Google. One of the most exciting things in her plans is that LookaheadLayout will be available with LazyColumn or LazyRow, which means you can use them like a normal shared element transition in the traditional Android layout system. And yes, I’ve read your Jetpack Compose internals, and it’s a really great book. If anyone wants to understand the internal system of Jetpack Compose, I definitely recommend reading this book.
🟣 Do you think reading library sources is good for improving as a developer?
Absolutely yes, yes, and yes. Not only libraries but also most open-source projects result from a lot of effort from worldwide developers. You can read valuable code written by great engineers for free on GitHub without joining a big tech company, such as one of the so-called FAANGs. You can also see everything they discuss on specific topics to achieve something. That information is priceless and absolutely helps you to increase your knowledge by reading a lot of different styles of code and creative ideas. And I believe that open-source culture has made most startups successful by allowing people to use tens or hundreds of thousands of dollars of solutions just for free.
🟣 As a non-native English speaker, I know learning a second language is very hard. Especially when you need to use a ton of technical terms and sound convincing to your teammates. How did you learn English? do you recommend other developers to work on their English skills?
Yes, English is still one of the most challenging things for me. A fun fact is that most Koreans learn English from 8(ish) old until graduating from university, but they don't speak English. Because we normally focus on remembering grammar, sentences, and words to pass the national entrance exam for university and have no chance to communicate with real native speakers. I was one of them, and it was really difficult for me to learn English.
In my experience, practice is the only shortcut to learning a second spoken language. (Of course, programming languages as well 😁) First, I went to my smartphone settings and changed the language to English. I started to read English articles, watched English videos, and tried to familiarize myself with English as much as possible. That was my first step to learn English. And actually, technical relevant communication is much easier for me because I’m already familiar with the entire terminologies of engineering. Ironically, speaking with my colleagues about our daily life is much more difficult than technical talks because we normally speak very softly, not like the listening tests.
Luckily, my colleagues know that I’m a non-native English speaker, and they always patiently understand my bad pronunciation and try their best to communicate with me well. I want to say thanks to my team, especially Nash and our Android team!
🟣 You have posted about doing military service a few times. It is mandatory in South Korea, right? For how long? Is it something you could skip somehow? did it completely interrupt your software engineering career?
Yes, unfortunately, doing military service is mandatory for every man in South Korea for two years. We must live together in the military service center with almost no compensation. After finishing those two years, we must go to the nearest military service center and get practical training for 2~3 days every year for eight more years and also get online training for a few hours every year until 40ish.
Alternatively, there is a policy that allows some people who are good at programming or engineering to work at specific companies for three years rather than going for military service. But this is very competitive because everyone wants to go there and get paid instead of wasting their lives in military service. Luckily, I got a chance to work at two startups for three years as an Android developer to replace the military service. But even after that, I still need to get practical training for eight years. After working for those three years, I returned to my university and started working at a new startup.
🟣 How’s your life outside of work?
I have nothing much to say about my outside work because I usually work (company, open-source software, and a bunch of experimental side projects, GDE activities) on many projects 😅. But I mostly hang out and travel to other places with my girlfriend, who is also an Android developer. She is from Cambodia and works in Busan, South Korea as an Android developer. I was living in Seoul, but I recently moved to Busan to see her frequently, and we used to go on a date to see the ocean, cook food together, or do many different outside activities. Recently, she is the only person I see in my daily life outside of work.
🟣 You wrote Landscapist, a Jetpack Compose image loading library that fetches and displays network images with Glide, Coil, and Fresco. What does Landscapist provide on top of all those libraries?
Back in 2020, Landscapist was born from the very initial version (1.0.0-alpha02) of Jetpack Compose. I built it to support image loading in Jetpack Compose because the rendering system is quite different from the traditional Android view system. I thought most applications already used the most popular image-loading libraries, Coil, Glide, and Fresco, so I used their core network request features instead of building a new library from scratch.
Landscapist is built on top of those libraries to support loading images and GIFs asynchronously from the network. However, the internal implementation in Jetpack Compose is quite different. Landscapist focuses on supporting more pluggable features, such as placeholder, animation, previews, custom Composables, and generating color palettes from images with multiple plugins. Also, recently I've been focusing on improving the recomposition performance in Jetpack Compose by introducing Baseline Profiles and more general/comprehensive features in image loading that could be used in many cases.
Thankfully, Landscapist hits more than +300k downloads monthly, including global applications like Twitter, Azar, and Hakuna Live, and that makes me have more responsibilities on my open-source libraries.
🟣 Where can readers find you?
Thanks so much for sharing with us Jaewoong. See you around!
More interviews lining up already 🔥 if you want more, check all the interviews published so far 👇
If you like this type of content, consider subscribing to this newsletter and joining the other 1500+ people that read it every day 🚀
The Jetpack Compose exclusive training
The course is already 🔥 SOLD OUT 🔥 50 people registered so far 👏👏👏 BUT 👇
Since some people missed the chance to join and are still asking, I decided to open just a few more last-minute slots. The course starts tomorrow, so they’ll not last long. All the details here.