About The Happy Spirit

Creating online games and blogging about life as a 40-something software entrepreneur.

The End

Begin with the end in mind.

That’s what Stephen Covey taught me when I read his masterful self-help book in the ’90s.

As I began my mini-retirement (a.k.a. extended sabbatical) back in December, I had three things I wanted to accomplish.

  1. Get my game platform, StoryTime, into working condition with at least a few active players.
  2. Create an online training course that would sell long into the future.
  3. Turn all of this into a viable business that could last until I am ready to retire for real at a ripe old age somewhere north of 60.

Okay, only the last point looks something like an ending. The first two are competing ideas for how to accomplish the third.

StoryTime went pretty well. I built a working prototype, and a few dozen people have tried my story-game. Nobody has written a game of their own, though. Not the rousing success I had imagined, but I can see what it lacks. More attention than I am able to give it anytime soon.

The Create a Game training course came out but in no condition to charge for it and maintain my squeaky-clean integrity. So there it rests on my external hard drive. Meanwhile, I discover better material for free on YouTube all of the time.

I snuck in a voice-driven game for Alexa. That gave me a chance to code a game I invented and try out some cutting-edge tech. I don’t think a single person has tried my game. Not much of a reception, so that’s that.

This is my perennial problem, trying to do too much too quickly. Or maybe the problem is doing too many things. Or maybe the problem is that I try to go it alone.

Or maybe I don’t know enough to know what my problem is.

I need a team. I need mono-maniacal focus. I need a customer or two with the same problem to solve. And I need to create something those customers wanted, something they would value enough to pay for. That’s a business.

What I ended up doing was having a full-time hobby. Enjoyable, relaxing, fulfilling in many ways. But with barely a customer in sight, let alone a sale, it’s not a business.

Being honest with myself, this is precisely one of the possible endings I had in mind when I started. To play out some ideas. To satisfy my curiosity. To boss myself around for a while. And then to figure out what was next.

I prefer not to go it alone, and I tend not to persist on a path that is no longer right for me.

So the time has come. Time to join a team and make a contribution that matters. I am going to work for an established company. That beginning requires an ending.

And so I bring you…

The End.

 

Life Hacking—Little Adjustments to Make the Most of Life

Memento Mori

Remember, you will die.

A week ago, I went for a walk through a graveyard. It was kind of an accident. I was in the historic part of Dublin, California, waiting for my bank to open and had some time to kill, so to speak. When I visit that branch, I often look over at the neighboring Dublin Heritage Park and Museums. The visible part of the park is a big old barn with some picnic tables. Turns out that’s the Kolb Sunday School Barn.

All of the exciting parts are behind the barn. The Murray Schoolhouse (1856), Old Saint Raymond’s Church (1859), and Dublin Pioneer Cemetery.  The first occupant of the cemetery was Tom Donlon, who died while helping to construct the church. He fell off of the roof, and that was that. He was in his twenties.

Others include prominent families with names that are easily recognizable to anyone who lives in the Tri-Valley region. For instance, the Dougherty family, whose plot is one of the most prominent, also have a valley, road, and high school named after them. Poor Donlon got his own school, in a manner of speaking. The Fallon family got a shopping mall and residential area built out in their name.

History buffs would be thrilled to spend an hour or so checking out the tomb stones and placards. You can get a glimpse of what life was like, how many early settlers came from Ireland (it’s not a coincidence that the city is named Dublin), and what a struggle life must have been. What stood out for me was the proportion of people who died young, at least younger than I am now.

For instance, Mr. Dougherty died at 42. At the time, that was probably considered to be a ripe old age. He literally made a name for himself and completed his successful life journey in a tad over 4 decades. Here I stand at 47 thinking I have at least half of my life before me.

Of course, one never knows how much time is left. But the odds are in my favor of having at least a few more decades at this point. Gotta remember to stay off of my roof.

Life Hacks

What Are They?

That brings me to today’s topic, life hacks. As a software engineer, the word “hack” is emotionally charged. On one hand, the classic hacker carries a sense of intrigue, a certain panache. (That’s a fun word meaning “flamboyant confidence of style or manner.” You’re welcome.) A glorified, rogue programmer who slips in and out of computers undetected, acting as a vigilante, righting the wrongs of society or starting revolutions.

Think of the Matrix, where the ultimate hacker literally frees the world. At least for a while.

Or consider the protagonist in Mr. Robot going up against Evil Corp.

In a darker form, hackers are known to wear black hats, sit in poorly lit rooms, steal information or your identity, and influence elections. Hackers and hacks don’t often work for the forces of good.

Life hacks involve adjusting your behavior so that you might be able to extract more enjoyment out of life or even have more life to enjoy.

For example, remembering that you will die is a kind of life hack. This is the essence of stoicism. It’s also the basis for giving thanks to your maker, especially as you get older. Simply realizing that today is a gift helps you focus on the positive aspects of your day, which makes your experience better than if you spend all day griping and fussing over petty details.

On Optimization

Life hacks are a way to optimize the life experience. Optimization means trade-offs. You have to give a little to get a little. The trick is in turning trade-offs into trade-ups, where you exchange, say, suffering that you can tolerate for an outcome that you have been dreaming of.

For example, I decided in December to optimize my time by eliminating my daily commute to the office, saving up to 3 hours per day. In exchange, I merely had to quit my stable, well-paying job. That’s a trade-off: more time at the cost of some anxiety.

The anxiety comes from the worry that I will run out of money and never be able to get another job because of the “gap in my resume.” While I could have spent my time fretting and imaging doom and gloom scenarios, I used meditation and positive imagery to suppress my concerns. Those life hacks allowed myself the freedom to work on my favorite software projects without not having to suffer (much).

Notably, on days when I skip my morning meditation, my anxiety rises a little. Changing behavior takes effort because old habits return in moments of weakness. Life hacking requires conscious time and attention until the hacks become part of your identity. At that point, you won’t have to think about them any more.

Then you can find more areas to hack. Or simply enjoy your improved lifestyle.

Finding Hacks to Try

Knowing what to hack is a matter of learning what others have tried and personal experimentation. At best, you can find a way to improve your life without making unsustainable trade-offs. At worst, well, you’re going to die anyway at some point, so the downside is limited. (*removes tongue from cheek*)

Somewhere in the middle, you can drive yourself a bit nutty in an attempt to layer on too many new behaviors at once. Life hacks are often in conflict with each other. Should I start the day with a full breakfast? Or is it better to skip breakfast? Or just delay breakfast? Eat only two meals per day, or nibble on small snacks throughout the day?

Side Effects

I have found an insidious side effect of having a better life. The more time I spend in a productive flow state, in living comfortably in the now, the faster time seems to pass. Would it be better to remain idle and suffer boredom so that life would seem to go more slowly?

