How to release a buggy app (and live to tell the tale)
Bugs! No matter how many times I decree that my coworkers and I must stop writing bugs, we keep on doing it anyways. Even worse, sometimes those bugs make it into production, where users run into them! The fact of the matter is, you are going to someday release a buggy app. Even with layers of […]
Displaying sync state
Early on, we realized that we needed some way to communicate to the user when data isn’t synced with the server yet. Otherwise, you could end up in a frustrating situation where you see a card you created on your device, but no one else can see it and you don’t know why. Design The […]
Sync is a two-way street
Most of what I’ve written so far has been about uploading changes from the client to the server. But we found it is equally important to download changes from the server periodically, too. What use is offline mode when you aren’t viewing fresh data? How can you share perspective with someone if you only ever push data and never pull? To that end, we also […]
Offline attachments
When writing offline mode, attachments proved to be a uniquely difficult aspect of syncing. The nature of attachments differ from other data in Trello. Most data in Trello are simple numbers and strings. Files are an entirely different beast; they’re large and unwieldy. File permissions On Android, when a file is shared with your app, […]
The two ID problem
I want to call out a surprisingly tricky problem we ran into when developing offline mode: handling identifiers. In Trello, all models have an ID. Each board, list, card, etc. It’s how we define relationships between models as well as how we communicate with the server about them. When you’re online-only, you can depend on […]
Sync failure handling
In the last article we discussed how we sync our changes with the server. Ideally, those HTTP requests would always work – if only we could walk the rosy path of best-case scenarios! Unfortunately, when it comes to network requests, all sorts of madness can occur. It’s best to bake madness-handling systems into your code instead of […]
Syncing changes
Going offline meant using our database for all immediate changes to the client. But obviously we later want to sync those changes with the server. The basic idea behind our sync is to store changes made offline as a series of deltas that are later uploaded to the server. In this post I’m going to […]
Airplane mode: enabling Trello mobile offline
Good news, everyone! The Trello mobile apps now work offline! Offline mode has been the most requested mobile feature for years. It’s frustrating to lose the ability to use Trello when you enter the subway or you’re flying on a plane. Even more importantly, using Trello in an area with poor cell coverage resulted in […]
Trello Android schema upgrades
For many years, Trello Android has used a simple system for upgrading the database schema: drop the entire database, recreate it, and repopulate the data from the server! While far from ideal, this solution worked because the Trello server was the only source of truth. Any change you made in the app was immediately transmitted […]
Lessons learned from our first Gradle plugin for Android, Victor
The Android team at Trello is happy to announce our first open source Android library, Victor! It’s a Gradle plugin that lets you use SVGs as resources in your Android apps. Victor started as a request from our designers. They were regularly creating vector icons that they would later convert to PNG for Android. Could we […]
Join over 150,000 working professionals
Culture, tech, teams, tips, delivered twice a month
