Featurist were chosen by IMD to rebuild their mobile and web platforms for delivery of high quality business course material between October 2013 - April 2015.
Our work at IMD has covered the full spectrum of product development, from sharp user experiences to flexible server infrastructure.
IMD are the experts in developing global leaders through high-impact executive education. By combining online collaborative learning they are able to deliver a unique, personalised learning experience to business leaders.
IMD approached Featurist to build the next generation of learning apps to further enhance their learning platform. IMD had already innovated in producing an iPad app that allowed delegates to view course material and interact with other participants. Featurist were able to help IMD enhance this experience by adding support for a wider variety of course material such as videos, questionnaires and forums, and allowing participants to do this on the web or iPad in their own time or on IMD campuses. Furthermore, Featurist helped IMD improve the process of building and running online courses, in particular by making it easier to repurpose previously created coursework. Featurist also introduced a publishing workflow to allow IMD to create, edit and preview coursework without impacting currently published courses.
Featurist converted an iOS iPad app, principally developed in Objective-C, into a hybrid app using AngularJS and CouchDB - this allowed us to quickly iterate on UI improvements and simultaneously port the application to the web, an added benefit was that we were able to more easily write and maintain automated tests for the web-based user interfaces and release more frequently. We wrote a web API in C# that helped us to integrate with their legacy learning portal, using automated tests that ensured that the API behaved in accordance with the content found in the database.
One of the primary issues IMD had to solve was to be able to preview new and modified course material ahead of it being published to students, something they were previously unable to do. To solve this, Featurist developed a new course editing platform that used Git as a content store, allowing us to publish one version while working on and previewing another. We could import content from their legacy learning portal that had been curated for historical courses. Content editors could then view and edit content, preview or publish it for students. We used CouchDB to help replicate content from the web site to iPad clients. The UI for the editor was built using Plastiq (now known as hyperdom. The server was built using Node JS and we leaned heavily on node-libgit and PouchDB.
For deployment into their on-premises data centre we used linux nodes running docker and scripts using the docker API to automate the deployment.
During the course of the development Featurist developed cutting edge methods of testing single page applications. Performance limitations in AngularJS meant that we had to develop parts of the application using regular jQuery methods and this made it impossible to write fast UI tests that assumed an AngularJS architecture of controllers and dependency injection. For this reason we developed technology that emulated user behaviour and asserted that the UI and API responded accordingly, regardless of framework. This technology was subsequently refined and eventually evolved into what we use today as Browser Monkey.
Another problem we solved at IMD was for testing the SQL queries we wrote when interacting with their legacy database. A large part of the problem was in setting up enough scenarios to adequately test the queries, and for this, inserting large models with complex foreign key relationships into the database before the queries were run. We did this by building Sworm, which allowed us to specify the models as maintainable object graphs in Node JS, and then save them to the database with their relationships intact. Sworm has continued to help us with our clients since then and has adapters for Microsoft SQL Server, Oracle, Postgres, SQLite and MySQL.