A Multithreading Saga, Part 2

Nick Entin

Solving our problems with thread proliferation bought us some headroom to unblock the current release, so things began to return to normal. We hadn’t gotten to the root of our...

Talking to customers: A 101 for Product Managers

James Taylor

We all know how important it is talk to your customers, but it's only half the story. Asking them the right questions could mean the difference between a successful product...

A Multithreading Saga, Part 1

Nick Entin

As a product scales, new problems become evident. Some of these problems can be addressed early on, but it’s often necessary to make trade-offs between avoiding future problems and moving...

A Great Way to do Presenters

Benoît Quenaudon

The Cash App Android app uses presenters because they’re easy to write, easy to review, and result in boring code that just works. In this post I’ll show how we...

Making iOS Accessibility Testing Easy

Nick Entin

Unit tests are great for testing business logic, snapshot tests make sure your views look correct, and UI tests help to ensure everything fits together properly. How do you test...

App-Layer Encryption in AWS

Dino Dai Zovi Yoav Amit and Yan Ivnitskiy

Encrypting application data has traditionally been complicated. It runs the risks of being done incorrectly, not being more secure, negatively impacting performance or availability, and even losing access to data....

Brief History of Logquacious

Gerald Kaszuba

Logquacious (lq) is an open source, fast, and simple log viewer written at Cash App. It supports reading structured log entries directly from an Elasticsearch log store. It is available...

Improving Animations on iOS with Stagehand

Nick Entin

Adding animations to your app turns a fairly routine interaction into a more enjoyable, exciting experience. These animations make a straightforward design into something that feels polished and professional.

Wire 3: gRPC meets Kotlin

Benoît Quenaudon

Wire is our open source implementation of Protocol Buffers. Today’s release supports Kotlin, gRPC, and Gradle.

Tuning Elasticsearch Index Settings for Logs

Yunchi Luo

Indexing logs in Elasticsearch is resource intensive, and a poorly configured log configuration can make for brutally slow log queries. There are surprisingly few guides on how to address the...

OkHttp 4 Goes Kotlin

Jesse Wilson

Today’s release changes everything and nothing. Everything? OkHttp is an HTTP client for Java and Android. Until today the library itself was all Java. With version 4 we’ve switched to...

OkHttp 3.13 Requires Android 5+

Jesse Wilson

Today we’re releasing OkHttp 3.13. With this update we’re bumping the project’s requirements from this: Android 2.3+ / API 9+ (released December 2010) Java 7+ (released July 2011) to this:...

Announcing SQLDelight 1.0

Alec Strong

SQLDelight started as a project 4 years ago on the ContentValues and SQLiteOpenHelper APIs from Android with the goal of making writing SQL easy and safe. The library was an...

Operating Vitess

Michael Pawliszyn

It has been quite the challenge bringing Vitess online over our existing MySQL database, then sharding and operating it at greater scale over time. Individuals love using the Cash App,...

KotlinPoet 1.0 is here!

Egor Andreevich

KotlinPoet is a collection of Kotlin API that makes generating .kt files easy. It’s inspired by JavaPoet, a Java code generation library, which powers a number of widely used frameworks, such...

Shard Splits with Consistent Snapshots

Andrés Taylor

At Square, we have a lot of data being inserted into our databases. To make it possible for MySQL to handle the load, we shard the data using Vitess. Because...

Cross-Shard Queries & Lookup Tables

Aaron Young

Sharding Cash’s database with Vitess was a massive undertaking that set us up for the future, but it was just the start of the journey. The sheer rate of growth...

Abstracting Sharding with Vitess and Distributed Deadlocks

Mike Gershunovsky

One of the main reasons Vitess was such a success for Cash App is that it abstracts database sharding away from the application code. This allowed us to shard our...

Remodeling Cash App Payments

Jesse Wilson

Before we could partition our database we needed to prepare our data model. Here’s how we turned a simple normalized data model into one that could be partitioned for scale....

Sharding Cash

Jon Tirsén

As we approach the end of 2018, we’re celebrating the anniversary of the first shard split for Cash App with a series of blog posts explaining how we used Vitess...