Canvas Teacher

Save time and use Canvas more efficiently from your mobile device with Canvas Teacher.

Could you introduce your app in a few sentences?

Canvas Teacher is an app for teachers that use Canvas. Canvas is a Learning Management System that’s used throughout the world. The Teacher app let’s teachers communicate with students, edit assignments and other coursework, and grade student assignments. Canvas is made by our company, Instructure, Inc. Currently, the Teacher app is for iOS and Android, but the React Native version of the app is only available on iOS.

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

We decided to use it for the following reasons:

  • Better collaboration with teams at Instructure
  • Faster development cycle
  • Unhappiness with Apple tools
  • React is amazing

I will note Artsy moving to RN was one of the main reasons I considered it. I’d followed them for years. Just in general because they were such a big name in the community, and had some heavy hitters. So yeah, naturally I followed them because they document what they are doing so well. I once talked to @orta on a podcast. They are super friendly and almost always willing to chat. When they made the switch to RN I was like “Oh, now I can take this seriously.

I also wrote this a while ago.

How did you transition to React Native?

We started a new project and built it from the ground up with React Native.
We also pulled in two React developers to help build the basic architecture of the new app. Since then we have used some of our React components in other apps.

The transition was great for most of us. There was a feeling though that things are so loose in the JavaScript world. With Apple, you do it their way. With RN, you have the entire JavaScript community and ecosystem at your disposal. And that can be a little overwhelming for some people; developer experience in general is better for us.

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

I tried a PhoneGap variant back in the iPhone 2 days and it was horrible. I wrote it off. Performance was bad because of the html rendering. It obviously wasn’t native views and native navigation. It felt like a massive hack to me.
It’s what made me apprehensive about using RN.

However, after using RN for about a day I was convinced that it was vastly superior to other cross-platform frameworks. RN is better because it renders using native views and it uses React, which is wonderful. It feels like a legit abstraction that has good performance and offers a solid alternative way to build UI.

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

So far performance has been excellent. We ran into one issue with large data sets but in general it’s been very amazing. The fact that business logic happens in JavaScript and layout happens on a background thread, the chances of locking up the UI thread are very low.

How has adopting React Native affected developer productivity?

It has provided a much needed boost in developer productivity.
From Hot Reloading to no compile times, the speed at which we can see changes reflected in our projects is amazing. Our oldest app contains a good portion of Swift and Obj-C code. A clean build could take up to 30 minutes.

As for happiness: Initially it was great but that was because:

  • new cool tools
  • brand new project

Over time, the brand new project excitement fades because the app gets really big but otherwise, very happy on many accounts. We even convinced some JavaScript hates that modern JavaScript is awesome.

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

Almost all of us use VSCode for our editor. It’s so amazing the main library we use for our app is Redux which as you know is quite popular in the JS world. I mean, we use tons of other libraries but they are all little things
ohhh, also we use Flow ESLint and danger.

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

We mainly used the RN documentation and relied on our teammates who were React devs. React is so easy.

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

There is one thing that needs to be improved. Navigation has not been solved
and it’s terrible. We had to build our our navigation framework because nothing else worked for us.

Anything else you would like to mention?

I think all native devs, regardless of experience, should at least give it a try. I believe that the React paradigm for building UIs is vastly superior to anything else out there. It’s simple to understand and it's powerful.