What it is
While the idea of Virtual Coach has always been in Gautham’s mind since the inception of jnaapti, a startup does not have the luxury to build the entire vision and then launch. Rather, we have to start building the minimum set of features which we can validate with our users and then iterate frequently and let usage and metrics drive the product’s evolution. Jnaapti has been doing this ever since the launch of the first version of the product.
The vision of “Virtual Coach” is to eventually replace a human coach with a “Virtual” coach but in such a way that the learner does not even realize that he/she is being coached by a virtual entity. It follows the Turing test for Artificial Intelligence, but applies to learning and coaching. While we have started with software technology training, we intend to build a generic platform that has the ability to teach anything (any skill) to anyone (no bias) starting from anywhere (irrespective of what they know today).
The problem that keeps us awake at night is, “How do we scale good quality coaching so that it reaches the maximum number of people?”
The initial idea of the training process was tested out using Email as a form of communication between the learners and the coach. As Gautham coached people, he carefully noted down the pains of using Email as the medium of communication. Learners, especially students, didn’t follow email etiquette. So while Gautham was busy downloading the attachment from the solution email, and composing his review, students would send new emails asking him to discard the old solution and consider this new one. The requirements for the first version of the product was to replace Email as the mode of communication and have the interaction around an activity grouped under a single context.
Version 1 – 2011
The first version of the product was called the “Jnaapti Virtual Learning Environment”, later renamed to “Virtual Coach”.
Version 2 – 2012-13
While the Version 1 worked, Gautham had to manually add new activities to the learners’ dashboard. There were several situations where students posted at night and had to wait until next morning to receive their new set of activities.
Gautham then built the skill engine to handle the shortest path to learning any skill. This conceptualization to connect any technology to any other technology took almost 2 months of intense effort. The final result was worth the effort!
The skill engine has the ability to answer questions like, “If a person knows how to build applications using AngularJS and now needs to learn React, what’s the shortest path to learn those skills?” or “Here is a person who knows MongoDB and wants to learn Cassandra. What skills should he learn that he doesn’t already know.”
Gautham rewrote the application to be a single page responsive application using mostly jQuery and jQuery plugins. Our development environment was built on KVM which tried to mimic the production environment. We also had an early prototype of a user lab for various technologies which was built using LXC. We have been using containers in production far before Docker even became a phenomenon!
It was at this moment that Radhakrishna (first engineer after Gautham) joined Jnaapti. Together Gautham and Radhakrishna achieved quite a bit!
We were approached by a large services organization to provide training to 5000 of their new hires in parallel. Their requirement was to provide some simple content in the form of slides and provide the learners with activities and auto-evaluate their submissions. We demoed the Virtual Coach and they were blown away. Our solution was way beyond what they could even comprehend. It was an awesome blend of cloud technologies, container technologies and client side technologies all packaged in a neat way to solve real challenges in large scale training. We even built an experimental version of teaching how to use Desktop technologies like Eclipse without requiring any lab setup and showing the use of the technology step by step! We sometimes have to push the technology to its limit. 🙂
Version 3 – 2014-15
At this moment we could see the pains of growing the codebase of a single page application, so we decided to rewrite it in AngularJS. The v3 release brought in quite a new features. While the client was rewritten to use AngularJS, we moved the database layer to MongoDB. The use of MongoDB made schema changes more flexible and it was better aligned with our needs. We also started using Docker heavily in our product. The first thing to move to Docker was our user containers (lab). Then our entire production setup followed and finally our development environments also moved to Docker. We also built a container manager to load balance our user containers. We started using NodeJS in the server, Bower for client-side components and Grunt as our task runner.
Version 4 – 2016-17
We did another major migration (v4) in 2016. The v4 migration was to move from AngularJS to React. The main issue with AngularJS was its performance and the inability to support composite directives. Also, with Angular2 not yet stable and Angular1’s future uncertain, we were evaluating a different technology which suited our needs. React fit well with the component based architecture that we were soughting and we think we have made a wise choice!
We made our container manager more scalable and we now have the ability to scale to thousands of user containers in parallel. We also built automatic code evaluation capabilities in our product, which has been one of our most used features ever since. We have the support for over 15 technologies and counting.
With the move to React, came a few more changes in the client side. We started embracing ES6 (Babel as the transpiler) and used Webpack as our bundler. We did run into (and still run into) quite a few inconsistency issues with modules, but things are getting better. We are in the process of moving the codebase to Webpack2 and use HMR during development.
Challenges – The Road Ahead
Here are some areas that excites us:
- Content management, contextualization and delivery – how do you build a content repository that knows the context of the person assimilating the content?
- Learning patterns, interactive learning and training – how does information convert to knowledge? Considering the diverse background of individuals how do we still make learning effective and fast? What is the role of a coach in the learning process?
- Innovation in online applications – is there a better way to teach than the medium that we use today (browsers, mobile applications etc)? Is this the best medium to teach “anything”?
- Code analysis, metaprogramming and testing – what’s the fastest way to teach something? What is the best way to know what the learner understood and what he/she doesn’t?