My answer is no. My training in physics taught me that the actual passage of time is relative to the speed you are traveling. Psychology has taught me that perceptions are not to be trusted. Armed with this knowledge, I can assume that my perception that time is moving at different rates is an illusion, since my speed is relatively constant, primarily influenced by the rotation of the Earth and other cosmic movement.

So I want to enjoy as much time as I can while I’m still here to enjoy it, even if it seems to whiz by. That’s the bottom line on my ledger of life.

With that premise, let me take you on a tour of a typical work when things are going well. As I explain my day, I will point out the life hacks that I am trying. Where I can remember, I’ll tell you where I got the ideas. And I will wrap this post in a bow with suggestions on where to find ideas to try.

A Day in the Life of Hacks

Wake Up

I tend to wake up without an alarm. That’s because I am pretty good at knowing the time. Even when I set an alarm, I usually wake up about a minute before it goes off. That how my simulation works.

Most days I aim to wake up at 6:00 or 6:15 AM.

Scott Adams of Dilbert fame is one of my heroes. He’s a proponent of the idea that life is a giant simulation. Since proving a negative is impossible—that is, I cannot prove that life is not a simulation—let’s say that it’s possible. Everything we are and experience could be the result of some massive computer system. That frame of reference is a useful life hack for reasoning about why things happen.

In fact, when I was a teenager, I bought a booklet by mail order that told me about “Mind Power.” The booklet espoused the notion that the brain has unlimited potential, and one could use auto-suggestion to tap into that power. The book prescribed an exercise where you would tell yourself at night to go into deep sleep and to wake up precisely at whatever time you specified. It worked, and now it’s part of what I can do!

So rather than taking credit by saying “I’m a master at waking up on time,” I’ll just say I am programmed that way. That booklet helped me program myself.

Maybe you thought “waking up” couldn’t be hacked.

Exercise

Now that I am awake, it’s time for a little exercise. I like to start with a short routine that combines stretching, isometrics (push-ups, sit-ups, lunges) and karate moves (orchestrated blocking, punching, kicking).

Every part of the routine could be considered an exercise hack. Stretching is a hack against stiffness that accompanies the ripe old age of 40-something and beyond. Sit-ups and push-ups were someone’s idea for retaining muscle mass once humankind invented too many labor-saving devices. Karate is a specialized set of movement hacks for putting down attackers and defending your village.

In high school, my track coach showed us how to stretch for running. In college, I took fencing for one semester and learned to exhale while reaching to touch my toes. Now, over the course of 10 breaths, I can usually get my nose pretty close to my knee. Yoga taught me how to stretch my spine. Karate taught me to build strength and flexibility by holding bent-knee stances and moving in unnatural ways.

You have probably picked up many life hacks without realizing it.

When I started, my minimum routine included at least 20 sit-ups and 20 push-ups per day. That was all I expected of myself, so it was easy to achieve. And once I got started, it was easy to add more repetitions and more kinds of exercise.

To increase the likelihood of exercising, I might put out my shorts and t-shirt the night before.

Meditation

After 15 to 20 minutes of light exercise, it’s time for 15 to 20 minutes of meditation. I put on a long, flowing robe, light some incense, and…

Okay, just kidding. What I do is very simple. I attempt to think of nothing other than a few things: my breathing, how my body feels, awareness of sounds around me, and specific calming and empowering visualizations.

I sit on the floor with my legs folded under (i.e., seiza style) and close my eyes. I try to count my breaths and get to ten without losing focus. When my thoughts stray, I simply notice and calmly return focus to my breath or the sounds around me.

Twenty minutes is a long time to consciously think of nothing. After I have my breathing in check and am settled, I will turn my attention to some form of imagery. In one form, I imagine that my breath is clearing out and energizing my body. Light comes in, exposes the crud that has built up, and it everything flows out when I exhale.

I am often a little surprised at the effort it takes to clean and polish my mental image. As I do this on consecutive days, it gets easier, though I can always find some dark spots or smudges to work on.

Sometime I imagine that I am floating in white clouds. That’s one of the easiest ways I have found to clear my mind. An endless sheet of white paper, an expansive fluffy cloud, looking out on the ocean from a cliff. It helps to have something to image that is essentially a view of nothing.

When I started, I set my timer for five minutes. Over time, I increased to ten minutes, then fifteen. Now I can do twenty minutes, but I’ll dial it back to fifteen if I am in a hurry. I have heard that even ten minutes a day has life-changing effects.

I am certainly much more calm these days, though I question the wisdom of removing all stress, as I have written before. Again, it comes back to trade-offs. Humans developed anxiety for a reason. Perhaps the right balance is to be aware of dangers but not to carry around that worry. So I continue to meditate.

Cats

Then it’s time to feed the cats.

Unless you are in a depressurized cabin of an airplane, it is good to help others before you help yourself. Also, my cats are pretty direct with me about wanting to be fed. Although I make them wait until I’ve gotten my blood flowing and my brain is fully alert, they always get their breakfast before I get mine.

Studying Japanese

About three years ago, I started my day by studying Japanese. That worked well, too. I learned more kanji and vocabulary in 12 months than I learned since I first started studying 25 years ago.

The book Fluent Forever by Gabriel Wyner offers an amazing assortment of hacks for learning languages. The best is to use variable-spaced repetition, which is a technique my grandfather taught me when I was growing up. The other key is to make your own flash cards. That way you are studying as you put together the materials you are going to study.

This is a good example of conflicting life hacks. One set of hacks said, “The first thing you should do every day while your mind is clear and attentive is study.” Another set of hacks said, “The first thing you should do every day is exercise.” Yet another said, “The first thing you should do every day is meditate.”

But I couldn’t squeeze in all three and also start my long commute on time. So I ended up dropping Japanese practice.

Later I tried picking it up again as a mid-day practice, but it wasn’t integrated well with the demands of my day. It was overwhelming, and I had to stop.

It’s all about trade-offs.

Breakfast

When I was growing up in the 70s and 80s, breakfast usually meant cereal, milk, orange juice and toast. As kids, my sister and I rarely ate blatant sugar cereals: no Cocoa Puffs or Fruity Pebbles. Instead we ate adult forms of sugar cereals: Raisin Bran, Life, Nature Valley granola. Most Sundays, we had pancakes with syrup, or sometimes waffles or French toast. Tasty stuff.

These days, we know that carbohydrates are a poor form of nutrition. No wonder they have to fortify cereal with all of those vitamins.

When we visited my grandparents, we would have bacon and eggs with Freihofer’s boxed donuts. Plain, cinnamon or powdered sugar. Mmmm. That was a rare treat, the kind of breakfast you should only have once in a long while because bacon and eggs had been branded as “unhealthy” by the FDA.

Turns out that bacon and eggs are good for you. Donuts, not so much.

Around 2010, we dealt with a health-related emergency that forced us to rethink our diet. My wife cleverly found a book called Good Calories, Bad Calories by Gary Taubes, which explains the history of nutritional misinformation that led to my traditional breakfast choices.

