Main Page » Miscellaneous »

Rule #1 when responding to anything technical: Never ask "Why?" (a rant)


Always use secure-HTTP / Unsecure HTTP / Permanent Link

There are no words to describe the infuriating feeling that comes when you casually mention that you use SVN or Word or some other software you happen to be use, or describe the hoops you need to jump through to make a specific thing work in a recalcitrant programming language, and have someone ask, "Why would you do that?" No, not as part of a longer statement, that's their entire message.

I'm starting to feel pretty comfortable with the idea of just blocking someone who sends me this kind of thing. Reason number 1: All things being equal, it's none of anyone's goddamn business what software I'm using and why. (No, I did not "make it your business" by making a tweet directed at no one in particular.) In the event that all things are not equal: Reason number 2: Why not use/do whatever it is? The message doesn't say. Reason number 3: No alternatives are presented, as if the sender's preferred software/method was so obviously superior to mine, they didn't even need to say what it is! Reason 4: The message comes off as condescending and kind of shitty as a result of all of the above.

Here's an example of what you should do instead:

  • Statement: "I want to switch to a new browser — maybe CometBird — because I like Firefox's functionality but I don't want to use it directly, since the new CEO of the Mozilla foundation paid lots of money to Proposition 8 and has been passive-aggressively claiming that he's not really homophobic and didn't actually believe in Proposition 8 (which makes it worse, if anything)."
  • Good Response: "Cometbird hasn't updated since 2012, and is highly dated and vulnerable as a result. I strongly recommend picking up Palemoon."
  • Bad Response: "Why would you use CometBird ...?"

The good news is that I didn't actually get the Bad Response. But you can see how much more helpful and intelligible the Good Response was: it actually explained why CometBird would be a bad idea (thus negating reasons 1 and 2), it provides a specific alternative with an easily-Googled name (reason 3), and the tone was generally neutral (reason 4) with the added bonus of being specifically a recommendation, rather than "you should do this" — which, while technically it amounts to the same thing, doesn't sound as nice.

The bad news is that the Bad Response is a modified version of a response I got to a tweet I made some months ago, about a witty comment I'd used as a message for an SVN commit, and someone responded, "Why would you use SVN ...?". After I pressed them, they said that they found Git to be "more efficient." Well, I've used both, and found them to be more or less functionally identical for my purposes, so I see no reason not to use the one I personally am more familiar with, which just happens to be SVN. Which brings us back to reason 1 and, by extension, reason 4.

For those of you keeping score: I switched over to Pale Moon right after I got the recommendation, and I'm still using SVN.

Another thing that happened earlier today: On Twitter, I was talking about how Microsoft tends to do things in a needlessly complicated/redundant/difficult way in their programming, and at one point I was talking to someone about the obnoxiousness of overriding the functionality of C#'s System.Random (with a specific reference to the System.Random.Sample() method).1 The guy said, "Eh, I haven't used Random, what's wrong with the regular Sample()?" I explained the problem in greater detail than I had before, and he said, "Okay, but my question was more 'why are you overriding it in the first place?'" (emphasis mine).

OK, here's a list of reasons: 1. the documentation specifically comes out and says that different versions of the .Net Framework may have different implementations of System.Random,2 and I want to be damn sure my C# game's random numbers work the same on different systems (what with replay files, etc). 2. I just wanted to practice my programming mojo by implementing multiply-with-carry and xorshift. 3 through 1024: for all he knew, there were other reasons beyond the scope of the tweets I happened to be making that instant. Mostly, though, though, the topic at hand was actually "you're supposed to be able to do a thing, and Microsoft made that thing needlessly complicated", and the question of why I wanted to do that specific thing was completely irrelevant.

The "this is infuriatingly pointless" feeling is multiplied by 45,069,105 when you get this in response to a technical question, for something you are actually seeking information about. On the one hand, from the answerer's perspective, there might be an actual better way than what you were trying to do. However, if the entirety of someone's response is "Why would you want to do it that way?" then they deserve to step on a rake and have the handle hit them in the face, especially if they are not the first person to respond in this manner. If, however, they persist even after you have clarified your position ("My boss/company won't let me do it the standard way" is a very good reason, not that it's their business), they furthermore deserve to step on a Lego with their other foot while barefoot.

1The exact problem is beyond the scope of this article, but to summarize: it's weird, you need to spend a lot more time and effort than it looks like you do at first, and I can't imagine what Microsoft was thinking when they did it the way they did.

2The latest Windows version of the XNA Framework, for instance, uses .Net 4.0, whereas the XBox 360 version uses a variation on .Net 3.0. To say nothing of MonoGame, which uses Mono on non-Windows systems, which is not a version of the .Net framework.

3 Comments (auto-closed) (rss feed)


I can think of one legit reason of asking "why do you want to do X". Sometimes the proper answer will vary wildly based on the context you are in, especially in cases where no answer will work in most cases (rare, yes, but they do exist).

Granted, instead of just saying "Why X?", they should say something along the lines of "Why X? There really isn't a good general answer to you're problem because (shortened list of complications preventing a straightforward answer). Some common contexts are (most common contexts), which popular answers (brief list of answers connected to their corresponding contexts) are often used.

(Optional more detailed explaination of above techniques, and their limitations)

(Mention if there are other cases that aren't covered by above, and if so, reiterate the need fore more information)"

(Wow, that was a long "quote")

In any case, most of the points you give above still apply. :P


Of course, one reasonable "why" question is just curiosity - oh, that's interesting, why'd you make that choice? But it's usually pretty easy to tell the difference between that and passive-agressiveness.


(whoops, MySQL ate my comment)

Quite frankly, I've read enough of Raymond Chen's posts to think "What are you actually trying to do ?" (i.e. "what's the big problem?") is an appropriate "answer" when someone says "I've run into small problem X".