Chain-Link was inspired by a motivational secret used by Jerry Seinfeld. Jerry understood that to become a better comic he needed to practice his craft every day. He used a big calendar and marked it every day with a big red X after writing new jokes for that day. After several days he had a chain of red X's and after a long enough time, he was motivated to prevent that chain from breaking.
"After a few days, you'll have a chain. Just keep at it and the chain will grow longer every day. You'll like seeing that chain, especially when you get a few weeks under your belt. Your only job next is to not break the chain." ~ Jerry Seinfeld
Alexa was the perfect fit for creating a virtual chain of links instead of a using a physical calendar with a bunch of red X's. With voice, it's simple and fast to add chain-links daily. If you can add a chain-link daily and go weeks without breaking a chain, very soon you will have created a productive habit!
What it does
Chain-Link lets you create virtual chains that represent goals or tasks that you want to take action on daily, like exercising or writing the next great novel. Every day that you take an action towards your goals you can ask Alexa to add a link to the corresponding chain. With enough chains, it becomes more motivating to prevent that chain from breaking.
You can create multiple chains and add links to them daily. You can edit the title of a chain, list all of your chains, and ask Alexa for a status update for any of the chains.
How I built it
I'm a software engineer so the technical aspects were straightforward. Amazon provides a ton of great documentation and the Alexa community is robust enough that I was able to get development tips and also get my questions answered quickly. I used Python for the Lambda functions and DynamoDB for storing data.
Beyond the technical parts, I learned that conversational UX is important to creating a great experience. I had to start over about 3 times with my concept for Chain-Link since I was trying force it into the web/mobile UX paradigm I was already familiar with - big mistake. Still needs improvement but I started getting the hang of it after researching user-experience for voice.
Challenges I ran into
The first challenge I ran into was understanding how Alex handled the Dialog Delegates for filling required slots. Once I got the hang of that I was better able to design and develop the parts of the conversation I would control through code vs those I would delegate away.
The second challenge was learning how Alexa handles sessions, flow, and timing of a conversation. I come from a web and mobile development world where sessions can last for minutes, hours, or days. Voice interaction is much different and how and when a session ends is important to consider.
The third challenge was simply understanding the user-experience for voice applications. Feels like a whole new field of best-practices, theory, behavioral patterns, and user expectations. I spend a lot of time reading blog posts by others in the field to get the best understanding I could. I'm happy with the results but as I learn more I keep adding to a list of needed improvements for Chain-Link.
Accomplishments that I'm proud of
I have dabbled with Alexa skills before but this will be my first public Alexa skill and it's for something I would use every day. I love building things that scratch my own itch, and I feel like this skill will motivate me to take daily action on my to-do lists. I hope others find value in it as well.
What I learned
Outside of the technical aspects of building an Alexa skill, I learned about the importance and complexity in developing a great conversational experience. And I'm not done learning here, like UX for web and mobile apps, this is an ever-evolving area of development where I need to spend more time researching. Regardless of the technology used and uniqueness of the idea, without a great user experience it just won't add any value.
What's next for Chain-Link
I plan on adding a global status updater so that users can get an idea of how the Alexa skill is being used by others. Might be super motivational to learn that hundreds or thousands of others are adding chain-links every day for activities that are important to them.
I would also like to add an export feature so that you can get a visual representation of all the chains and links in an email.
I'm looking forward to getting some feedback from users as well.