Now I stick to eggs, yogurt, fruit, peanuts, and coffee for breakfast. Sometimes bread or toast with peanut butter. Sometime a piece of cheese. In contrast with days where I skip breakfast (one of the life hacks I tried for a while) or eat a majority of carbs, the protein-based breakfast keeps me from getting hungry until lunch time.

I didn’t used to drink coffee, but I find that it boosts my creative capacity, which is perfect for my morning work routine. Two to three “cups” (scoops of ground coffee) is about right for me. More than that makes me anxious and flighty, jumping from one task to the next.

Getting Ready

The big news here is that learned that cold showers offer a health benefit. Many people take long ice baths. Apparently, the shock to the body makes you more resilient to germs.

But cold showers are unpleasant, so I have been trying a compromise. I get into the shower before turning on the water. During the first minute or so, my head, shoulders and torso get their jolt, while I wash my hair.

Has this hack kept me from getting sick? Not entirely. I have caught a couple of colds in the past year. Other factors influence health, too. At least it wakes me up and saves water since I’m not waiting for the water to get hot.

I am lucky to have hair, so I comb it. Gel is a hack I tend to avoid. Maybe I would be a better salesman if I started using it.

I am lucky to have teeth, so I brush them. I got a free electric toothbrush when I switched dentists a few months back. I tend to daydream and brush too hard, which is rough on my poor gums. So my new toothbrush leaves things to the vibrating bristles, which is a pretty good hack for keeping my teeth clean while sparing my gums.

I am lucky to have clothes, so I put some on. Yeah, that’s not really a life hack.

Commuting to Work

I can think of two hacks I use to get to work. The first is not to go anywhere at all. Working from home is a great way to save time and have a semi-controlled environment. On the down side, it drives my wife a little batty having me around all of the time. So I started using a co-working space that’s only 20 minutes from home. All of the benefits (and distractions) of a professional office at a fraction of the cost.

The other hack is that I bought myself a Tesla last year. With semi-autonomous driving, my car removes most of the stress of stop-and-go traffic. I don’t have to worry nearly as much about the car in front of me suddenly braking because my car adjusts its speed based on distance. That takes a load off mentally.

Also, I like not having to burn fuel. The roof of my house is loaded with solar panels, so my electricity usage is net zero, straight from the sun.

The trade-off is that I picked up a significant car payment.

Work

I suppose my work habits are full of life hacks. I will not go into them all.

Having full control over my schedule is a mixed bag. My best work days tend to happen when 80% of what I will do is on the calendar. During creative periods, I like to reserve two blocks of time in the morning for creative work. Usually that means writing prose or developing software. I might do 90 minutes of each before switching to email and errands.

Setting aside long blocks of uninterrupted time is a good hack to ensure that you achieve a state of flow. My best work tends to come out when my objectives are clear and my mind is completely immersed in the act of creation.

A complementary trick is to batch up outbound communications. On good days, I pick a couple of times per day to respond to email and make phone calls.

I have also tried work days that are unscheduled. These tend to be a disaster in terms of productivity. From time to time, I am not sure what to work on, so productivity is not really the issue. Wallow a little helps me find a threat to pick up that leads back to something productive.

Not exactly a hack. More like an anti-hack.

Evening Routine

This review has helped me notice that my life hacks cluster toward the beginning of the day. I suppose that morning is when I have the most control over what happens. Work is driven by all kinds of changing priorities and interruptions. After work is taken by getting kids to hockey practice, having dinner, relaxing and getting ready for bed.

By the end of the day, my will power is shot. I know that I should avoid dessert most nights, but it’s so tasty. I know that I shouldn’t look at a screen 30 minutes or more before trying to fall asleep, yet Netflix is so tempting.

I learned in college how to hack my sleep. Psychology 101 taught me that our sleep cycles last roughly 90 minutes long. Waking mid-cycle is counter-productive in terms of the restorative effects of sleep.

For years, I only slept 6 hours (4 cycles) per night. While attending a concussion clinic (my kids play hockey), I volunteered to get tested as part of a demonstration of some new high-tech equipment. The idea is to gather a baseline that can be contrasted with the results after a future blow to the head. The concussion test easily exposed my sleep deprivation. That’s when I changed my sleep pattern and bumped up to 5 cycles.

So if I intend to wake at 6 AM, I need to be asleep by 10:30 PM. The older my kids get, the tougher that is to do. I’m in no hurry for them to grow up and leave. Trade-offs.

Discover Hacks for Yourself

Just about everything new that I have tried over the past 5 years comes from four or five sources.

I credit Tim Ferriss and his cast of Titans for ideas about fitness, diet, stoicism, and amped-up modes of thinking. Tim’s podcast is a virtually endless source of information. You can never cram all of the ideas into your life, so be choosy.

James Altucher teaches his daily practice of caring for physical, mental, emotional and spiritual self. He’s also a master at idea generation. You can learn a ton from his podcasts, too.

Scott Adams is more than a famous cartoonist. Has a sensible approach to trying and failing, as well as a masterful grasp on psychology. Now Scott offers a daily dose of psychology via Periscope using political current events as a rich source of material for discussion.

TED talks are good, though the more formulaic talks make you feel good without leading to action.

I like the Hidden Brain podcast for new thoughts on psychology.

And of course, the world is full of books written by people. Brilliant people. A majority of whom are dead. Spend some time reading and applying what you learn to make the most of the time you have left.

Happy hacking.

 

Remember to Version Your Lambda Function

Here’s a newbie mistake you can avoid. My Guess the Total skill for Alexa uses a Lambda function. I got everything set up, and the skill went live yesterday. I followed that up with a bit of a marketing splash. (See yesterday’s post.)

Now I want to add a new feature. So what happens when I change my Lambda function? I will break the game for everyone who is busy trying it out.

The right thing to do is to create a version of my Lambda function and point the Alexa skill to the specific, unchanging version. Even better, the skill can refer to an alias that points to the version. Then the skill can keep pointing to the alias even if the underlying version changes.

Indirection leads to happiness.

Now I might need to bit the bullet, create a version, and point my skill to that version. That action would trigger another review of my skill, which means it will go offline for about a day.

Normally that would be tolerable, except for the big marketing push. People will probably be kicking the tires of my skill well into next week.

So I might make a new Lambda function and set it up with versioning from the start. I can point the development instance of my skill to the new Lambda. The next release won’t have this issue.

Or I could do something else for a week and wait for feedback. Choices, choices.

How I Made My First Voice-activated Game

guess-the-total-banner

Last week, I wrote about my struggles with Alexa, Amazon’s virtual voice assistant. Sometimes you just have to stare a problem down to make it go away. It worked, and a few working days later, my new Alexa skill is ready to go.

Sometimes it helps to see the whole picture. Think about making a nice dinner. You may have recipe books full of foods you would like to eat. Easy enough if you are adept at cooking.

