
Fragmented - Android Developer Podcast
The Fragmented Podcast is the leading Android developer podcast started by Kaushik Gopal & Donn Felker. Our goal is to help you become a better Android Developer through conversation & to capture the zeitgeist of Android development. We chat about topics such as Testing, Dependency Injection, Patterns and Practices, useful libraries, and much more. We will also be interviewing some of the top developers out there. Subscribe now and join us on the journey of becoming a better Android Developer.
Latest episodes

Jan 7, 2019 • 59min
148: Evolving Android architectures (Part 1)
In this episode, Donn and Kaushik talk about the state of android architectures and how they've stared to evolve. Kaushik recently worked on a project of coming up with an evolved version of an MVVM architecture, very similar to what the Android community now calls MVI.
Special request: if you have follow up questions or clarifications or things you'd like to see specifically with respect to this dicussion, hit us up on the Discord #fragmented-podcast channel with your thoughts and we'll make sure to address them in future parts!
Shownotes
MBLT-Dev talk by KG : Unidirectional state flow patterns - a refactoring story
github sample repo with this pattern
Salient features of the pattern:
I. Screens are driven by a single ViewModel
II. Screens listen to a single Observable exposed from the ViewModel
III. Screens listen to a single Observable exposed from the ViewModel
IV. Events are sent into the VM through a single function processInputs
V. Break(ing) the Chain
VI. Testing strategy
Inspiration
The state of managing state with RxJava
MVI patterns with Hannes Dorfmann
MVRx
Sponsors 🙏
Nevercode
Nevercode is taking Flutter revolution extremely serious and is prepared to offer kick-ass CI/CD for Flutter projects with codemagic.io. Check it out and get started at https://codemagic.io/
Sentry.io
Sentry tells you about errors in your code before your customers have a chance to encounter them.
Check them out at: https://sentry.io/for/android/
Contact
Discord chat or @fragmentedcast or our Youtube channel
@donnfelker and donnfelker (on Instagram)
@kaushikgopal and kaushikgopal (on Instagram)

Dec 31, 2018 • 15min
147: Disposing RxJava 2 Streams with AutoDispose
In this short fragment episode, Donn explains how you can clean up your RxJava 2 streams and ensure no memory leaks are occurring by using the AutoDispose library from Uber.
Shownotes
AutoDispose Library
Tool to help migrate to RxJava 2
CatchUp Library
Code Samples
Java
myObservable
.map(...)
.as(AutoDispose.autoDisposable(AndroidLifecycleScopeProvider.from(this)))
.subscribe(...)
Kotlin
myObservable
.map(...)
.autoDisposable(AndroidLifcycleScopeProvider.from(this))
.subscribe(...)
With Scope Event Provided
myObservable
.map(...)
.autoDisposable(AndroidLifcycleScopeProvider.from(this, Lifecycle.Event.ON_DESTROY))
.subscribe(...)
Testing
// File: CustomerService.kt
class CustomerService @Inject constructor(...) {
lateinit var scopeProvider: ScopeProvider
}
// Usage in Fragment/Activity/etc
val service = CustomerService(...).apply {
scopeProvider = AndroidLifecycleScopeProvider.from(this)
}
// Usage in Test
val service = CustomerService(...).apply {
scopeProvider = TestScopeProvider.create()
}
Contact
@fragmentedcast or our Youtube channel
@donnfelker and donnfelker (on Instagram)
@kaushikgopal and kaushikgopal (on Instagram)
Fragmented Chat

Dec 24, 2018 • 28min
146: 3 Things Every Android Developer Needs to Know
Dependency Injection
Constructor_setter_method injection
Service Locators or other DI frameworks
Common Frameworks
1. Dagger
2. Koin
3. Kodein
4. ToothPick
How to test
Functional / System
Integration
Unit
Tools:
jUnit
Espresso
Spek
Keep it simple simple
KISS principle KISS principle - Wikipedia
Examples
Code Duplication
“Extract this into a method”
Lets create a framework for this
Kaushik’s - 3x rule
if something is duplicated 3 or more times, think about extracting it
3/6 Rule - In 6 months, will I be able to understand this in under 3 minutes?
Contact
@fragmentedcast or our Youtube channel
@donnfelker and donnfelker (on Instagram)
@kaushikgopal and kaushikgopal (on Instagram)

Dec 18, 2018 • 11min
145: Tracking Network Requests With x-Request-ID
In this short fragment, Kaushik explains how you can trace network requests from your app by adding a special header. Easily trace an HTTP request all the way from a client to your backend web process.
Shownotes
What is the X-Request-ID
HTTP Request IDs improve visibility across the application stack
How HTTP headers work
Where does the X- come from?
Sponsors 🙏
codemagic.io by NeverCode
Join their Flutter Community here
Contact
@fragmentedcast or our Youtube channel
@donnfelker and donnfelker (on Instagram)
@kaushikgopal and kaushikgopal (on Instagram)

Dec 10, 2018 • 1h 20min
144: Developer Productivity Tools
In this episode, Donn and Kaushik talk about productivity tools for developers. As developers, what are some additional tools and utilities that really up your game. If you wanted to see how they tweak their development environments and workstations in general, this is a good episode to listen. Also introducing a Fragmented Discord Chat server!
Shownotes
Fragmented Discord Chat Server
Productivity tools
Keyboard Maestro
Keyboard Maestro - Mac (Referral code with 20% discount)
Sample macros:
Demo: Better auto pairing with BBEdit and Keyboard Maestro
Demo: Autocopy text from one program to another
AutoHotkey - Windows (Windows equivalent of sorts)
DuckDuckGo
Bang Syntax
Muzzle App
Window management tools:
Divvy
Spectacle
Magnet
Moom
Phoenix
VSCode
Night owl theme
OhMyZsh
Spaceship prompt
Auto Suggestions
Fish Shell
Kap - Screen recording tools
Sip - Color Management
Sponsors 🙏
codemagic.io by nevercode
Join their Flutter Community here
Contact
@fragmentedcast or our Youtube channel
@donnfelker and donnfelker (on Instagram)
@kaushikgopal and kaushikgopal (on Instagram)

