At about four and a half months, Jiaxu outgrew his swaddle and we had to put him in a baby sleeping sac instead. It looked something like this:
The first time I put him in a sleeping bag, everything went horribly wrong. He cried and cried and cried. And cried. We made sure he wasn’t hungry or sick; he wasn’t too hot. After going through our checklist, we were about to give up, until I noticed one tiny little detail — the sleeve was just a little bit too long for Jiaxu.
Jiaxu was (and remains) an avid thumb-sucker. He had learned this skill pretty early on to self-pacify. Even before he had enough hand-eye coordination, he would try stuffing his whole fist in his mouth. Now because the sleeve was hiding his hand, his favorite workflow was blocked. I made one small roll of his sleeve, Jiaxu started sucking his thumb a second later and fell asleep two seconds later.
This experience reminded me that the most important factor in creating a better user experience is real-world contact with the user. All of my baby books told me to check whether he’s hungry, thirsty, sick, too hot, too cold, etc etc etc. The actual problem turned out to be somewhere completely unexpected.
At DataPad we invested heavily in visualization and analytics. We built one of the early declarative visualization libraries a la ggplot2 in JS. We built an optimized columnar data format in C (a pre-precursor to Apache Arrow). We built an Excel formula like DSL focused on columnar operations (as opposed to cell operations in Excel). None of those things seemed matter for user uptake. Many of the features we shipped were highly requested by users, yet they didn’t seem to make that much of a dent for overall user activity. It wasn’t until we did a round of comprehensive user surveys and interviews that we realized our users were having trouble bringing data in. Most of the interesting data they were stored in databases, Salesforce, Marketo, etc. It was a huge chore for them to first export to CSV and then upload to DataPad. As a result they weren’t even able to take advantage of any of the bells-and-whistles we provided.
In most cases, the actual fix is not rocket science at all. The common thread here is that the actual “bug” wasn’t at all what we were thinking about prior to real contact with the user. If we hadn’t paid attention to understanding the entire workflow, we’d still be wondering why user success was not improving no matter how much code we were able to churn out.
For coders, especially very capable ones, the hubris that comes with their skill level makes them all the more susceptible to this trap. So please remember, your product lives and dies by its user experience, and a good user experience is all about empathy for the user. Understanding this will bring you success professionally as well as give you sleep and sanity as a parent.