Coming up with a complete dinner involves another level of orchestration. You need to select a few specific recipes and come up with a menu that has a nice mix of foods. Some protein, a little starch, a nice mix of vegetables, a tasty dessert. Then you have to prepare the food in the right order and with just the right timing to come out when it’s time to eat. Not too soon, and not in dribs and drabs that leave your guests wondering if they will go home hungry.

So, I am going to share how I came up with my particular meal, so to speak. This is a semi-technical rundown of everything I bumped into and had to figure out to get my skill written and published.

Want to know how I did it? Keep reading for lots of gory details.

Guess the Total

My skill teaches Alexa how to play Guess the Total, a game that I invented with my daughter during her daily bath time when she was still little but old enough to count. I have explained the game previously, but allow me to recap.

The game generally requires two or more players. In the skill I programmed, it’s just two players: you vs. Alexa. Each player thinks of a secret number within a range, say from 0 to 10. Then they take turns guessing the total of the secret numbers. Whoever is closest wins.

Simple.

I used to call this game Guess the Sum. When I got around to trying it on my Echo Dot, I found that Alexa misinterpreted the invocation command half of the time. Every other round, she kicked off a lively game of Guess the Song. Um, Alexa, stop.

Through this turn of events, I learned an bonus marketing lesson. When you quit Guess the Song, the skill tells you about other skills by the same publisher. Good idea, despite my mild annoyance after the fifth or sixth time. Alexa, really, stop.

So I renamed my game Guess the Total. That sounds better anyway, and with Alexa it’s all about how things sound.

So now you invoke my skill by saying, “Alexa, open Guess the Total.” She responds with instructions for how to start the game or get directions. In skills parlance, these are called intentions, and they are built into my skill model. When you say “play the game,” Alexa guides you through it.

As the skill logic stands, Alexa always lets you go first. She asks for a couple of numbers, and you have to give answers that make sense. When your turn is over, Alexa takes her turn and reveals the winner. She shares the number she picked and her guess. Then she reveals the sum of the secret numbers and explains who was closer. If you win or tie, she tells you how many points you get. She awards an additional point for an exact guess.

Then she promptly forgets everything, and asks if you want to play again. Pretty much the way I played with my daughter when I invented the game.

Now you might think that telling Alexa your “secret” number is a bad idea. After all, she’s your opponent, and it would be sooo easy for her to cheat. Except that I programmed the skill to play fairly, so you don’t have to worry about that.

That’s it. Simple enough. The basic mechanic of the game is working. You can get from start to winner in a matter of seconds. Players are nudged back on track when they say something weird. For instance, when asked for a secret number, the player might say “banana.” Alexa will recognize that banana is not a number and ask the player again.

While Guess the Total has lots of room for improvement. at this point I think it’s good enough to share. By pushing out the minimum amount of scope that is playable, I got to learn about the publishing process, and I can start getting feedback from real players.

Plus, I already have my next release planned. So I can push improvements a little at a time to the delight of players around the world. Oh yes, I will take the world incrementally by slow-moving storm.

I know. Dry humor is so hard to read on a web page.

Moving right along…

Learning New Technology

You may not realize that the phrase “new technology” has layers. The technology might be new to you, like when a caveman is found frozen in an icecap and is revived to discover the magic of electricity and combustion engines. Or new technology might literally be brand new.

Alexa is new relative to gas-powered cars but mature enough to have whatever gaps and kinks there used to be worked out. You might still think of it as leading edge technology without being on the bleeding edge.

Lots of technology I use when writing software is somewhere along the newness spectrum. Here’s my general approach for tackling new software technology.

  1. Read an inspirational overview of the awesome reasons to use the technology. This often includes hints of riches, the good life, or saving the world. Usually I have something in mind that I am trying to accomplish, and I’ll imagine how this technology will help with my mission.
  2. Work through a “Hello World” tutorial. This is a simple way to get the basic environment set up and to prove that at least the simple stuff works. Also, if you cannot get “Hello World” to work, there’s not much point in continuing. Usually, it’s fine and introduces core concepts of the tech.
  3. Try to adapt “Hello World” to a non-trivial purpose. Basic tutorials tend to be too simple for vetting the technology. You need to throw a few non-trivial problems against it to get a sense of whether the tech will help and what the gaps might be. I like to use the solution I imagined in step 1 as a proving ground. By going deep on a real problem, I tend to discover documentation, example code, and discussion boards.
  4. Dig into a few thorny problems. Beyond that, a variety of factors influence where things go. Can I get a happy path to work where users pick all of the right answers? Do I need to restructure the “Hello World” project to handle added complexity? Have others figured out “best practices,” or at least a few tricks that help?
  5. Decide to fish or cut bait. At some point, the tech is either good enough or not worth the struggle.

Luckily, Alexa is works mostly as expected so far. In some cases, I had to adjust my mental model or approach. That’s called learning, which is part of the fun.

The Elements of a Skill

Skills are relatively straight-forward. They start with an invocation name, the phrase you tell Alexa to kick things off. Each skill is tuned to fulfill a set of intents, things that people want Alexa to do. The default skill model includes some common pre-built intents for things like getting help and quitting.

 

AlexaConsole-SkillInvocation

A view from the Alexa Developer Console

 

For Guess the Total, I have two intents: PlayGameIntent and GetDirections.

Intents are triggered via utterances, things people might say when they want something. In the skill model, you supply sample utterances for each intent. These are supposed to be conversational and should include various ways to say the same thing.

For instance, to get directions, you can say “Give me the directions,” or “Tell me how to play,” or “What are the rules?”

 

AlexaConsole-SkillIntent-Utterances

Utterances that imply the “Play Game” intent

 

An intent performs an action or provides some information. The GetDirections intent gets Alexa to explain how to play Guess the Total. Kind of a one-off intent, a simple request-response interaction.

The PlayGameIntent is more involved. By providing Alexa with a dialog model, she is able to manage a conversation with the player and collect the information needed to fulfill the intent. In the case of Guess the Total, Alexa needs to gather a secret number and a guess from the player. This information is placed into slots to be used in the logic that handles the intent.

 

AlexaConsole-SkillIntent-Slots

Slot definitions for the “Play Game” intent

 

Let’s say that Alexa asks the player for a secret number, and the player says “six.” The playerSecretNumber slot gets populated with a 6. Then Alexa asks for the player’s guess, and she says “twelve.” The playerGuess slot holds the value 12. Everything is peachy, and Alexa takes it from there.

Now let’s say that the player is being tricky and says “pineapple” for her guess. The playerGuess slot gets populated with ‘?’ because Alexa is expecting an integer. That’s where my code takes over and directs Alexa to reprompt the player for a better slot value. The same kind of re-prompt kicks in if the player says a number that is out of bound, such as 42.

As far as I know, that touches on the main the elements of an Alexa skill. It’s not that complicated.

If you are technically inclined, you might want to look at my code on GitHub. I could do a walk-through of my code in a future post. Let me know if you’re interested. For now, let’s not scare away everyone who doesn’t write code for a living.

Tricks I Learned

