My Twilio Hackathon Successful Failure
Tags: twiliohackathon, javascript, serverless, kenticokontent
Published: 2020-05-03 19:56:30

This past April, I had the opportunity to participate in the Twilio x DEV community hackathon. Participants had the entire month of April to develop and submit your project. 

It's only the 3rd hackathon in which I've participated and my first, hopefully of many, virtual hackathons. Unfortunately, due to some unforeseen, non-project related, circumstances, I was unable to submit my project on time. 😢 This is the failure I'm speaking of in the title.

Wait, but you called it a "successful" failure. How can a failure be a success? Some of you may already understand what I mean by this, but for those who don't, please bear with me. Everything will become clear by the end. 

## The Project
I struggled a little with what should the project be, but with the help of a friend, [Ondrej Polesny](https://dev.to/ondrabus), the ifBored project was born. 

Throughout a person's life, there are times where one has nothing to do. Let's be honest though, there's always something to do. We just need a little help deciding what we should do 😉. That's where my project comes in.

When you are not sure what you should do next, text a number, visit a site on your phone, tablet, or computer, answer a few questions, and get a suggestion about what you should do next. Sounds simple, right!?

![High level diagram of the ifBored project](https://dev-to-uploads.s3.amazonaws.com/i/xk9sa0izyh033d6fxfvk.png)

## The Technology
I've spent most of my 13 professional years in software development working within the Microsoft stack, specifically using C# and Azure. 

I took the hackathon as an opportunity to step outside my comfort zone and work with some technologies and platforms I had very little experience with and had not worked with previously. This, by far, was the most challenging piece of the project.

Oh, and I also did the majority of it LIVE on my Twitch channel [Developers Garage](https://twitch.tv/developersgarage)!

I chose JavaScript because it's one of the top programming languages and one which I'm not as familiar with as I'd like to be. To me, JavaScript is like the wild west 🤠. The rules, if any, aren't clear and you don't find out about them, until after you've tried it.

![Cowboys riding and shooting guns animated GIF](https://media.giphy.com/media/JU4dLmUzKWgZgr2VkY/giphy.gif)

I also chose to use a serverless infrastructure, so I didn't have to setup, configure and manage a server environment. Plus, there are some great free options for serverless environments, which plays well with proof of concepts and hackathons. That's where Netlify comes in. [Netlify](https://www.netlify.com/) is an all-in-one platform to build, test and deploy your modern web applications.

For user interaction, I went with Twilio because it was part of the requirement and they're an amazing communications platform across the board. They also provide great documentation and software development kits (SDKs) for use with whatever framework you're working with. 

To store the questions and suggestions, I could have used text files with JSON in them, but I wanted to use a service which abstracted away the management and distribution of this data, as well as, provide a great experience. That is why I chose [Kentico Kontent](https://rebrand.ly/dgakontent), a content as a service platform providing all the benefits of a headless service platform.

_Full disclosure: I currently work as a developer evangelist for Kentico Kontent 😊_

When questions are asked and answers provided, we need to store this conversation. For conversation storage, I chose to use [Fauna](https://fauna.com/), a serverless, No SQL database featuring native GraphQL. The structureless nature of a No SQL database is very appealing to me because it allows the data structure to naturally evolve with the application.

In case you haven't realized it yet, there is a general theme in my choices of platforms and services, I'm using for the project. They all have a FREE tier meaning anyone can try, improve and contribute to this project without fear of having to spend any money.

For phase 1 of the project, a user texts our Twilio number, which calls the associated endpoint, a serverless function hosted on Netlify, which retrieves the conversation from Fauna, gets the first question and returns it to Twilio, which responds back to the user with the question. This same process continues, except stores the answers to the questions in the conversation in Fauna, until all questions have been answered. Once all questions have been answered, the system will suggest something to learn, or do, and provide a resource. 

Phase 1 works functionally, but is missing the decision making logic. So, it currently asks a few questions and returns the only suggestion it know.

For future phases, we will implement other platforms (web, voice, WhatsApp, etc.) to allow different users to interact with the service, as well as, implement the decision making logic 😜 and add the ability to submit new suggestions through a web interface.

## Conclusion
So, back to why I called this project a "successful failure". I learned SO much while working on this project and feel so good about the work accomplished. While I would have liked to have submitted my project into the hackathon, the ultimate goal was to learn something new and that is exactly what I did. This is why I called this project a "success".

![Boy giving thumbs up](https://media.giphy.com/media/XreQmk7ETCak0/giphy.gif)

I am much better, and more comfortable, with JavaScript and am more familiar with Netlify and how to host various services and applications on it. I am more comfortable using a NoSql database and how they're constructed. I also realize there is SO much more to learn and am excited to continue this project.

That's right, this project is far from done! It will continue to be done in the open and LIVE on my Twitch channel [Developers Garage](https://twitch.tv/developersgarage). The latest schedule for my streams are found on the channel, but be sure to like the channel by clicking the ♥ and turning on notifications to be notified the next time I go live.  Also, follow me on [Twitter](https://twitter.com/ryano9791) where I also post when I go live.

I can't do this alone, nor do I want to. This project wouldn't be where it is, if it wasn't for others in the development community. Thank you to those who joined the previous streams!

You too can help make this project a reality and resource for those who have down time and need something to do. To help, fork the [repo](https://github.com/devsgarage/ifbored), join the [live stream sessions](https://twitch.tv/developersgarage) or comment and create issues. 

If you're looking to learn more about the technology used, join me on the [Developers Garage live stream](https://twitch.tv/developersgarage) where it's always an ask me anything stream.

See you in the chat!

![Developers Garage logo](https://dev-to-uploads.s3.amazonaws.com/i/b23aw0jfevias2hwdcbx.png)