Category Archives: Habits

Habits are Infinite But Not a Game

Continuing on the subject of Forever Goals and Infinite Games, let’s compare them to habits.

As a reminder, an Infinite Game is one you play so that you can play it. It is intrinsically fun. The goal, if there even is one, is to get better so that you can keep playing. A Forever Goal is something you will always want, but can’t really achieve. You approach a Forever Goal. Asymptotically. Over infinite time. I think there’s a connection.

Since you can only approach a Forever Goal with constant work, I think designing an infinite game that incidentally gets you closer is a good strategy. Habits can also work, but for different reasons.

Habits aren’t designed to be fun. An infinite game is more like a bad habit. They’re both addictive. Good habits usually aren’t. BJ Fogg, author of Tiny Habits [ad], says to design habits that are so small that you will still do them even when you aren’t motivated. They need to be easy because they’re not fun.

Infinite games, however, are fun. They are designed to be their own motivation. You would play even if you had no extrinsic goal. The goal of the game is to keep playing the game. Habits aren’t like this. They are a means to an end. If you don’t want the end or the habit doesn’t work, you’ll stop.

The benefit of a game over a habit is that it can be more complex and take more time and energy. Tiny Habits are supposed to lead to bigger actions, but they rely on motivation. If you do a habit and you happen to have a lot of energy for the activity, then you could extend it (e.g.: a tiny habit of flossing one tooth could lead to flossing all of your teeth). But you don’t need motivation to keep playing a fun game. You need motivation to stop. When you put more time and energy into something, even as it gets more complex, you get better faster.

Another difference is that habits get easier over time, but infinite games get harder. It’s even more important that it gets more fun the better you are at it. A game shouldn’t be easy to master. Mastery might take forever. And the rewards should increase with your skill. If not, it gets boring and you will quit. When the game’s difficulty is achievable and the outcome is rewarding, you don’t need motivation to play it.

Applying this to my life, I use a combination of habits and games. My morning routine is mostly built on habits: taking vitamins, flossing, etc. Backed by reminders and environmental cues. But, my fitness is almost completely game-based. I don’t need any motivation because I just want to play, sometimes to my detriment (like a bad habit) as I nurse injuries.

And this all brings me back to learning Spanish, which I still force myself to do, and not very well. Still not a game and not even a consistent habit.

An Infinite Game is Like a Bad Habit

If an activity is an infinite game, then you don’t need motivation to do it. It’s more likely you need motivation to not do it too much. Like smoking.

If you play infinite games that are good for you, then that’s fine. I did my first 5k in 2005 and first marathon in 2009. I was addicted to running and got a lot of health benefits. Better than that, I ate as much as I wanted. I loved running, and I thought I would do it forever.

But all of that running did have downsides, and I had to give it up. It was hard. Last year, I was sidelined for six months because I injured a knee trying to re-incorporate running into my routine. That was enough to make me quit (I hope). I still think about doing it, though.

Bad habits are hard to break because you get an immediate benefit. The bad part usually comes in the long-term. When designing an infinite game, we need to keep the immediate benefit part. It’s best if that benefit is obvious when you are playing the game. Or at worst, you see improvement the next time you play.

This is easy at the beginning, which helps you get hooked. Couch to 5K is a good example. But as you improve, it gets harder for a small gain to seem significant. This happens for bad habits too, which is how you can eventually end up with a two-pack a day smoking habit.

Right now, I am trying to figure out an infinite game to learn Spanish. I really think that there’s no downside to do this, but I am really struggling to find a fun game with immediate benefits. My improvements are imperceptible to me. Maybe I just need to play longer each day for now to get more of a fix.

The Inner Game of Spanish

In my post reviewing The Inner Game of Tennis, I wrote that I thought the book applied to any physical activity. I also think it could apply to language acquisition, because we speak and listen with our automatic mind. You don’t want a judging mind to be evaluating how well you are pronouncing words and understanding. But if it’s not judging, then what?

The trick described in The Inner Game is to give your judging mind something to do. In tennis, Gallwey recommends having your thinking, judging self track the ball’s spin or think “bounce”, “hit” when appropriate. You could have it just track the position of your arm right before you hit. The key is that it is something objective.

I want to use this technique to get better at Spanish comprehension. One way I do that is to watch Dreaming Spanish videos to get comprehensible input (native language without translation, just above my level). It’s hard. I can feel my mind wander as it judges that I am not doing well enough.

