Marvin – Personalized and Smart Virtual Assistant

Over the last two years, I’ve been buying into Internet of Things (IoT) devices. While the devices themselves may be smart, they do not make a smart home.  In comes Marvin.  Unlike many who have gone for Jarvis as a name, I chose the name Marvin from Hitchhiker’s Guild to the Galaxy. Marvin has a brain the size of a planet, which is fitting considering the information it will be processing.

Brain the size of a planet

Like many of today’s smart home / IoT devices, Marvin will be reactive.  What makes Marvin stand out and the reason for his name is that he will also consume data from sources beyond my home.  The data would be used to make predictive choices, in term making it proactive.  I will storing, parsing, and aggregating data from various sources including personal accounts (email, calendar, etc), financial accounts, various personal sensors, environmental information, and of course IoT devices.

While there may be some information overload at first, everything will be distilled down into various views and aggregations. Like any other BI system that I’ve put up in the past, my goal will be to create actionable data.  Actionable data is more than just data being visualized, they are metrics that can be used to inflict change and improvement, in this case triggers. The data will be used for anything from controlling IoT devices to answering questions based on my data.

For example, Marvin may know that each morning I get up, have a shower, read some news, and have a coffee. In that small routine, there lights being turned on, information is being viewed, and some devices being turned on. It may take time to code each aspect of that routine so that it is automated. But then, what happens if you have the day off work? You forget to turn off the automation, things don’t work out so well do they? Marvin having access to my schedule knows that rather than getting up at 6AM, I am now getting up at 9AM, therefore he chooses to instead use my weekend routine which has a few extra or different steps.

A natural advisor

The wealth of information is intended to help me on a day to day basis, beyond controlling devices at home. Although Marvin will live and interact on the web, it’s integration is intended to feel natural.  I would be interacting with it while at home or on the go.  While on the go, it would have to be through a device, like my phone.  At home, it can be a mixture of phones, tablets, or microphones.

While the idea of talking to a virtual assistant is exciting, initially the focus would be on pulling data, integrating devices and making it feel like a single platform. Data availability within the platform and using to answer questions or orchestrate devices would compliment the lives of those using Marvin, rather than feel like an app. For example: while I am out shopping, I am considering whether to buy the latest gadget, I’d simply pull up Marvin to see whether I have any budget for this snazzy new gadget. It would tell me that can buy it in 3 months. I’d throw a hissy fit, and then realize the answer it gave me in seconds would have taken me minutes or hours to figure out.

Natural interactions, like voice recognition and natural typing isn’t intended to be the initial focus.  While building out the framework, the ground work will be laid out to support these natural interactions.  Similar to what we have seen Mark Zuckerberg create in his home. Marvin will need to be as useful on the go as it is useful at home.  Even Mark has admitted that he interacts with Jarvis more while he is outside of his home than while he is at home.  However, Marvin, unlike Jarvis, is more of an assistant.

Over time, the goal will be to have Marvin be more of a part of my life.  In order for it to be a part of my life and those around me, it needs to feel natural.

Laying out the groundwork

Building Marvin will be challenging. I will need to learn new languages, use frameworks I am unfamiliar with, and try to find ways to gather data from sources that may not have APIs. Not only that, I need to be forward thinking. I am trying to build this in a way that will allow me to continue development in the years to come.  The framework will need to be built in a way to support independent micro-services that could be easily swapped out and coded in any language. Simplifying the deployment process will be a challenge, as it couldn’t run entirely as a web app. Certain aspects, like communications and notifications may have to be handled through a native application.

Because data will be the primary driver and I don’t anticipate a large amount of rights, the likely stack will be a mix of MongoDB and Hadoop. Due to its popularity, community support, and a wealth of libraries, I expect to develop the framework in Node.js.  I expect micro-services to run in Node.js, Python, C++, and Java.

I find myself taking the same approach as I would on any build I would design at work. I’ve put in hours on the architecture, drawing up sketches on my pseudo whiteboard and figuring out how it will all scale. I never thought I would be creating wireframes for a personal project!

I suppose time will tell whether this will remain a personal project.