Reduce Your App’s Edge Cases With Time Travel

When you’re mapping out your 100th possible user flow, or you’re filing bug report number 10,000 for yet another edge case nobody thought of testing, you’re not alone. What you need is Time Travel.

For some apps, the number of possible interactions by users is nearly infinite. If you’ve ever designed a product configurator or e-commerce site, you know what I’m talking about. Multiply the number of available colors, by the number of available sizes, by the number of products, available in how many countries? If the resulting number makes you want to pull your hair out, this article is for you.

For really dynamic apps, there comes a point, when it becomes impractical to test every possible combination of user interactions. When that happens, we have to think differently about how we manage the state of our applications. Introducing Redux, by Dan Abramov.

There are a ton of articles out there introducing Redux for developers. This article is more of an introduction to Redux from a business or product development perspective. If you want an introduction from a more technical perspective, may I suggest the original introduction video.

Redux allows us to manage the state of our applications in a sequence agnostic way. This means it doesn’t matter if your user selected Morocco first, then large, then green, or another way around. Your application lives in the present. This also means that you can change your country to Monaco, without affecting the rest of your order, or having to hit the dreaded back button.

Recording user interactions in a time-agnostic way, or “Time Travel,” opens up thousands of new possibilities for your application. You can now simply export and re-import a user session, and arrive exactly where you left off. You can “undo” previous actions in any order, without breaking your application. You can replay old session states to see exactly what happened.

Feel like you’ve fallen into the Tesseract? You can also generate unit tests from any session, or let a user share their session with support. Your developers can even set time travel up in their development environment, so they can develop new features without even refreshing the screen, or clicking through the app every… time… they… make… a… change…

The result is a lot of time saved in development and testing. In addition to saving time, you’ve built a robust application that can handle thousands of possible combinations of interactions, without having to worry about the sequence of those interactions. You’ve also dramatically reduced the possibility of edge case bugs.

Robby Emmert is a software consultant in Hong Kong. You can follow him on Medium, Twitter, or robbyemmert.com.