The curiosity journal of a technical creative.

Features with "suggestivity"

In the previous post I talked about composing features together in my personal statistics platform, Two Ravens. But being able to mix existing features isn't the only test of whether a combination is a good idea—you can also see if a new feature inspires solutions to other problems. In his Turing Award lecture "Notation as a Tool of Thought", Ken Iverson calls this aspect of a good notation "suggestivity", the ability of a system to give the user new ideas to try. Having Two Ravens recognize a special _summary field that customizes how entries are displayed not only solved one problem, it suggested a similar solution for another problem, this one not on the data visualization side, but on the data entry side.

The problem was caused by filling out daily Positive And Negative Affect Schedule (PANAS) surveys. I stumbled on PANAS several years ago when struggling to enjoy the specific kind of software engineering work I was doing, and I became curious whether foul moods were periodic. I tracked scores in my EDN-based DSL for about a year, until I negotiated some changes in my responsibilities and my mood improved. When I was brainstorming Two Ravens's Jobs to be Done, tracking PANAS scores was one of the jobs I could have used a personal statistics platform for, so I wanted to make the experience seamless and started tracking my mood again.

A Two Ravens entry already had the core features it needed: a template to populate a new entry with all the moods PANAS tracks (e.g. interested, distressed, excited, upset, etc.); a field type for numbers; calculated fields to add up all the positive scores and all the negative scores, as well as calculate the net score; and a calendar plot to visualize net scores across different days. The nuisance came from entering 20 numbers:

Twenty number inputs to enter a PANAS survey
Twenty number inputs for a PANAS survey tend to blur together.

Not only did I have to mentally map "Very slightly or not at all" to the digit 1, "A little" to 2, and so on up to "Extremely" 5, but interacting with the inputs was cumbersome, from advancing focus to the next field to highlighting the default 0 value and typing the new number. Minor complaints, really. I could have polished the default state so no value had to be selected before entering a new one, but I felt a bigger friction from mentally converting a description to a number. Solving that problem would probably impact the lesser problems, so I tackled it first.

I didn't want to hard-code anything specific to PANAS, and in reflecting on the special _summary field I wondered about supporting another special field, _entry (suggestivity!) that controlled how an entry's data inputs were rendered. For entering PANAS scores, a simple config could specify a row of buttons:

interested:
  choices:
    - {value: 1, label: None}
    - {value: 2, label: Some}
    - {value: 3, label: Moderate}
    - {value: 4, label: Lots}
    - {value: 5, label: Extremely}

I chose names that were short enough to fit all the buttons on the same line, at least on a desktop-sized browser window. A YAML anchor allows all the fields to be configured the same way:

multiple-choice: &multiChoice
  choices:
    - {value: 1, label: None}
    - {value: 2, label: Some}
    - {value: 3, label: Moderate}
    - {value: 4, label: Lots}
    - {value: 5, label: Extremely}

interested: *multiChoice
distressed: *multiChoice
excited: *multiChoice
upset: *multiChoice
strong: *multiChoice
guilty: *multiChoice
scared: *multiChoice
hostile: *multiChoice
enthusiastic: *multiChoice
proud: *multiChoice
irritable: *multiChoice
alert: *multiChoice
ashamed: *multiChoice
inspired: *multiChoice
nervous: *multiChoice
determined: *multiChoice
attentive: *multiChoice
jittery: *multiChoice
active: *multiChoice
afraid: *multiChoice

That produces an entry like this:

A PANAS survey with buttons instead of number inputs
Twenty buttons instead of number inputs is not only easier to interact with but also more visually distinctive.

Clicking the buttons sets the value of the field to the associated number.

That approach resolved all the friction with filling out PANAS surveys. There are no longer any inputs to navigate or values to replace or mappings from descriptions to numbers. Solving the primary problem obviated the need to solve any others.

Currently, _entry only supports these kinds of buttons, but the feature is open-ended. If I encounter a type of field where some UI other than the default would be helpful, there's a place to build in a new customization. One suggestive feature leads to another.

How have you encountered or designed features that create springboards for new features? If so, tell me the story!