How We Sped Up Zipline Hot Reload

Yissachar Radcliffe

Zipline is a library Cash App has developed for fetching and executing code on demand in a mobile app. Developers write their code in Kotlin and it gets compiled to...

Announcing Multiplatform Paging

Veyndan Stuart

Multiplatform Paging is a library that packages AndroidX Paging for Kotlin/Multiplatform. It’s built to be a drop-in-replacement for AndroidX Paging, so extracting out shared pagination logic couldn’t be easier.

Formalizing our Engineering Principles

Nif Ward

Since I joined Cash in August 2021, we’ve undergone unprecedented levels of growth. Growth brings growing pains: the effects of missing organizational structure that become relevant at scale. With the...

Cash Engineering Principles

Nif Ward

In 2022, we set out to capture our current Engineering Principles: how high-performing engineering teams do their best work at Cash. We’re proud of the work we did to record...

Molecule: Build a StateFlow stream using Jetpack Compose

Benoît Quenaudon

Molecule allows you to write imperative reactive code! This is a game changer!

Implementing Kafka in the Payments PCI World

Jing Li

We discuss challenges, innovation and success of the Kafka implementation in Afterpay’s Global Payments Platform in the PCI zone.

Synchronize Dependencies with BOM

Benoît Quenaudon

Keeping multiple dependencies of the same group in sync can be tricky. BOM makes it safe.

Rx to Coroutines Concepts, Part 5: Shared Flows

Bill Phillips

Sometimes, you need to share a Flow with multiple consumers. Read all about how this works in this post.

Rx to Coroutines Concepts, Part 4: Cold Flows

Bill Phillips

In this post, everything you could ever need to know and more about how cold Flows work.

Well, That Escalated Quickly

Dorien Koelemeijer

An introduction to Cloud Cover, our AWS IAM tooling

The state of managing state (with Compose)

Jake Wharton

Five years ago the Cash App Android client started splitting our UI rendering and UI presenter responsibilities into distinct types. We had leaned into RxJava heavily in the years prior,...

Rx to Coroutines Concepts, Part 3: Deferred & Channels

Bill Phillips

In this post, we'll cover the foundations of coroutines communications with Deferred and Channel.

Building a Platform for Content Curation

Tony Tamplin

An intersection between the needs of consumers, users, developers, and the future.

Rx to Coroutines Concepts, Part 2.1: Exceptions

Bill Phillips

Okay, so there's a bit more to know about structured concurrency. This short-ish addenda covers how exceptions propogate within structured concurrent code.

Android Architecture for the Rocketship - Part 1 : Modularisation

Huan Nguyen

We discuss our approach to modularising the Afterpay Android app in our journey to build a strong and scalable mobile platform, to support our business growth.

Rx to Coroutines Concepts, Part 2: Structured Concurrency

Bill Phillips

Everything you could possibly want to know about structured concurrency is in this post.

Obsolete code is slowing you down

Michael Druker

As engineering teams, an important measure of our effectiveness is how quickly we are able to build. If we can realize an idea more quickly, we can do more. While...

Sharp Edges in Kotlin Coroutines Testing Tools

Kevin Cianfarini

At Cash App, we’re starting to integrate Kotlin coroutines into our app architecture. My coworker Bill, who has taken interest and ownership in this migration, came to me the other...

Gradle dependency license validation

Jake Wharton

Six years ago we added a screen to the Android Cash App to display the open source libraries we use and their licenses. This screen had to be updated manually,...

Migrating from Burst to TestParameterInjector

Jake Wharton

Square’s Burst library burst onto the scene in 2014 stemming from general dissatisfaction with JUnit 4’s built-in parameterized runner. It enabled the use of enums to vary input to your...