How We Build
Project Roomba
The underlying storage engine that powers Trello’s data environment was unhealthy and sluggish, so we invested time into fixing it with the hope that our future selves could then focus on the data and the people who need it. So far it’s working (for example, we reduced the overall data size by 62%), but it […]
Why we chose Kafka for the Trello socket architecture
Trello has been using RabbitMQ for the last three years. Prior to RabbitMQ, we were relying on a Redis Pub-Sub implementation. Recently, due to RabbitMQ’s questionable behavior when network partitions occur, we’ve made the switch over to Kafka. This blog post goes into depth on our RabbitMQ implementation, why we chose Kafka, and the Kafka-based […]
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 […]
Introducing Jira Cloud for Hangouts Chat
Countless teams in the workplace today use Hangouts Chat, an intelligent and secure collaboration tool in G Suite built to bring teams together for direct and group messaging. Enabling teams to deliver value to their customers faster by releasing earlier, more often, and more iteratively is what we’re all about, which is why we’re jazzed […]
How Trello helped us reinvent our approach to individual growth
Over the last few years, Atlassian has grown from a few hundred to a few thousand Atlassians globally. This kind of growth impacts everyone in the organization, but the People Team – who manage the ins and outs of employee experience – has a unique relationship to it. As we’ve grown, one of the ways […]
Think outside the red box
Have you ever returned to work in the morning and found a couple of Trello boards with this lovely cryptic red box? “You have been disconnected from the Trello Server for too long.” – wait, what? Over the Christmas / New Years break we deployed some changes to reduce how frequently this frustrating message appears. […]
Kotlin at Trello
This post is intended to be a sequel to the Talking Kotlin podcast episode that featured Huyen Tue Dao and me. We recorded it in May 2017. If you haven’t given it a listen, go check it out! A quick recap from the conversation: We started using Kotlin in October of 2016, right around when Kotlin 1.0.4 was announced. […]
DesignOps: Unleashing the potential of our design studio
When your company grows, the demands placed on your design organization fundamentally change – there are more moving parts, and the systems and processes that used to work when the entire design team could sit in the same conference room start to break down. It’s an ongoing challenge, so we thought we’d share how we’re […]
Developing the Unsplash-Trello integration
For the past few months we’ve been working on bringing Unsplash into Trello. Check out Trello’s blog post announcing the launch if you missed it! It was a great experience because Unsplash is really cool and we knew our users would love it (I know WE do ❤️). It was also a great experience because we followed […]
A bug we found in node.js 7
tl;dr: Don’t use Node 7 until this PR is released. Background We’ve been working for quite some time to try and transition the Trello Server codebase to Node v7. Initially this was prevented by our quite old version of Mongoose, which got slower (by about 20%) when upgrading. After working through this and fixing a few more […]
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 […]
Lessons from internationalizing Trello, part I: plurals on iOS
On page 52 of my copy of K&R, in a discussion of the ?: operator, is this line of code: printf(“You have %d item%s.n”, n, n==1 ? “” : “s”); And thus began my decades-long proliferation of plural-unfriendly strings. I would later learn that not all languages base pluralization on whether the relevant number is one or not. […]
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 […]