If you are thinking of creating an Alexa skill of you own, here are my pointers on pulling together a three-course meal.

Setting Up

I learned two general approaches to creating a new skill.

One is to use the Alexa Console to create the skill. Then use the AWS console to create a Lambda. Then hook the two together with a few well-placed clicks and a little cut-and-paste action on the skill ID and Lambda ARN. You might call this the coder-less approach. More clicking on things and less typing.

The coder-less approach allows for some variation, particularly with how the Lambda function is created. You can start from scratch, use a blueprint, or draw from the serverless application repository.

I will admit to not quite getting the difference between blueprints and the serverless repository. I attempted to use pre-built examples of Alexa skills that seemed close to what I was trying to do with the game. None was close enough, and the naming seemed to linger. I ended up with new roles in IAM called “whatever-the-heck-that-sample-skill-was-called” backing my “guess-the-total” Lambda function. Not entirely satisfying.

I also tried using the microservice-http-endpoint app pattern. That hooked up a downstream DynamoDB instance, which will be useful at some point, but not just yet.

I also tried starting from scratch. That’s a journey you don’t want to start lightly, requiring the most knowledge of AWS technologies and how to glue them together. Probably a good idea once you have things under control on the skill and need to expand beyond your custom logic.

At some point, I tried creating a role that would be shared across all of my Lambda functions. Big plans for the days when I’ll have more than one. Well, that didn’t work. Somehow I messed up the access to CloudWatch, so the Lambda logs were not being captured.

I gotta have my logs. How else will I see what going on and more importantly what’s going wrong? So I threw away that attempt.

In all of these cases, the Lambda function started life as a single file, which is too simplistic for my use case. I prefer the project structure that the Ask CLI provides, with a zip-able set of files to upload to Lambda and an automated deployment script that I didn’t have to write.

Another pesky problem I kept bumping into has to do with regions. Presumably Alexa skills can work from a few different regions. I prefer using Oregon since it is closest to me. But the CLI tools kept insisting on sending my Lambda code to Virginia. The problem could be a lack of understand on my part of how to nudge the CLI to use Oregon. I couldn’t find any region overrides in the documentation.

I prefer automated deployment scripts that do what I want. *hrmph*

The solution for now was to let go of my desire for control over the region. Laziness wins the day.

Based on my experience with the Alexa and AWS consoles, I think the better approach is to create skills from the command line. In my case, something like:

ask new --skill-name guess-the-total

worked just fine. I was able to open the new project in VS Code, make a few adjustments, and issue the command

ask deploy

to push everything to the cloud. The CLI takes care of creating the skill, building the skill model, setting up Lambda, and pushing out that code.

The Lambda function gets set up in Virginia? No problem. At least it works. If you think you want more control than that, I say let it go. After all, we are just getting started here. Better to go with the flow and deliver something now than to be stubborn and stay stuck. Right? Right.

Alexa, show me the way.

Development

Given my setup, I make most of my changes in two places: the Alexa Console (found at developer.amazon.com), and my local IDE. I use VS Code, which is free and works well with JavaScript, JSON, Git, and everything else I need for programming.

The Alexa Console is for managing the skill. It offers a helpful editor to modify, save, and build your skill model. The editor organizes the JSON-based model the way Alexa likes it, and the build process alerts you to any errors it finds where you can easily fix them and re-build. Once the build succeeds, it’s a simple step to open the JSON Editor and copy the code into my local IDE. That keeps my local environment in sync with what’s out in the cloud.

 

AlexaConsole-SkillDetails

Working in Alexa Developer Console

 

There are command line tools for keeping things in sync. A clone command brings down the whole project, but that’s a bit heavy handed when I just need to latest model.

The CLI has a rich set of sub-commands, too. No doubt these building blocks are composed into macro commands. With a bit of work, I can see how I might program something more targeted to automate this “copy-and-paste” process. However, at the moment I am more focused on getting a skill published ASAP.

Ironically, I have no time for “time-savers.”

Let’s shift our attention to the local environment. As lovely as Lambda’s code console is, I prefer to write JavaScript using a full-fledged IDE, such as VS Code or IntelliJ IDEA. My skill handlers are written in JavaScript, and they rely on other JavaScript modules. It’s nice to let NPM manage modules for me, and VS Code makes me productive in so many other ways. Two thumbs up for Microsoft.

(Did I just write that? Yes, I did.)

Once I have something worth testing, I use the Ask CLI deploy command to push lambda changes into the cloud.

ask deploy --target lambda

A crowning virtue of keeping all of the latest code and configuration in my local environment is that it allows me to use source control to preserve my work. Git is a fabulous tool. As soon as I have created my skill project using the Ask CLI, I can create a local Git repository with git init. Voilà, instance source control.

Then it’s a simple matter of pushing that repo to GitHub so that I can pull it into any other machine I happen to use for development. I have two computers for development, a desktop machine in the home office and this laptop that I take with me, since I am on the go quite a bit.

Your situation may be different. If you spend a lot of time writing code and jumping between machines, try this out. Just remember to commit your changes frequently and keep them synced with your GitHub repo.

Testing

The Alexa Console has a few other tabs: Test, Distribution, Certification, Analytics.

My adventure with the Console Test window was hit-or-miss. More often than not, I would try to invoke my skill, and the request would never come back. The browser console shows lots of errors. I think Chrome sees the test requests as some kind of hacker attack and blocks them. Unfortunate and a tad frustrating.

Testing from the Lambda console works better. Assuming you can trust Alexa to trigger your function, focus your tests on the custom logic you have supplied. That’s certainly a more direct approach, although there is some presumption that it’s easy to know what will be in the payload that Alexa sends to Lambda.

You can test using the Ask CLI, which supports a simulate command. That seems to work and does not have the problems I saw in the browser-based tests. I haven’t yet figured out how to test a series of utterances to truly simulate the player experience.

Instead, I jumped to what might be the best testing approach. I loaded my skill onto my Echo Dot, and tested with my voice. After all, that employs the same interaction mode that regular players will use. So I got to have a true experience, not a simulation.

If you recall, that’s how I learned that I needed to rename my skill. Good to know.

For my test plan, I listed all of the possible outcomes. Here they are:

  • I ask for directions.
  • I win.
  • I win with an exact guess.
  • Alexa wins.
  • Alexa wins with an exact guess.
  • I say “play again” when the round is over.
  • I say “quit” when the round is over.
  • I say “banana” for my secret number.
  • I say “kitchen sink” for my guess.
  • I ignore Alexa when she asks for input, which triggers the re-prompt speech.

Then I played the game until I got them all to happen. By exercising those cases, I discovered a handful of problems in my code. Once they all worked, my skill was done.

And then I had my daughter try it. She humored me by playing a couple of rounds before going back to Minecraft. Hey, I wasn’t expecting any miracles. I think she enjoyed it, and more importantly, I enjoyed watching her play.

Alexa, tell me it’s all about me.

