Dispatch Issue # 6
Good Morning Friends! This is JetpackCompose.appās Dispatch, the Android Development newsletter that's as satisfying as perfectly peeling an orange in one go š
This is Issue #6 and hereās what he got for you today:
š¤ Interesting tid-bits
Spicy blogpost from Donn Felker
Donn Felker, one half of the popular Fragmented Podcast, has dropped a bombshell with his spicy article titled āThe Decline of Mobile Developmentā. Donn highlights how mobile development has morphed into a game of meeting restrictive requirements through forced updates, where developers spend more time wrestling with platforms than actually building cool stuff ā you know, the fun part.
The post has stirred up quite the conversation among seasoned Android engineers, many of whom resonate with Donnās sentiments.
Donnās blogpost generated strong reactions from Android veterans that mostly agreed with him
Over the past six months, Iāve been chatting with people I respect and admire about a related topic: the un-sustainability of indie Android development. Unlike the iOS/Web ecosystems, where many can generate enough revenue to sustain themselves, indie Android developers often face an uphill battle. This is a crucial issue, and I plan to dive deeper into it in future editions of Dispatch. Thereās a lot more to unpack here, so stay tuned for some more tangential topics that havenāt been discussed enough!
Cross-platform auto generation of code from design system tokens by Amazon
You know that feeling when you discover a fantastic tool way too late? Like finding out your phone has a flashlight after years of using a candle. Thatās me with Style Dictionary.
For the past four years, Iāve been knee-deep in Design Systems and UI Infrastructure land. Yet, embarrassingly enough, I had no clue about this project. Style Dictionary, an open-source project from Amazon, lets you define your design token symbols in one place and auto-generates code for every platform you support. Itās like having a universal translator for your design system so that you never go out of sync across all platforms ā thatās the magic here. This might sound a bit abstract so this video gives you a quick demo of how this library helps.
My team painstakingly built something similar internally, but if I were starting today, Iād be all over this. And guess what? They recently added support for Jetpack Compose and SwiftUI. So, whether you're on Team Android or Team Apple, this library has you covered.
JetBrains previews a Storybook like tool for Compose
Some of you might know me as the author of Showkase, the Jetpack Compose library that collects all the previews in your codebase and lets you browse through them in an auto-generated component browser. I launched it back in 2020, when Compose was still in pre-alpha, aiming to fill the void in the Android ecosystem compared to the webās beloved Storybook. While Showkase isnāt a one-to-one replacement, it certainly plugs a lot of gaps.
Fast forward to 2024, and the Compose ecosystem has matured significantly, even becoming multi-platform. This evolution has caught the attention of JetBrains, who have recently previewed an early version of Storytale, a Kotlin Multiplatform product with similar ambitions. Wrapping your head around what it does can be tricky, so I highly recommend watching this short video (safe to download this video) to see its potential. If you only click on two things from this email, let this be one of them. The other, of course, is Runway, our awesome newsletter supporter.
Storytale allows you to develop Composables in isolation, along with documenting and testing all itās behavior
Iāve always been bullish about the need for such a tool, and Iām excited to see how this space evolves. Itās still early days, but I have a strong feeling that tools like Storytale could become a staple in developing with Compose.
The badass creator of SQLite
Source code is often a treasure trove of hidden gems and easter eggs, and SQLite is no exception. Most of you are probably familiar with SQLite, the disk-based database that's become a staple in the software industry. It's used across major operating systems (Android, iOS, Windows), web browsers, and countless other critical software. Even if you haven't used SQLite directly, youāve probably used it indirectly through libraries like Room.
Part of SQLiteās widespread adoption is due to the creator's decision to make it freely available for any purpose, without restrictions. Hereās a quirky snippet from its source code:
š«”
How badass is that? Itās philanthropy at its finest, even if most people donāt perceive it that way. While some aspire to be rich enough to buy a yacht, I aspire to write software and give it away for free all day, every day, just because I want to. Weāll get there someday, fellow nerds!
š Dev Delight
Letās be honest, it was legit easier to invoke a snackbar in the legacy Android world
Credit: dbcooper
š„ Tipsy Tip
LLMs (Large Language Models) have become an integral part of our workflows. Theyāre great for writing code, but it would be nice to also leverage them for reviewing the code we are writing/modifying. Sure, you can set up a fancy GitHub Action to handle this, but what if you need to ask specific questions about just the changes you made, not the entire file (especially if youāre making changes to something massive like View.java
in AOSP š
).
Hereās a quick pro tip š”- add .patch
at the end of any GitHub pull request URL. This will give you the Git patch containing the diffs of your PR. LLMs understand this format well and can focus on the exact changes you made, which is super handy for many use cases. Give this link a shot to understand what I mean
// Notice the ".patch" added at the
// end of the Github pull request url
https://github.com/airbnb/Showkase/pull/389.patch
LLMās understand this format really well so you can copy-paste it and ask questions about specifically your changes
š„Ā Media Player
About six years ago, I watched a video that influenced my views on software engineering career progression. I've referenced it countless times and frequently recommend it to my team. In this talk, Randall Koutnik argues for a better way to define and measure āseniorityā in software engineering. He proposes a framework based on three levels:
- Solution Implementer: Focused on writing code and solving specific problems
- Problem Solver: Focused on breaking down larger problems into smaller, manageable parts and finding solutions.
- Problem Finder: Focused on identifying and prioritizing the most important problems to solve.
I find this framework much more effective than simply labeling engineers as ājuniorā or āsenior.ā Plus, using āyears of experienceā as a criterion for career progression is meaningless in a world where ārest and vestā is an open secret.
As a guideline to understand how these relate to the traditional levels that the tech industry has been using, this is my mental model to map them to the typical levels that we are familiar with:
Randallās Eng Levels | Traditional Eng Level |
---|---|
Solution implementer | L3/L4 engineers |
Problem Solver | L5 (Senior Software Engineers) |
Problem Finder | L6+ (Staff+ Engineers) |
I highly recommend watching this talk. It's a valuable investment of your time and I would encourage you to make sure your managers watch it as well. Hopefully, this will provide the ammo you need to make a compelling case for a promotion by the end of the year š. After all, I want every single one of my subscribers to get promoted ā youāre dedicated to your professional growth and take the time to read Dispatch so you absolutely deserve it ā¤ļø
š©āš» Featured Developer
This issueās featured subscriber is Android GDE and OG Annyce Davis, who has been successful in growing her career in a prolific manner and was most recently a VP of Engineering at Meetup.
Whatās your favorite Android Studio shortcut?
Currently, enjoying āInteractive Modeā of the Compose Previews. It lets me iterate so quickly without having to launch anything on the emulator.
What's your daily driver?
Google Pixel for life š
You were able to grow in your career much beyond the Android specialization that you started with. What advice do you have for Android engineers who are hoping to do the same thing with their own careers?
Think of yourself as an engineer first and an Android engineer second. Our goal is to use technology to solve business problems. Sometimes Android is the right choice, but itās not always. That mindset has helped me to stay open-minded and always eager to learn something new.
What was your go-to question when you were hiring an Android engineer on your team?
How would you describe the architecture of a modern Android application? This question is always relevant. It helps you to understand what āmodernā means to them. What technologies they are familiar with. Also, assess their thoughts/opinions about the state of Android development.
Whatās your favorite feature in Jetpack Compose?
I love the simplicity of the navigation implementation. Having worked with Android for so long, I appreciate having the Navigation Host and clear visibility into the available composables and how they go from one place to the next.
One project that you feel most proud about shipping
Iād have to say it was a word game I built with my brother. There was so much to learn. How to use a game engine SDK, creating the proper graphics, animations, game play, monetization, etc. It was a labor of love and I still think about it fondly.
Favorite purchase in the last year
A handheld vacuum thatās for pet hair. I have four dogs. Yep, four! I use it every day.
If you weren't a Software engineer, what profession would you choose instead?
Iād be a teacher. Thereās something magical about sharing what you know with others and getting to see their āah-haā moment.
š» Code Corner
Sometimes you want to draw a border around a Composable function, but only on one or two sides. Andrey wrote this handy Modifier that allows you to specify which sides of the border should be drawn.
If you found this useful, please share it on your companyās Android specific Slack channel and/or your Twitter account. Your feedback is invaluable, and it helps me know that my efforts are making a difference. Otherwise, it feels like Iām shouting into the void!
On that note, hereās hoping that your bugs are minor and your compilations are error free.