Thoughts on development, design, and building products
Stripe, LangChain, NVIDIA, GitHub, and a small experiment of my own kept running into the same problem from completely different directions. I've spent the last couple of months reading about how seri
If you've ever written a callback inside a callback inside another callback just to do a network call, then show a result, then save to DB, you already understand why RxJava exists. It turns that mess
You picked solid tools like Room for your database, Hilt for dependency injection, maybe Retrofit or Moshi for networking and all good decisions. But now something feels off. You change a small thing
Building a video player is easy. Building one that survives configuration changes, updates at 60 FPS, handles buffering gracefully, prevents memory leaks, and provides a smooth user experience, that's the real challenge. In this technical deep-dive, ...
In Parts 1-6, you mastered the art of asynchronous programming. You can fetch data, handle errors, and manage flows. But there is one question left: Does it actually work? And more importantly, will it keep working 6 months from now? Testing asynchro...
You've mastered the fundamentals: writing coroutines, managing lifecycles, controlling threads, handling data streams, and managing errors. Now it's time to level up. In this article, we'll explore advanced patterns that solve complex real-world prob...
In Parts 1-4, we built the "Happy Path." We wrote code assuming the internet is fast, the database is perfect, and users never make mistakes. But in the real world? Things break. The network times out. The server sends garbage data. The app crashes. ...
In Parts 1-3, you learned how to write coroutines, manage their lifecycles, and control their threading. But all our examples so far have dealt with single values: suspend fun fetchUser(): User { // Returns ONE user } What if you need to handle multi...
In Part 2, you learned how to manage coroutine lifecycles with scopes. Your coroutines no longer leak memory, they live and die at the right time. But there's another critical question: Which thread is your coroutine running on? Run a network call on...
In Part 1, you learned how to write your first coroutine using launch and async. Your code works, but there's a critical question we haven't answered yet: What happens to your coroutine when the user closes your app? If you're not careful, those coro...
In Part 0, we learned why coroutines exist, they solve the async programming nightmare that's plagued Android developers for years. We saw how blocking code freezes apps, how threads are messy and expensive, and how coroutines provide an elegant solu...
Why Kotlin Coroutines Exist (And Why You Should Care) ? Picture this: You've just launched your first Android app. A user opens it, taps a button to load their profile, and... nothing happens. The screen freezes. They tap again. Still nothing. Three ...
As an Android beginner, I often get overwhelmed by terms like memory alignment, page size, and NDK. Recently, while reading about Android 15, I came across something that confused me at first:Google is moving apps targeting Android 15 (API 35) to a m...
Welcome back, explorers! In the first two parts of Jetpack Journey, we dipped our toes into the waters of composables, modifiers, layouts, and the magic of building declarative UIs. But trust me, compose is like a video game. The deeper you go, the m...
Welcome back to my Jetpack Journey! 🚀Until now, we’ve explored how to display text, style it, scroll it, and even color it like a rainbow. But now it’s time to take things up a notch because what’s an app without a little interaction? In this next p...
Welcome back to Jetpack Journey, where I’m documenting my learning path through Jetpack Compose in a beginner-friendly and real-time way. After just 2 hours into a learning tutorial, I’ve already started feeling the Compose magic! In this post, we’ll...
Hey there !! Welcome to the first post in my blog series Jetpack Journey: Learning Compose from Scratch, a developer’s log of my dive into Jetpack Compose, Android’s modern UI toolkit. I'm currently leveling up as an Android developer, and like many ...
If you’ve been cruising through variables, functions, and control flow, it’s time to unlock the real power behind modern app development, Object-Oriented Programming (OOP). With OOP, your Kotlin code gets smarter, cleaner, and far more reusable. In t...
Introduction: After learning how to control the flow of your program, it’s time to make your code smarter and more reusable. In this blog, we’ll dive into functions, that is a secret weapon for avoiding repetition and writing clean, modular code! Wha...
Imagine coding without decisions….No conditions, no loops, just straight-line execution. That would be boring, right? Fortunately, Kotlin gives us powerful control flow statements that allow our code to think, decide, and react dynamically! From simp...