Releasing

Today my skill was approved. That means I made it through the release process. Not without a hiccup or two.

Releasing involves filling out a multi-page form where you provide marketing information: what the skill is for, any requirements for using it, the category of skill, and so on.

Amazon also wants to know your intentions where there might be legal or financial implications. Are you selling the skill? Are you marketing to children? Does your skill expose any governmental secrets?

This time I got through without raising any flags. That was my second try.

The first time around, my skill was rejected. Apparently, Alexa should never leave the user hanging. If she is going to wait for a response, the last thing she says has to prompt the user with options. Otherwise, she should end the session.

Some Alexa skills are one-shot skills. “Alexa, what is the weather?” is a one-shot—she tells you the weather and quits.

For Guess the Total, I want Alexa to keep going until the player says “quit.” The first time I went for approval, there was no explicit way out of the game, and it wasn’t clear that you could play again. So I fixed that and resubmitted.

It was nice to wake up and see this message.

Dear Dave,

Thank you for the recent submission of your skill, ‘Guess the Total’.

Congratulations! Your skill has passed our certification process and will be published to skill store shortly.

Quirks and Quacks

Most technology has quirks about. Little oddities that may get sorted out at some point. Or not. I found a few in the Alexa machinery, most of which I have already discussed. How about a few more?

Alexa is not good at hearing negative numbers. While testing my out-of-bounds validation, I tried to say numbers like “negative two” and “minus six.” Alexa would helpfully ignore the “non-numeric” part and fill the slot with 2 or 6. Nice try, Alexa.

I never tried saying a decimal. I bet that would mess things up in my game logic. Not sure how well Alexa hears decimals.

It’s not obvious that in order to keep Alexa awake you have to include a “re-prompt” with the response. Otherwise, she says her thing and ends the session. As I explained, I want Alexa to continue playing Guess the Total until the player tells Alexa to quit. So I had to include re-prompts with all of my intents except the intent to exit.

On a related note, I originally thought I could ask the player something like “do you want to play?” But the reply “yes” or “no” does not imply a specific intent. Maybe there is a way for Alexa to remember the context of the last question. The easiest thing for now was to direct players to be explicit about their intent. When someone says “play the game” or “play again” or “quit,” the intent is pretty obvious.

With time and practice, I might get better at making things conversational.

I am sure there are other quirks. Then again, once you get used to them, they become normal.

Feature Backlog

Guess the Total, as it exists today is what I consider to be a minimum viable product, or MVP. That means it does some portion of what I intend it to do well enough. Just enough to get attention, to attract players and gather feedback, and to provide a base to build on.

For my next trick, here is a prioritized list of features I am considering. I may release one at a time or batch a few together.

  1. Allow Alexa to go first. The player who goes first ought to alternate every round. The coding is different when Alexa gets to make the first guess.
  2. Up Alexa’s game. I programmed Alexa with a random strategy for choosing a number and guessing. It would be more fun if she could choose from a variety of strategies, even mixing them as more rounds are played to try and catch her opponent off guard.
  3. Keep score for a multi-round session. This would lend itself to tournament mode, where you play until you reach an overall score that definitely proves you are a champion of the world, at Guess the Total.
  4. Create a leader board. This is a big one that would mean registering users, keep stats across sessions (using a database), and having a web page to see your score and rank among the top players.

And with that juicy list of features, I may have just blocked out all of my spare time for the next six months.

I think I’ll take it one step at a time.

Wrapping Up

Guess the Total is live in the Skill Store. If you have an Echo device or the Alexa app, you can find it by searching…wait for it…Guess the Total. Yup. There it is.

Go ahead and try it. I guarantee you’ll have a moment of engaging fun while you figure out how to play and go a few rounds against the lovely and talented Alexa. She really is a charming companion.

Also, you can find news about the latest updates on this page. I already announced the release to Happy Spirit Games newsletter subscribers. Do you like be an insider? Click that link, and subscribe today.


If you enjoyed this post, let me know, and please tell others about it.

Be brave. Add a comment or ask a question. I promise not to delegate my response to Alexa.

 

Getting Schooled by Skills

Sometimes the biggest blockers are mental. It’s difficult to catch your own biases. Witness my adventure to learn how to write Alexa skills.

I have been stymied following the prescribed approaches to creating an Alexa skill. Let’s focus on the ask-cli tool, since this has the most promise of supporting an active development cycle. If I read the direction literally, I must:

  1. Install ask-cli globally.
  2. Run ask init and use the default profiles (at least while I’m still getting the hang of things).
  3. Run ask new with the skill name, since I that gets baked into the project structure. For my latest attempt, I used ask new --skill-name PizzaMaker. Yum.
  4. Run ask deploy to automagically deploy the new project to the cloud. This uses (I presume) CloudFormation or the Ask API (not exactly sure) to push the skill model, set up a Lambda with the zipped function code, and connect the two together.

With some experimentation, I was able to use the simulator to test the deployed skill. What finally worked?

ask simulate -t "alexa, open greeter" -l "en-US"

The response is a detailed JSON payload that includes the text that Alexa is to read out. So far so good.

Next I want to test the development life cycle. That means I need to change various bits of code, push them to the cloud, and see if the changes take.

  1. I change category in skill.json to GAMES.
  2. I change invocationName in the US English version of the interaction model to pizza maker.
  3. I change the response text in LaunchRequestHandler to I want pizza. Yum.

Those changes ought to be sufficient to prove that the model and the Lambda function are being updated. At this point, I have not touched a thing using the console, so everything should be in sync except for these three changes.

This time the command to “open greeter” does not work. Good, because I changed it to “open pizza maker.” And that works. I get back the message “I want pizza. Yum.”

Alright, so this seems to be working just fine.

What was blocking me before? A few things.

  1. ask deploy sets up my Lambda code in the us-east-1 region. I prefer to use us-west-2, but that gets the tool into a confused tangle. For now, my best bet is to let the tool do what it wants.
  2. I wanted to have a since role called ask-lambda-bot that I could reuse for all of my Alexa skills. The tool allows Lambda to create a new role that is specific to the skill. So every skill will get its own. It also uses a naming convention that is not quite to my liking, including the word ‘default’ because that’s the AWS profile being used. Weird, IMO. Also, too bad. Messing with the role messes up ask’s access, so for now, don’t do it.
  3. The developer console for creating and editing the skill’s interaction model is nice. Much easier to discover what the interactive console allows me to do than to real the extensive documentation of how ever aspect of the interaction model works, just to know what can be done. At some point, I’d love to spend my free time reading documentation. Even then, getting JSON structure into its expected form is an exercise in patience that exceeded my limits.
    • But going between the console and my code seems to have gotten things out of whack. I guess that’s why someone added the –force flag, which discovered at some point when I was already too frustrated to think straight.
  4. Yeah, at some point after beating your head against a wall, it’s good to walk away. Grab dinner, play with your kids or kittens or friends, and try again later. So far, I am having better luck today, now that I can see my mental blocks and walk around them.

