Why do you ask?

(This post starts with a technical example, but it’s not about the technical stuff so don’t worry about trying to understand the details.)

The XY Problem

A friend of mine reached out to me earlier today, with a question about trouble she was having while coding something. She’s working in NodeJS, which I’m really familiar with since it’s what my productivity app, Complice is built on. “I’m having this problem with doing GET-requests… I can’t get them showing different things based on the url…”

A few sentences later, when I still didn’t really understand her problem, I said, “Hang on. Let’s back up—what is the user trying to do here? Like what’s the point of this page?”

She said something like, “so it’s like, they’re trying to load the data, but when they bring up the page, I can’t specify exactly what data they want.”

“Nonono, back up. I still don’t know what problem you’re solving for the user of this system. What’s the user trying to do?”

When you’re stuck on (or in) a problem, it can be easy to end up with a really narrow view of what you need to do to solve it, becoming overfixated on a given intended solution and focusing all of your questions around that solution, rather than around the original problem. This can happen on the scale of a day’s debugging, or on the scale of an entire startup.

It took me several more times of asking before I finally got my friend to back up far enough to talk about the situation from the user’s perspective, and once she did, she was suddenly like WAIT! and then came back a few minutes later with the solution.

As I had predicted, the biggest hurdle to her figuring out this problem was an assumption that she was making. I actually still don’t know what that assumption was. It would have also been possible for this story to end with her stating one of these assumptions, which I would have then overturned. But she ended up realizing it all on her own.

Stack Overflow, a Q&A website for programmers, calls this whole thing the XY Problem: when the asker asks about their attempted solution, rather than about the original problem they didn’t know how to solve.

Debugging communication

And this isn’t unique to programming.

» read the rest of this entry »

The 40-Hour Work Weekend

I’ve experimented with focus blocks before, where I’m working a large percentage of the time and when I’m not working I’m only engaging in distractions that are centering, rather than divergent. Following in the footsteps of some other entrepreneurs that I admire, I decided to make this entire weekend a focus block. I closed out my email inbox friday afternoon, and didn’t open it again until sunday. And I got a lot done.

The video!

Like the others, I made a timelapse video. I’m kicking myself now, because I didn’t confirm that I had a functional system on Linux for recording my webcam and then turning it into a timelapse. Meaning it took me way longer (read: several hours today pulling my hair out while staring at my screen) to create this video than would have been reasonable, and it’s not even sync’d the whole time. But I know how to do it better next time, and can probably push out a video with 30mins at most of post-processing, provided I set things up well at the start. I learned a bunch about the ffmpeg and sed tools though, which was helpful. I’ll post my scripts once I fix the aforementioned problem.

The stats!


An app that pings you at totally random intervals and gets you to tag what you’re doing. The pings are on average every 45 minutes, but sometimes will be within seconds, or hours apart, so you never know. tagti.me »

On the Unsuitableness of “IF” and the Intricacies of “BUT”

A short reflection on two even shorter words.

Don’t use “if” if…

The other day, I was reading the details of various phone services while logged into my carrier’s website. I came across a section that read:

Long distance charges apply if you don’t have an unlimited nationwide feature.

…so I’m like “Wait? Do I have an unlimited nationwide feature?” and it occurs to me that there was no reason for them to use the word “if” there. I’m logged in! Their system knows the answer to the if question and should simply provide the result instead of forcing me to figure out if I qualify.

Since you asked…

In some cases, of course, it might be valuable to let the user know that the result hinges on the state of things, but there’s an alternative to “if”. It’s called “since”. So that page, instead of what it said, should have been something more like:

Long distance charges would apply, but they don’t since you have an unlimited nationwide feature.


Long distance charges apply since you don’t have an unlimited nationwide feature. Upgrade now

I was initially going to just talk about software, but this actually applies to any kind of service, including one made of flesh and smiles. The keystone of service is anticipation. A good system will anticipate what the user needs/wants and will provide it as available. This means not saying “if” when the if statement in question can be evaluated by the server (machine or human) instead.

How to arrange your “but”

Framing is important. There are many other examples of this (in fact, I’m in the process of compiling a list of helpful ways to reframe things) but here’s a simple one. It relates to the word “but”. Specifically, to the order of the two clauses attached to the “but”. The example that prompted me to jot this idea down was deciding which of the following to write in my journal:

  • Wrecking my productivity, but it’s an awesome book.
  • Awesome book, but it’s wrecking my productivity.

As is readily apparent, the second part becomes the dominant or conclusive statement as it gets the final word against the first statement. In this case, I opted in the end to use the former option, because it affirms the value of reading the book rather than suggesting it’s not worth it in the long run. The book in question is a now-finished serial ebook called The Surprising Life and Death of Diggory Franklin, and the sentences above should give you an adequate warning/recommendation not to read it.

This bit about the buts is obvious in hindsight, but I found that laying it out explicitly like this helped me start noticing it a lot more and therefore reframing both my thoughts and my communication.

And yet…

Say you want to express to a cook both your enjoyment of a meal and your surprise at its spiciness, there are several options:

  • I really enjoyed this, but it was spicier than I expected.”
  • This was spicier than I expected, but I really enjoyed it.”

