Recording Quick Screencasts on Android

When I’m testing mobile apps, I often create quick screencasts to accompany my bug reports. Screencasts are especially useful for capturing issues that aren’t visible in a static screenshot and for demonstrating the exact steps to reproduce the issue. I try to keep them as short as possible for easy viewing.

Lately, I’ve been using Android Debug Bridge (adb) for these screencasts on my Android test devices. With adb, you can create a screencast on the command line — no need to install any apps on the device or deal with convoluted steps to transfer the files. It also means I don’t have to open up Android Studio just to record my device. Quick and easy!

To get started:

  1. Make sure you have the Android SDK Platform-Tools package installed on your computer. You can install this package from the Android Studio SDK Manager or download the standalone SDK Platform-Tools package.
  2. On your Android device, go to Settings > System > About phone and tap Build Number seven times. This enables Developer options which you’ll now see under Settings > System. From there, you can enable USB debugging.

Once you have that setup done, connect your device to your computer via USB. You should get a prompt to allow USB debugging; you can set your device to always allow it from your computer, or choose to get that prompt each time you connect your device.

Now, recording a screencast is just four easy steps:

  1. On the command line, run adb devices. This isn’t strictly required, but I do it to make sure my test device is connected and authorized for USB debugging.
  2. Then, start the recording with adb shell screenrecord /sdcard/screencast.mp4 (specifying your desired directory/filename). The maximum recording time is 3 minutes.
  3. Stop the recording with Control + C (Command + C on Mac).
  4. Move the recording from your device to your computer with adb pull /sdcard/screencast.mp4. You can also specify a local destination for the recording, e.g. adb pull /sdcard/screencast.mp4 ~/Downloads/screencast.mp4.

That’s it! Your screencast is now available on your computer for you to handle however you need. You can also check out the adb documentation for more screen recording options and other useful actions you can take with adb.

Do you have any favorite tools for creating, editing, or sharing screencasts, especially on mobile devices? I’m always open to trying out something new!

Simplenote is Back! — Simplenote

When some of my teammates starting developing Simplenote again last year, one of my tasks was to pick up beta testing for it. I can’t give it the testing attention it deserves at this point (there are only so many hours in a day, and we have other apps to test!) which is why I really appreciate our community of users and beta testers who send in feedback — if you’d like to join in, there are links in the post below to our Android and iOS beta programs.

After a short hiatus, Simplenote is actively being developed again! We’ve been busy cleaning up the user interface, bringing old code up to date behind the scenes, and fixing some long-standing bugs. Check out the recent release notes below. Android Added search sorting by date created, date modified, and alphabetically with search history and suggestions. […]

Simplenote is Back! — Simplenote

Demystifying Bug Triage

I adapted this post from an internal guide I made for one of our teams. My goal was to demystify bug triage, lay out the basic hows and whys, and get buy-in from the team. I wanted everyone to feel comfortable triaging the issues reported in the team’s GitHub repositories (or other bug trackers).

The term “triage” comes from medicine, where it’s the process of determining the order in which patients will receive treatment based on the severity and urgency of their medical condition. At Automattic we apply the term “triage” to the processes we use to determine the severity and urgency of bug reports (and the potential positive impact of enhancement requests) so we can prioritize open issues. In other words, it’s how we keep our GitHub repos organized and make sure we can identify the next most important thing to work on.

How to Triage

What processes do we use for triage? Triage is primarily the initial review and prioritization of all new issues as they are opened in GitHub:

  • Add a label identifying the topic, feature, or epic related to the issue.
  • Add a label identifying the type of issue (e.g. bug or enhancement).
  • Add a label identifying the priority, if it’s clearly a high or low priority issue.
  • Check the issue to see if it’s missing any critical information, such as steps to reproduce or the device or app version where the bug occurs.
  • Add the issue to relevant projects or milestones for followup. If it’s a critical/blocking bug, escalate the issue in other ways, such as a direct ping to a team member.
  • Especially important when someone outside the team opened the issue: leave a comment to acknowledge the contribution and set expectations for followup.

I also use the term “triage” as an umbrella term for all the processes we use to review issues, and this includes reviewing all open GitHub issues on a regular basis:

  • Make sure that open issues are still valid and complete.
  • Look for trends, e.g. a group of issues related to a specific feature or component.
  • Re-prioritize issues when team goals and priorities change, or in response to trends you identified.

The exact timing for triaging new issues and reviewing existing issues depends on the team and project. If you’re just getting started, I’d suggest triaging new issues at least once per week and reviewing existing issues at least once per quarter (or whenever there’s a larger conversation about what to work on next).

Why to Triage

Why do these processes matter? They make it easier to:

  • Identify related issues that can be fixed at the same time, that show a potential weakness in a particular part of the app, or that point to a potential longer-term project.
  • Gauge the health of the app, in terms of number of issues and their severity.
  • Prioritize issues for regular maintenance.
  • Respond to all reports, especially from external contributors and reporters, to make sure nothing falls through the cracks.

Get Started

If you’re new to triage, here are some next steps you can take to get yourself and your team started:

  1. Agree on a consistent set of labels and what they’ll be used for. If you’re using GitHub, there is a set of default labels you can start with — but most important is to think of what’s useful for your team and how you work.
  2. Set up any projects or milestones you have or are planning to use to organize your work.
  3. Review all open issues (add labels, assign priority, check for completeness, etc.).
  4. Practice labeling new issues with appropriate topic, type, and priority labels. Hold yourself and your team accountable for doing this on all new issues you open.
  5. Identify a triage DRI (“Directly Responsible Individual”) and set a cadence for triaging new issues and reviewing existing issues going forward.

As with any work, be prepared to reflect and iterate on your processes. So far this approach has worked well for me and the teams I work with, but you may need to add or subtract steps to make it fit the way you work.

What do you think? Are your teams already doing this kind of triage? Are there any other steps or processes that you use to keep open issues organized and prioritized?

Right-to-Left Testing in Mobile Apps

Did you know that both iOS and Android have easy ways to build your apps for localization testing?

As someone who loves languages, I’m used to just switching a test device into another language for testing and dogfooding over a longer period of time. But even I get a little scared that one day I’m going to switch my iPhone’s device language to Arabic and never find my way back to the language settings. And for teammates who don’t speak another language, it can be even more intimidating. Here’s where iOS and Android come to the rescue with build options for localization testing.

Screenshot of WordPress for iOS app with RTL pseudolanguage displaying backwards English text.
RTL Pseudolanguage on iOS

In Xcode you can select a pseudolanguage in your build scheme. For regular localization testing you can choose Double-Length Pseudolanguage to see how your app works in languages with longer strings. (My teammate Eduardo also suggests using the iOS text size settings as another way to test this on the fly.) But for RTL testing it’s especially handy — choose either Right-to-Left Pseudolanguage to get an RTL layout with regular English strings or Right-to-Left Pseudolanguage with Right-to-Left Strings to see the English strings backwards in the RTL layout. Build your app and you can test out the RTL experience, no language classes required!

For Android, you can enable pseudolocales in your build.gradle file. Then, on your device or emulator, go to the device language settings and select English (XA) or Arabic (XB). (If you don’t see those languages, make sure developer options are enabled.) The first language gives you lengthened strings and all kinds of exciting accented characters, but the second is where RTL testing kicks in — you get English strings backward with an RTL layout.

Now, off to file some GitHub issues for the localization bugs I just noticed … 😉