So am I really working on Pizza Maker? No. That’s just a way to throw Alexa off of my scent. Secretly I’m working on Guess a Sum, the subject of my previous post.

I hope someone finds this helpful or interesting or at least entertaining. At least it was cathartic to get that off of my chest.

 

 

Alexa, What Do You Want From Me?

Invention is a struggle. It begins innocently enough.

I invented a game called Guess the Sum that involves at least two players. Each player thinks of a number within a given range, say from 0 to 10. Then the players take turns guessing the sum of all of the secret numbers. In a given round, each guess has to be unique. The player who is closest to the sum wins. It is possible to tie, with one player higher and the other lower than the sum by the same amount.

So let’s say you and I are playing. I might think of the number 8, and you might think of the number 2. You can go first. For your guess, you should say a number from 0 to 20. That’s the full range of possible sums of two numbers between 0 and 10. Make sense?

Say you guess 14. That means you think (or hope) my number is 6. Based on your guess and the fact that I know my number is 2, there is no way the sum can be 14. So I might guess 12, the highest possible sum. When we reveal our secret numbers, we learn that the sum is 10. I win.

For the next round, we would rotate who guesses first. That would keep things fair in terms of any first-guesser advantage.

Picking or changing your number after the other person guesses is a way to cheat. To avoid “accidents” where a player fails to think of a number first, having a way to secretly record the numbers makes sense. Slips of paper could do the trick.

Or a computer might help with that. I have considered hosting a Guess-the-Sum app, where people could sit around the same virtual table and guess their way through 10 or 20 rounds, chatting with each other on the side and having a grand ole time.

If you can trust your opponent, Guess the Sum can be played entirely by voice. That’s how I played with my daughter for years.

Coincidentally, last week the AWS Loft in San Francisco hosted Alexa Day. Amazon sponsors developer days to encourage people to write code that runs in their cloud and on their devices. For me, it’s usually a good chance to learn and see what is possible.

We were told to think of a useful skill to program. Instead, I decided to teach Alexa how to play Guess the Sum. That way, avid players would always have a willing opponent. I would make Alexa trustworthy by keeping the player’s secret number out of the guessing algorithm. Seemed like a good idea.

echo-dot-2937627_640

Echo Dot from Amazon

So I dusted off my Echo Dot, fired up my coding environment (VS Code), and made my first attempt at programming an Alexa skill. Three days of effort later, I am still trying to get the coding life cycle to work.

To give you a sense of the problem, imagine that someone gives you a jigsaw puzzle for your birthday. The box sports an eye-catching picture, and you anticipate the joy of putting it together. You clear off a table and dump out the pieces.

After about 10 minutes of flipping and sorting, you get the feeling that something is not quite right. While some of the pieces look like the picture on the box, some look like they are part of a different picture. A fair number of pieces are blank.

After 30 minutes, it’s pretty clear that you are dealing with two puzzles, along with a handful of mystery pieces that don’t seem to fit anywhere. You throw up your hands and walk away.

That’s kind of the feeling I’ve gotten so far with Alexa skill development. While the “getting started” tutorials are fine as far as they go, I have not quite figured out the right incantation to get beyond the first few steps on a skill of my own.

Apparently there are a few ways to go about this. Each starts out simply enough. One approach starts at the developer console.

  1. Create the skill in the developer console.
  2. Give the skill the invocation name: “guess the sum.”
  3. Add an intent. The skill needs at least one thing it can do to be activated for testing. In my case, I have two intents: learn the rules, and play the game.
  4. Create a Lambda function to handles intent requests. I am using Node 8.10, the latest Node that is available on Lambda.
  5. While creating the function, assign or create a role to the function, something that authorizes Lambda execution and write access to CloudWatch (for logging). Keeping things secure is a good idea.
  6. One last step is to connect the skill to the Lambda function and vice versa. Skill IDs and ARNs are copied back and forth, and that should do it.

Even the simplest Alexa skill handler uses modules, so writing JavaScript in the console is not going to work, as far as I know. That pushes me into my local IDE. Here’s where things start to unravel along this path. Nevertheless, I make my code changes, zip them up and upload using the AWS console.

Testing the Lambda function directly works fine. When I switch to the Test window of the developer console, nothing happens. Technically, something happens. A chat-like message bubble wags an in-progress dot at me, floating back and forth indefinitely while nothing is happening.

Alexa, what gives?

Also, the fact that I have to manually upload the zip whenever I change my code is going to be a problem. Better to solve that right away before I waste a ton of time.

If you know about dramatic irony, your literary antennae should be tingling. The phrase “before I waste a ton of time” is a classic bit of developer irony that means the developer is about to waste a ton of time figuring out how not to waste time.

That’s where my Friday went. And then my Saturday. I was heartily “saving time” by “getting things right.” In the end, nothing I tried worked entirely.

I quickly switched to an alternate path for programming a skill, which relies on the Ask command-line interface (ask-cli). This handy little tool seems to have everything a wily developer would need to create and deploy a skill. Super.

  1. Installed as a global NPM package, “ask” runs in a command prompt or terminal window. No mouse clicks required.
  2. You start with ask init, to set up the environment, including developer credentials. This command takes you through a login screen in the browser where you authenticate as ‘default.’ Now, is that my root user or my authorized developer profile? Or is it my separate developer login? Just keep moving.
  3. Then ask new creates a new project for your skill. If you know what you want to name your skill, the --skill-name parameter let’s you dictate it. Same goes for the name of the lambda function. Otherwise, the tool is happy to supply defaults.
  4. At this point, you should be able to issue ask deploy and have everything created for you in the cloud.

For me, this is where things get a bit slippery. Maybe it has to do with how much I have changed by the time I deploy.

Sometimes ask-cli tells me I does not have permission. Sometimes it tries setting up a Lambda function in the wrong zone (us-east-1 when I am clearly working in us-west-2) and complains that Lambda needs to be in the same zone as the skill. Sure, ask-cli, go ahead.

The documentation is plentiful and looks sufficient until you want to know why things aren’t working.

Alexa, stop teasing me.

Not one to give up too quickly, I pivoted to a hybrid approach.

  1. Start a skill in the developer console, going as far as setting up and connecting the Lambda function.
  2. On the command line, use the handy ask clone command to make a local copy of the skill model and associate code.
  3. Set up my handler with the required ask modules.
  4. Try ask deploy to update the code in the cloud.

At this point, something else goes wrong. It seems that the differences between what’s in the cloud and what’s on my computer are too much for Ask-cli, which mumbles something vague and gives up.

A few more pivots left me with a pile of false starts. I suppose I learned some things, but the one thing I didn’t figure out yet is how to set up the project environment so that it works from beginning to end.

Alexa, please work.

Despite my initial frustration, I believe this can work. After all, people have coded hundreds of thousands of skills to date for everything from daily horoscopes to auto-piloting submarines. Okay, I might have made that up. But from the hype, you would think that everyone is coding Alexa apps for anything you can imagine doing with your voice.

