Dispatch Issue # 6

šŸ˜ž The decline of mobile dev, Storybook like tool from JetBrains, the badass developer of SQLite and meeting Annyce Davis
Vinay Gaba Profile Image
Vinay Gaba on August 06, 2024
Hero Image

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 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 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 Letā€™s be honest, it was legit easier to invoke a snackbar in the legacy Android world
Credit: dbcooper



I dont know, I really dont know

šŸ„‚ 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 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:

  1. Solution Implementer: Focused on writing code and solving specific problems
  2. Problem Solver: Focused on breaking down larger problems into smaller, manageable parts and finding solutions.
  3. 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 LevelsTraditional Eng Level
Solution implementerL3/L4 engineers
Problem SolverL5 (Senior Software Engineers)
Problem FinderL6+ (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 ā¤ļø

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.

Annyce Davis

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.

Divider

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.

Welcome to the VIP club
To read the rest of the post, subscribe and never miss an issue!
Already a subscriber? Use the same email id to login again.