Chris Basham

Reactive programming

In 2013, I started experimenting with the AngularJS framework for building functional prototypes, such as new interfaces for students viewing their billing information, searching for courses, and registering for classes. Each proof-of-concept built on the last, teaching me about REST APIs, minification, version control (git and GitHub), accessibility (WAI-ARIA), build systems (Grunt, gulp.js, and webpack), NoSQL databases (Firebase), and responsive design.

From 2014 to 2016, I studied CSS, trying to determine best practices for using CSS units, integrating media queries, organizing project files, and setting style naming conventions.

With experience in all these front-end fundamentals, I shifted away from the AngularJS framework, so I could experiment with different combinations of rendering libraries and data flow architectures. The teams I worked with at Indiana University quickly adopted the React rendering library, given the straightforward API and growing community adoption. For a couple products developed in 2015, we paired React with a simplified implementation of the Flux data flow pattern, called Reflux. In practice, Reflux failed to scale well with complex applications, and I continued my exploration.

Inspired by the Cycle.js framework, I started learning the RxJS reactive library. After integrating it into a number of experiments and products in 2016, I was convinced this tool was flexible and low-level enough to power any data flow architecture, without going stale.

In 2017, I abstracted what I learned into a library called Conduit. It is primarily a set of patterns to help develop reactive, functional user interfaces. It is also a set of utilities to simplify things a front-end developer may do with RxJS (conduit-rxjs), including how to connect RxJS streams to rendering libraries (conduit-rxjs-react). Indiana University has used Conduit in a number of products, and as of 2019, it is now publicly released.