Oh, and now Amazon has new Alexa-powered devices that have screens. What the what?!? I thought the point was to interact with your ears and voice. Apparently vision is still one of the important senses.

Okay, deep breath. Just ignore that for now. I have to code Guess the Sum for voice only. That path is complicated enough.

Once my skill is working and tested by me, I’ll need to submit it for beta testing so I can load it into my little Dot and share it with my kids. After all, this is all about impressing my kids.

And once my kids are impressed, I need to apply to share my skill with the world. I think I can get money if people play it enough. And with some enhancements, I might be able to include in-skill purchases.

Yeah, that’s right. I can be making real money with my Alexa skills. Probably enough to fuel an entire business.

Now, where was I? Oh yeah, saving time setting up my development environment. This is gonna be good, I can tell.

Alexa, show me the money.

 

Why I Abandoned My Course About Game Design

Photo by Cindy Tang on Unsplash

What does it mean to fail?

We see failure in little things. My kids get loaded with standard-issue plastic junk at birthday parties. It’s colorful. It works for about 2 minutes. Then it breaks, left in a pile on the floor. Eventually the pieces find their way to the garbage.

Clothing can fail, revealing a bit more than intended. The accidental view may be stimulating or grotesque for the innocent bystanders. I’ll leave it to your imagination.

On a more serious note, failures of infrastructure are inconvenient and sometimes catastrophic. Think of the power going out or a gas line explosion.

Or think of what happens when a freeway bridge fails. We usually drive over bridges without considering the amazing benefit they provide. While the most famous bridges stand blatantly tall, with their elaborate suspension cables and lighted towers, most bridges inconspicuously support traffic from below.

I remember a bridge that went out on the New York State Thruway in the late 1980s. The river it spanned was swollen from the winter thaw and a heavy spring rain. The current washed out the supports, leaving a wide gap in both directions. A number of cars and trucks went over before someone realized what had happened and stopped traffic. According to reports, ten people died.

That bridge was along the over-the-river-and-through-the-woods path that we always took to visit my grandparents for the holidays. It’s shocking when something you have depended on fails so badly.

What else can fail? How about human failure? Schools threaten us with it. We can fail a test or a paper, fail a class, fail a grade, fail to graduate. Even if you manage to get through school without failing, you can still fail to accomplish anything important in life.

Even if you do accomplish something important, you can fail to spend enough time with your family. Or the important thing you accomplished can eventually fail. Apparently failure to drive the bridge supports deep enough in the 1950s is what led to its collapse some 30 years later.

So even those who manage to do incredible good, say by constructing time-saving, super convenient infrastructure, make mistakes that lead to failure.

Life is messy and unforgiving. Entropy is always against us. To survive, we find ways to cope.

If you read lofty quotes, you know the feel-good adage that failure only comes when we give up. Clearly that is not true in the sense that many failures occur despite perseverance. Nevertheless, that mindset is more productive than one of permanent hopelessness and despair. We need encouragement to keep going, to keep trying until things work out.

With that as a backdrop, let me tell you about my latest failure. It’s a good story, and I think you can use it to keep yourself going with whatever you are trying to do.

I took a course last year that teaches people how to make money selling online courses. Yes, that is something of a twist, that someone can sell a course about how to sell courses. You might expect the punchline to be that the whole things was a scam. That couldn’t be further from the truth.

Still, it’s not easy to find a subject that enough people will pay for to make an profitable business out of it. I tried to follow the formula. It goes something like this.

  1. Think of all of the ways to make money online. Put them into buckets, and realize that one of the best ways to make money is by selling knowledge. Better than ads, better than games (believe me!), better than large-scale software systems (for the solo-preneur, that is). Better than cat videos.
  2. Pick a topic that you know well enough to teach others who are less knowledgable. You just have to be more of an expert than the people you intend to teach. Since I have designed a few games, game design for beginners is a good choice.
  3. Find a market with a burning need or pain point. Blog about interesting things “where your market hangs out online,” and build up a list of followers. Get at least 100 of “the right people” to follow you. It’s not enough to have a bunch of your buddies. You need access to potential customers.
  4. Create a course that solves a burning problem of your market. Make it a work of art, a masterpiece that you can sell for about $50 with a clean conscience. You’re going to offer a money-back guarantee, so it needs to be solid.
  5. Launch the course, and enjoy months of success as people benefit from enlightenment and tell their buddies with similar needs. This is the part where you make money while you sleep. Notice all of the work it took to get to this point? No one said it would be quick or easy.

I did bits and bites of all of the steps, but I have to admit that I skimped on step #3. I never found my real market before creating my course. Only my imagined market of beginners who want to start designing games.

Now, it turns out that they really are out there. A couple of times a week, someone new will ask on Reddit how to become a game designer. Usually the advice is to “watch free videos on YouTube” and “just get started.”

My course has a few additional benefits over the standard advice. It covers the fundamentals and provides structure for coming up with game designs. By the time you finish the course, you will have designed your first game. I think most people could use the help, which is why they are asking for it.

So I charged ahead and spent a week sharing “interesting content” with folks on Reddit. With just a few posts, I managed to attract hundreds of readers and got one pre-order. That’s right. I only managed to get a single serious prospect for the course that I wanted to launch by the end of the month.

Figuring that it could just be a matter of time and marketing effort, I considered launching my course anyway. If nothing else, I would learn the remaining aspects of the business.

So, I moved on to step #5. That’s when I realized that hosting my course would cost about $35 per month. Heh, with my one student, I would be making about $27 at the discounted “introductory” rate. That came with a money-back guarantee and a promise for a full year of access. I would have felt better with at least ten prospects.

However, it turned out that the real kicker was that I also skimped on step #4. The videos I produced are packed with information, but my delivery skills are pretty bad. I failed to create a masterful work of art.

Originally, I figured I the lower price point would compensate for the lack of quality, but that was before I watched the free videos. They are so well produced, they made me blush. There’s no way I would charge for my rough-cut videos.

To recap, here’s a summary of the issues with Design a Game.

  • I have practically no one to sell to.
  • I don’t think anyone is suffering for not knowing how to start designing games.
  • My production quality is too low. I need a lot more practice to become a decent presenter on video. Also, my scripts could use some polish and pizzazz.
  • The economics are wrong.

Doing a better job and getting things right would easily take 3 to 6 months. Meanwhile, the mortgage payment keeps popping up, my kids need to eat, and life in California is expensive. In other words, I need a real source of income.

As it stands, enough of the elements are wrong that I decided it would make more sense to put the whole thing on hold while I put myself back on the job market.

Did I fail? Sure. Am I stressed about it? Nope. Much better to recognize what was happening and cut my losses than to continue stubbornly along the wrong path.

So that’s that, and life goes on.

Want to hear about what I am trying next? Subscribe, and I’ll write about it next time.