Burst

Burst your filter bubble

Could you introduce your app in a few sentences?

Burst is a side project I’ve been working on in my spare time. It’s an app for reddit designed to address the issue of filter bubbles. Filter bubbles are the side effect of services tailoring the content you see based on your preferences and behaviour. The problem is that this becomes a feedback loop, to the point where you only see a small subset of what’s actually going on in the world – you effectively live in your own little bubble. Burst fixes this by showing comments from all subreddits that are talking about a particular link, so you see neutral, liberal, conservative, and all kinds of other points of views together.

Burst is out now for iOS, with an Android release coming later in the year.

What made you decide to use/switch to React Native?

I’m a designer by day, but I do have some web development experience. I’d always wanted to develop a mobile app but the learning curve always felt like a barrier, especially since I’d have to learn two separate platforms to release for iOS and Android.

I’m pretty comfortable with JavaScript, so when I saw React Native it seemed like the perfect platform for me.

How did you transition to React Native?

Before I started with React Native, I’d never even used React before. My first project was Beetroot Radio. For that, I started with the web app so that I could get comfortable with React by itself. Something about React really resonates with me, so I found it super easy to get my head around and just make stuff. Once that was in good shape and I felt comfortable, I started with React Native for iOS. This was pretty early on, so I had to wait a few months for React Native to be made available publically for Android.

It was certainly a bit rocky to start with, but over the last year or so the platform and tools have really matured.

Have your tried other cross platform technologies before using React Native?

I’ve not developed with them, but I have worked on projects as a designer where the app was built as a web app inside a wrapper. The biggest issue I have with that approach is that you have a mismatch of user expectations versus what they actually get. If users expect a native app and get a web app, they’re going to be pretty disappointed. Likewise if users expect to be able to do something on the web, but are forced to download an app, they’re going to be annoyed. There are upsides to native apps and web apps – I think you should embrace the platform you’re delivering to.

What has your experience been working with React Native in terms of app performance, have you noticed any impacts?

For most applications I think performance is great out of the box. I didn’t make it easy for myself with Burst though. Rather than wait for the user to take an action, Burst proactively fetches comments while the user is scrolling through their feed. The upside is that when the user pauses for a couple of seconds to read the title of a post, chances are good that Burst is already done fetching comments and that whole process is hidden from the user. For the majority of cases, it works out to be a really great, seamless experience. The trouble comes if the user gets ahead of comment fetching or tries to interact while these big chunks of data are being manipulated and moved around.

To get around this, I made pretty heavy use of InteractionManager.runAfterInteractions, and I opted to perform data fetches using a native module so that I could manipulate large data sets in a background thread instead of in JavaScript. It took a bit of tweaking and optimising, but in the end I was able to deliver what I’d come up with while designing the product.

How has adopting React Native affected developer productivity?

Something about React really makes sense to me, so I find that I can write code much faster. I can spend time thinking about the problems I’m trying to solve, not about how I’m going to wrangle the library to do what I want.

Which tools, libraries and frameworks are part of your development process with React Native?

I don’t really have any special tools or anything like that. I use Atom as my code editor, and just the Chrome debugging tools. I’d like to dig a bit deeper and learn more about using Chrome to debug for performance, but that’s not something I’ve really gotten into yet.

I’ve used React Native Navigation for a couple of projects now and have found it’s the best navigation solution for my needs.

What resources have you used to learn React Native? Books, tutorials, courses etc. Anything you can recommend?

For the most part, I’ve found the documentation to be really helpful. The biggest gap for me has been with navigation options and just getting a firm understanding of how the animations system works. For navigation, I ended up going around in circles with different native and JavaScript solutions before landing on React Native Navigation. For anything else, I’ve found that there are enough people using React Native now that I can google my way out of anything I don’t quite understand. That and just experimenting! I like to learn by doing, and I’ve found React Native is great for that.

What are some things that you don’t like about React Native or that need to be improved?

I wish React Native had a better out-of-the-box navigation solution. I don’t feel like that’s an area that’s really been cracked yet, but React Native Navigation comes the closest. I’d like to see something like that officially supported that I know will feel native for both iOS and Android, and allow me to take advantage of the strengths of both platforms rather than a one size fits all solution across both.

I’ve also been blocked from releasing the Android version of Burst because of a lack of support of overflow: visible. That’d be nice to have :P

Anything else you would like to mention?

Give Burst a try and let me know what you think! I’m on Twitter if you have feedback (good and bad) or if you have any questions for me – @burstapp_.

If animation with React Native is doing your head in, check out my medium post outlining the techniques I used for Burst.

And lastly – even if Burst isn’t for you, I hope you’ll take some time to think about whether or not you might be limiting yourself by being stuck in a filter bubble. If you're frustrated with the "other side" of politics, do yourself a favour and spend some time listening to people you disagree with. You don’t have to agree, but understanding is half the battle.