Here are some things I am going to try out to give my thinking mind something to do:

  • Observe the mouth of the speaker: I am hoping I’ll see some connections to the sounds they are making. This is easier with a video than in real life, of course.
  • Sketchnote the content of the video: I am specifically trying to avoid translation. I want the Spanish words to evoke pictures in my mind.
  • Transcribe: Not every word, but phrases here and there. I will probably combine this with sketchnoting.

The goal is to get my mind to stop doing meta-thinking about how well I am understanding, and if that’s good enough. I want it to provide neutral, objective information to my automatic brain. I’ll share more after I’ve been trying it a while.

Running Through the New Year

One lesson I learned from Ramit Sethi was to just start your New Years resolutions in December. That way you get a jump start. You get to start the new year with having already made some progress.

I do themes, not resolutions, but the same concept applies. My theme last year was to Make Art with Friends and that went pretty well. I set out to collaborate with others and try to meet more likeminded people who liked to make things. As 2023 is coming to a close, I think I can maintain my gains here without it being my main focus.

This year, I am going to refocus on my fitness, specifically strength training. As I age, I am more concerned with muscle and bone health and I’m convinced that lifting heavy things is the way to go. I’m not waiting until January 1st—I started yesterday.

With that goal and my other plans, I decided to make 2024 The Year of Heavy Lifting. It’s a year where I plan to do some hard things that I’ve been putting off.

If you usually do something for the new year (a resolution, a theme, whatever) don’t wait—start now.

Observing Experts

I started running in 2005 and did a marathon in 2009, but I ran sporadically for a few years after that. I had always done it pretty much on my own, and that limited my progress and sometimes led to injuries.

I started running seriously again in November 2018. The big change I made was getting a coach. I had just read Peak [amazon affiliate link] by Anders Ericsson, and learned that one way to become an expert was by watching experts. It wasn’t so much what the expert taught—Ericsson thinks that experts don’t always know why or how they do things. What seemed to be useful was just observing experts. (Incidentally, Ericsson is also the source of the 10,000 hours idea popularized by Malcolm Gladwell. Peak corrects a lot of the misconceptions about that).

My running coach, Holly, has run her whole life. She’s done 25+ marathons and several triathlons and also uses coaches herself. She often expresses her lessons as her observations of the elites she was run with (so I am observing an observer). Two years into it, I have gotten everything I wanted out of it and more.

So, I am trying to apply the success I have had by running with an expert to other aspects of my life.

I want to write a lot more, so I joined the Blogging for Devs pro community where I am surrounded by devs of all success levels that I can observe. Last year, I did the Akimbo Podcast Workshop which similarly exposes you to a cohort of podcasters—a mix of experts and other learners. I am learning a lot just by watching and emulating their behaviors.

The recurring behavior I observed from the successful bloggers and podcasters in these communities is to just publish. Almost everything else there is to learn only makes sense in the context published work.

So, my advice is to seek out experts doing the thing you want to be an expert in. And when you find one, I’d ask just to watch them work and then emulate their behaviors without necessarily understanding why at first. The book, Peak [amazon affiliate link], has a lot to say about this, and if you are skeptical, watch this video about learning tennis by observing.

Habits 3.0.1

Just in time for the New Year, I released a new version of Habits

  • Habit names are multi-line on the home page (finally)
  • Notifications on iOS 10 include your motivating photo
  • There are more controls for when to show the photo on the home page
  • Lots of little bugs have been fixed

Enjoy!

Developer Notes:

Habits most interesting to me as a hobby project — if you are interested,  you can also see my notes from 3.0 where I showed a screenshot of 1.0 — Habits was started almost as soon as the iOS SDK was officially released.

For this version, here are a couple of behind the scenes tidbits:

  • I ran the wonderful Synx on my project to finally align the folder and group structure.
  • I also introduced tailor into my commit procedure to enforce some Swift style.
  • I found my old svn repository for the beginnings of Habits — I am working on restoring that so that it looks like the pre-2.x history for what I have in git now.
  • I used to host my own git server repo, but that was mostly for backup. I decided to change my origin to bitbucket. I am thinking of one day open-sourcing Habits, but for now it’s private.

Habits 3.0

Back in 2008, I learned Objective-C to make my first “iPhone OS” app, Habits. When it was released, Habits looked like this:

habits-screen

This weekend I finally finished v3.0 and made it free.

As this is a developer site, the more interesting thing to note is that Habits was originally made in the first iPhone supporting version of Xcode (with external Interface Builder) and I have been migrating the project file from version to version since then (using 7.3.1 to make the current build).