…but, maybe the extra spiciness didn’t detract from the enjoyment. In that case, a better conjunction would be “and”. Again, like before, this sounds obvious, but once consciously aware of it I started catching myself saying “but” in places that didn’t adequately capture what I wanted to say or in some cases were rude. The chef remark above has the potential to be rude, for example.

If you want to add to the reframing list, comment below or shoot me an email at malcolm@[thisdomain].

Introducing FileKicker 3: New features and new possibilities

EDIT: As of September 2014, the Kik Messenger app no longer supports the old API, which means it no longer supports FileKicker. Thanks for using it—I wish it were still working but there’s not really anything I can do at this point! You can check out my current project at complice.co.

I have a super-exciting announcement to make today. It’s likely exciting to some of my users who will be able to send files over Kik Messenger faster than ever, but the reason it’s so exciting for me is that it’s my first major passive income project. Over the past year, FileKicker has grown from a few hundred downloads and a dozen daily users to over 350,000 downloads and 14,000 events per day (!).

As such, I’ve spent the last few months overhauling it, adding advertisements and new features. I can’t really know until after I’ve launched it, but I’m expecting this to provide a decent amount of money to help support my tuition. Frustratingly, this has taken a lot longer than anticipated (five months instead of one) and it’s not even as much as I wanted to release.

Finally, at the advice of my friend Yev Chertov (check out his app re:me if you’ve ever forgotten to respond to an important text) I decided to polish off and launch what I have. Hopefully I’ll have a chance to finish the upgrade—that is, launch a paid version of the app with more features—this winter, but it’s hard to say.

Shoutout also to Scott Greenlay, who made a whole set of shiny file-type icons for this update. Click on his APK icon below to check out FileKicker 3.0.

A file icon for an Android installer

If you’re a FileKicker user, let me know in the comments what you think of it. Have any suggestions or feature requests? They may not be possible, but I’m more than game to listen.

FileKicker 2: Return of the File!

EDIT: As of September 2014, the Kik Messenger app no longer supports the old API, which means it no longer supports FileKicker. Thanks for using it—I wish it were still working but there’s not really anything I can do at this point! You can check out my current project at complice.co.

FileKicker icon: A green arrow overlaid on a white rectangle with *.* on it as in 'any file'.

I wrote a post a few months ago about FileKicker, my first published Android app. I’ve since published another, ContactKicker [no longer available]. In the few months since then, I’ve launched several updates to each app, making the experience much better.

FileKicker, as I originally built it, was a bridge. The purpose of the app is to allow filesharing via Kik for any kinds of files, not just pictures. All I really did at first was connect the OpenIntents File Manager PICK_FILE intent with the Kik Messenger API, and on the other end I would simply launch the browser to open the file. While it was conceptually cool to build an app that didn’t actually have a visual interface, I realized that it wasn’t the best solution. For the first version of FileKicker, I implemented my own file-picker interface so that users do not have to also download OI File Manager. This also made things visually simpler, and improve user experience.

However, user experience was still weak on the receiving end; all FileKicker would do is launch the browser. This was fine for images and text, but it made it really hard to send some other kinds of files. APKs (Android application package files) for example, can normally be downloaded onto an Android phone and then installed, but the installer won’t launch if the file extension isn’t APK. This means users would need another app to browse to the file and rename it, which was altogether a poor experience.

An Android dialog, showing the icon and filename 1B class schedule.pdf, a complete progress bar, and two buttons: "Open file" and "Share url".

FileKicker 2.0 receiving interface

To fix it for FileKicker 2.0, I implemented a download feature as well, using Android’s ASyncTask class. Now, the file is downloaded from within FileKicker, saved with its original name, and then opened with the appropriate app by checking the file extension. Since I did this, usage of the app has grown much faster, and I’m proud to say I have over 500 users and that each day about 50 files are sent using my app.

QR code linking to FileKicker in the Android Market
So, if you’ve got an Android phone, check it out and let me know what you think! If you have any complaints, compliments, feature suggestions, or other comments, comment below.

FileKicker – My First Published Android App

FileKicker icon: A green arrow overlaid on a white rectangle with *.* on it as in 'any file'.

As some people might know, I’m presently employed at Kik Interactive. Yeah, the guys who make the  smartphone messenger app. My job is to make apps that use their new Developer API to send content between phones.

Well, I’ve been working on a few different apps over the past few months, but the first to fully see the light of day is called FileKicker. It’s really simple: send files to your friends via Kik. The cool thing is, because of the way Kik Messages are sent, you can actually access this file anywhere using its url, which is easily shareable from the app. Check out FileKicker in the Android Market to download it or learn more.

Something that’s crazy is the alternative Android market site syndication. I just uploaded this a few hours ago, and already a Google search for FileKicker kik returns results for site for androidzoom.com with a page on my app. I don’t see how it’s better than the regular market, but it did generate a nice little widget:



I’m planning to have some more apps up in the coming weeks. Leave a comment if you have any awesome ideas for what I could do with Kik next.

Fall sanely in love
If you've done enough dating indefinitely and you're ready to get real about courting, check out The Mating Dance, my 4-week zoom container on how to bring every part of yourself into the process of falling in love so you can fully commit or know it's not a fit. The Mating Dance
Become more intentional
Check out Intend, a web-app that I built to help people spend their time in meaningful & intentional ways and be more playfully purposeful. Intend logo
Connect with me on Twitter!