Thoughts on development, design, and building products
We've spent a lot of time talking about better AI models. Every few weeks, there's a new model that can reason better, write better code, understand more context, or use tools more effectively. And wh
Okay, so let’s understand this last one simply. For seven parts, we followed one page on its journey. From pressing Enter, through DNS and handshakes, HTTP and caching, the DOM, styles, layout, paint,
Okay, so let’s understand this one simply. In Part 6, the page finally made it to the screen. The journey from pressing Enter to pixels is complete. But one character kept showing up in every part wit
Okay, so let’s understand this one simply. We’re almost at the end of the journey. Look at everything the browser knows now: Part 3: the DOM. What is on the page. Part 4: the computed styles. What eve
Okay, so let's understand this one simply. Let's quickly look at what the browser knows so far: From Part 3, it has the DOM. It knows what is on the page. From Part 4, it has the computed styles. It
Okay, so let's understand this one simply too. At the end of Part 3, the browser had built the DOM, its family tree of your page. It knows there's a heading, a paragraph, and a button. But it has no i
Okay, so let's understand this one simply. In Part 2, the files finally arrived. The browser asked for the page, the server sent back the HTML, and Job 1 was done. Now Job 2 begins. And honestly, this
In Part 1, we did all the groundwork. We found the server's address with DNS, said hello with TCP, and agreed on a secret language with TLS. So now we have a secure line open to a server somewhere in
In Part 0, we got the big picture. The browser has two jobs: get the files, then turn them into pixels. This part is about the very beginning of Job 1. Before your browser can ask for a single byte of
I use a browser every single day. Probably you do too. We open tabs, close tabs, refresh pages when they act weird, and never really think about it. But a few weeks ago I asked myself a simple questio
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...
"Think of operators as Kotlin’s way of performing magic tricks whether it's adding numbers, comparing values, or making logical decisions, operators are everywhere in your code!" Operators are essential building blocks of any programming language, an...
Heyyy, Kotlin enthusiasts! Last time, we explored arrays and ArrayLists how to create, modify, and manage them efficiently. But Kotlin has more collection types that make handling data even smoother! In this article, we’re diving into Sets and Maps, ...
Heyyy, Kotlin Explorers! In our last post, we wrapped up type conversions like a pro. Now, it’s time to level up with one of the most powerful features in Kotlin, Collections! Why Collections?Imagine storing hundreds of values in just one variable so...
Heyyy, Kotlin folks! In our previous article, we explored the basics of variables and data types in Kotlin. We learned how to declare variables using var and val, understood the differences between mutable and immutable variables, and delved into Kot...
Kotlin Variable: Variable refers to a memory location. It is used to store data. The data of variable can be changed and reused depending on condition or on information passed to the program. Variable Declaration Kotlin variable is declared using key...
Thinking of creating apps that dazzle and delight? Great choice! But before you dust off those Java textbooks, let me introduce you to Kotlin a modern marvel in the world of coding. It’s sleek, smart, and makes you wonder how you ever coded without i...