Dec 3, 2018 • 28min
143: Real world testing thoughts
In this mini fragment, Donn and Kaushik share some thoughts on real world testing with Android development - a favorite topic of theirs.
Kaushik recently ran into a case where an espresso test fails because the UI stops performing. It's an interesting discussion on figuring out what matters when you write your tests. They dive into strategies and techniques around testing. What makes a good test, what should you be testing?
They then talk about why Hermetic testing is pretty hard on mobile and ideas around a simple solution that could be provided out of the box. They then round it up talking about TDD and it's role in today's world.
Shownotes
Espresso Testing lists (onData)
Espress test swipe action
What is the fold
Hermetic Servers testing
MockWebServer
WireMock
Sponsors 🙏
American Express Jobs - American Express is hiring Android developers!
NeverCode
Blog post on developing apps 20% faster
Contact
@fragmentedcast or our Youtube channel
@jebstuart
@donnfelker and donnfelker (on Instagram)
@kaushikgopal and kaushikgopal (on Instagram)

Nov 19, 2018 • 59min
142: Indie development on Android and iOS with Matt Logan
In this episode, we talk to our friend Matt Logan. Matt took some time off and worked on an indie app called Sessions. He built this for both Android and iOS. In this episode we talk to him about his experience building apps on both platforms, techniques, advice and other good stuff.
Shownotes
Sessions Android iOS
Strava
Chris Lacy - Action Launcher
Indie Hacker's podcast
Fragmented Ep #64 - Garbage Collection (Android) vs Reference Counting (iOS)
Matt's blog post on code sharing
Sponsors
Instabug
NeverCode
Blog post on developing apps 20% faster
Contact
@fragmentedcast
@_mattlogan
@donnfelker and donnfelker (on Instagram)
@kaushikgopal and kaushikgopal (on Instagram)

Nov 12, 2018 • 34min
141: Impostor Syndrome
In this mini fragment, Donn and KG talk about Impostor syndrome. Most of us developers are plagued by this. Does this feeling ever go away? How do we deal with this? Listen to this short episode to find out more.
Shownotes
Karl the Fog (wikipedia page) @KarlTheFog
Matt's twitter post on background process limit 0
#135 - You can't learn everything
I’m willing to look foolish, if it means I’ll learn something.
Larry page 1996- Java thread
#76: Taming the activity lifecycle with Kristin Marsicano
Jose Alcérreca's lifecycle cheatsheet bookmark
Sponsors
Instabug -
Thousands of companies including Lyft, eBay and T-Mobile rely on Instabug to receive
comprehensive bug reports from users and testers, helping them iterate faster
and enhance their app quality. Signup now, integrate the SDK for free, and get a
special Instabug t-shirt.
Nevercode
-Develop apps 20% faster with the leading CI/CD partner for iOS, Android, Cordova, Ionic, React Native & Flutter projects.
Blog post on developing apps 20% faster
Contact
@fragmentedcast
@preusslerberlin
@donnfelker and donnfelker (on Instagram)
@kaushikgopal and kaushikgopal (on Instagram)

Nov 5, 2018 • 58min
140: ProGuard with Jeb Ware
We all know of ProGuard, we want to use it and like it. But let's face it proGuard ain't pretty. In this episode we have Jeb walk us through the magic of ProGuard.
We talk to Jeb Ware of American Express. Jeb works as an Android developer and has given some great talks on ProGuard. He walks us through what ProGuard is, how it works, advancements with R8 and more.
By the end of this episode, you should have a new found appreciation for proGuard and bravely approach adding proGuard to your projects.
Shownotes
How ProGuard works - Jeb at Droidcon Boston
ProGuard Manual
D8/R8 announcement
R8 issue tracker
Sponsors
American Express Jobs - American Express is hiring Android developers!
Contact
@fragmentedcast or our Youtube channel
@jebstuart
@donnfelker and donnfelker (on Instagram)
@kaushikgopal and kaushikgopal (on Instagram)

Oct 24, 2018 • 39min
139: Static code analysis with Manu Sridharan
In this episode, Donn and Kaushik talk to Uber's Manu Sridharan on static code analysis. Manu's a badass who did his PhD on the subject! He explains how static code analysis works, how Uber leverages these tools in their app development pipeline and how we can use such tools to build high quality Android apps.
Note from Manu:
I found the story I was thinking about: Reed Hastings founded the company that built the Purify tool for debugging memory errors in C programs before founding Netflix. But, that's actually not a static analysis tool; it does dynamic analysis by adding extra metadata at runtime.
As far as the history of lint goes, from Wikipedia looks like Kaushik's guess was exactly right as to why it's called lint. Looks like the name goes back to the late 1970s.
Misc
ErrorProne
Improve your code with Android lint checks
checkstyle
RxThreadEffectChecker
The Checker framework
NullAway - Uber
Infer - Facebook
Infer: RacerD - Facebook
Contact
@fragmentedcast (on Twitter) or our Youtube channel
@rakingleaves
@donnfelker and donnfelker (on Instagram)
@kaushikgopal and kaushikgopal (on Instagram)