Some things that were introduced into Habits for this version:

  1. Swift – all new classes were made in Swift and many existing ones were refactored into Swift
  2. Accessibility – Since NSSpain 2015, I’ve been running my iPhone with triple-Home to get into VoiceOver (suggested by Hermes Pique in this talk). Doing that made me realize (1) what it was like to use Habits without looking at it (2) how easy it was to make it work properly.
  3. fastlane – specifically “deliver” to manage the iTunes record and “frameit” for fancy screenshots
  4. Carthage – there had never been 3rd party libraries in Habits, but I decided that one was worth it this time.
  5. TOCropViewController – A simple framework that does one thing very well – provide a View Controller for cropping images. I use this instead of the built-in iOS one because it supports locked aspect-ratios.

Enjoy!

Test First as a Habit

I am not a TDD zealot (or even really a practitioner), but on The App Guy podcast, Paul Kemp asked me if I had any habits to share as an app developer.  I said:

My app developing habit … is get a new passing unit test every day.  […] that new green dot is my indication that I’ve at least added a little bit to the application.

This is a habit I started in earnest when I took B. J. Fogg’s Tiny Habits course. My tiny habit was to just run the simulator, and the best way I found of doing that was to run the tests through it. Then, writing a new test for whatever functionality I was planning next just seemed to be the perfect way to extend it.

Once I write that first test, I don’t TDD the rest of the way, but I’ve found that first test to be a good way to warm up.

Habits 2.01 – Start Small

When I announced Habits 2.0, a fellow Western MA Hackathoner, Molly McLeod, reminded me of BJ Fogg and his Tiny Habits method.

Only three things will change behavior in the long term.

Option A. Have an epiphany
Option B. Change your environment (what surrounds you)
Option C. Take baby steps

I had first learned of BJ from Ramit Sethi’s interview with him. The moment I remember most clearly was his method to start to floss. He suggested that you only commit to flossing one tooth each day — if you did that to start and internalized that that was success, you’d start flossing more eventually. I started doing this, and while I’m not a perfect flosser, I do floss most of the time. That convinced me that baby steps were a real thing. If you have any interest in this, sign up for a (free) week-long tiny habits session with BJ.

So, with Habits 2.0 out the door, I am going to plan 2.01, a baby step improvement of 2.0 by just doing a very small amount of work each day on it.  I joined BJ’s tiny habits for this week and he recommends adding a 30-second behavior triggered by something you will definitely do each day. I decided that once I put my dinner plate in the dishwasher, I will sit at my desk and run the Simulator. Then, I will celebrate that as a success (and mark it done in Habits, of course).

I have been doing that for about 6 days, and each day when I run the simulator, I usually test Habits out a little, and write up a Trello card or write a small test.  BJ’s advice is to keep it completely pain-free and small and to not worry about building on the tiny behavior. Still, in this time I have managed to make a bunch of small improvements to Habits, which I look forward to sharing soon.

Habits 2.0

Back in 2008, I made a simple iPhone app called Habits to help me remember to do some recurring tasks that were not a regular schedule. I made a few updates early on, but it basically did what I needed it to do, so it’s been a while since I have looked at it.

Habits App IconA couple of weeks ago, I decided to refresh its look in anticipation of iOS 7. Unfortunately, an app compiled with iOS 6 doesn’t automatically pick up the new look — at the very least, you need to recompile. Instead, I decided to design something custom that would look good now and feel at home on iOS 7. While I was at it, I updated the icon using the iOS 7 app icon grid.

You can see some screen shots on the Habits documentation page, and if you want to buy it, Habits is 99 cents on the App Store.

Here’s a full list of everything that I had to do for 2.0 in case you’re a developer with an older app and want to see what you might be in for.

  • Converted to an ARC app
  • Moved lots of properties to auto-synthesize
  • Updated deprecated APIs to iOS 6.0 versions
  • Skinned the tables, mostly with custom cells
  • Added a pan gesture to the front-page cells (try moving them to the left for a short-cut)
  • Supported local notifications and badges (requiring a new settings page)
  • Made a new icon
  • Updated my Google Toolkit unit testing to Xcode built-in unit testing (which was gratefully, very easy) — the main issue is dealing with unit-testing’s idea of the document folder
  • Updated all button and default images
  • Updated in-app help
  • Converted my svn repository to git
  • Added database migration to support the settings (this app uses sqlite API directly)
  • Refactored a lot of code, mostly in the database, view controllers and custom cells, to share more code.
  • Fixed a bug in the calendar to support iPhone 5 size better.
  • Updated App Store listing, web page, made this post, etc.