First, try reading the error message, episode 4: Even programmers see error messages without reading them

Same story, different details. It's the same internal programmer's tool which I have been calling Program Q. Many people have written scripts that help to manage your q tables.

I'm trying to fribble my q table, but the fribble script gives me the following error:

fribble: Error: Could not refresh counterbalances. Please manually run q refresh frib1 frib2 -r library

What does this mean, and what should I do?

Apparently, this programmer just froze up and stopped reading at the word "error". The error message is two sentences long. The first sentence answers the first question. The second sentence answers the second question.

I can't even explain this away as a TL;DR. How can two sentences, each of which answers a question you asked, count as TL?

Comments (37)
  1. Antonio 'Grijan' says:

    The human race never fails to amuse me :-) .

  2. C'thurr'kralb says:

    The software already knows how to solve the problem. Why doesn't it do that?

    [I can think of a few reasons. Maybe the fribble command is intended to be run from batch files, but the refresh command is interactive. Auto-refreshing would hang any script that uses the fribble command. Or maybe the refresh command is destructive, but the fribble command is nondestructive. -Raymond]
  3. Boris says:

    To be fair, the tool doesn't say _why_ it couldn't refresh counterbalances. I think I'd like to know before doing it manually (maybe the real fix is to remove that underlying problem, and try fribbling the q table again?).

  4. Antonio 'Grijan' says:

    @C'thurr'kralb: maybe it's a potentially destructive action. Think, for example, of running chkdsk on a sick volume. If the corruption is minor, it will success without problem. But with severely damaged volumes, chkdsk can worsen the problem and make the data recovery more difficult (or even impossible). In those cases, it's best to just point the probable solution and let the user decide.

  5. Joshua says:

    How about "Program X is running. You must close it before updating."

    I got sent that asking what the problem is. I sent back "believe specific error messages."

  6. Bradley says:

    I'm sure he literally knows what it means, but he wants to know why it's a problem and what that command will do before blindly following it on a production system.

    [If that were the case, then the question would have been "Why is this a problem, and what does the recommended command actually do?" Because the answers to the question he actually asked are right there in the error message. -Raymond]
  7. Boris says:

    @C'thurr'kralb: the idea may be to figure out what went wrong before attempting to fix the problem silently, just to make sure that really is the right approach. Also, I'd rather raise a loud exception than implement various kinds of autocorrect that may only end up hiding the root cause.

  8. Mac says:

    What C'thurr'kralb said. This programmer must assume that running q refresh does something risky. If it was safe, then the software would it anyway, wouldn't it?

    [If that were the case, then the question wouldn't have been "What does this mean, and what should I do?" It would have been "What are the risks of running the recommend command? What could go wrong, and what should I watch out for?" -Raymond]
  9. 12BitSlab says:

    Back in the olden days, I worked on an NCR 315 system.  It didn't use an 8-bit byte.  It used a 12 bit slab which was an efficient use of memory.  As a so-called mainframe, it has a whopping 10K of memory.  That 10K had to accommodate the Executive (what we call an OS today) as well as a loaded program and it's data.  Sometimes memory was so tight that there was no room whatsoever for a decent error message.  I had to modify code for one such program.  When it found an error, it would print "TROUB" on the I/O writer (no video back then) and then execute a CPU halt.  There wasn't even enough memory to print out the word TROUBLE — just TROUB!

  10. dave says:

    re "TROUB"

    You actually only need four letters to indicate things have gone very bad, and there is a rich vocabulary of four-letter English words from which to choose.

  11. @12BitSlab: So that's where you name is from.  I learned something today!

  12. ipoverscsi says:

    [Sorry if this is a dup — my browser locked up when I posted earlier.]

    @dave: Although five letters, "ABEND" could have worked. :)

    @Raymond: I think that people didn't read the second sentence for two reasons: 1) because it was assumed to be a continuation of the error message and not a means of correcting the error; and 2) because the text runs too far off to the right.

    Experience tells me that most people expect an error message to take a single line, so they stop reading after the word "error". But when messages are multiple lines, people seem to read the first few words of each line (if only because they catch the text out of the periphery) and might see that the second line is telling them something more than "error".

    Here's the fribble error on a single line:

    fribble: Error: Could not refresh counterbalances. Please manually run q refresh frib1 frib2 -r library

    And here again on multiple lines:

    fribble: Error: Could not refresh counterbalances.

       Please manually run q refresh frib1 frib2 -r library

    Personally, I find the second to be easier to read, mostly because it is visually more compact.

  13. laonianren says:

    Some programmers can't read error messages and some programmers can't ask good questions (see for details).  This could be an example of either.

  14. Kevin says:

    [If that were the case, then the question wouldn't have been "What does this mean, and what should I do?" It would have been "What are the risks of running the recommend command? What could go wrong, and what should I watch out for?" -Raymond]

    Frankly, this strikes me more as a failure to communicate than a failure to read.  The programmer may well have had those questions in mind, but just didn't articulate them properly.

    This is, of course, still a failure on the part of the programmer, just of a different variety.

  15. Ian Boyd says:

    It looks like "q refresh frib1 frib2 -r library" is probably dangerous to run (otherwise the system would have fixed it for me). So i have two choices:

    a) run it, without knowing what it will do, and if stuff gets destroyed, it's its own fault

    b) ask, under the guise of hoping someone who can make a more informed decision will do it for me

    Personally i would have no problem with blindly issuing the destructive command. If it's really a problem then someone will come to discuss it once everything's gone.

    [I went back to the original scenario. The "q refresh" command was effectively a "Perform a quick repair install of the app" command. -Raymond]
  16. 12BitSlab says:

    @ MNGoldenEagle

    In a 12 bit slab, one could hold 2 6-bit alphas or 3 4-bit digits.  That was why it was considered to be efficient memory usage.

    @ ipoverscsi – I think the original code had a message along the lines of "TROUBLE AT SomeProgramLocation".  As code was added, the message kept shrinking.  Back then, ABEND was usually a term associated with the Executive.  Either using the ABJ command which Abended or Killed a job.  ABEND also meant that the Executive crashed.

    @ dave — given how some of that code was written, I can definitely think of some four letter words to use.  It would have also freed up 1 slab or 12 bits since a four letter word consumed 2 slabs and a five letter word consumed 3 slabs.

  17. Brian says:

    Beyond Raymond's suggestions, there are several reasons that tools that know what went wrong (and how to fix it) might avoid auto-correction:

    1) Auto-repairing the application will potentially trigger the same underlying issue, causing an infinite loop of auto-repairs.

    2) The code that is spitting out the error may not be in the proper context to cleanly run the repair action.

    3) In some cases, the proposed fix will not actually fix anything, but will instead report the underlying problem to the user.  A manual action does a better job encouraging the user to pay attention.

    4) Frequent occurrences of the issue may be symptomatic of more serious problems.  Forcing the user to run a manual script encourages the user to investigate these problems if and only if the issue happens a lot.

    I admit that #3/#4 are a bit overly optimistic about how users handle errors.

  18. Nico says:

    > If that were the case, then the question would have been "Why is this a problem, and what does the recommended command actually do?"

    Some people are just genuinely horrible at asking questions, especially in a text form.  I can't count the number of times I've gotten a question via email that's so nonsensical I can't even begin to guess what the sender is *really* trying to figure out.  Sometimes they just can't be bothered to spell it out and try to be as brief as possible ("Why doesn't this go right?"). I blame texting.

  19. DWalker says:

    When my Mom asks me what an error message means, I often tell her the answer.  

    Sometimes I tell her that the Web search engines know everything, and that if she types the error message into a search, she might find the answer.  (She might find an incorrect answer too…)

    Her reply is that she would rather ask me what the message means, even if I have to ask the Web, because she knows that I can translate the answer into terms she can understand.  She is very smart, but she still would rather ask me!  

  20. meh says:

    I'm actually kind of glad my parents ask me about system error messages. I've seen a lot of various forum site posts where the first reply is some helpful dude on the internet telling the person to browse to <some url> and download <some super dooper sure fire analyser / fixer> and then run it making sure to just click yes to every prompt and then upload the results to <some other url> –> or maybe not, but I consider it more scary when the "dude" knows what the program reported without the user having to upload. Best is when they also ask the user to turn off their antivirus before performing any of those steps.

    But one funny thing is a lot of users seem to be able to follow all the helpful dude's steps without much or any further help, even though they had no idea of what to do with the original error message. Maybe the hot tip to writing good help text is to imagine yourself as motivated as one of those dudes.

  21. cheong00 says:

    We people answering questions in forums have seen this a lot:

    Say this one:…/script-error-in-days-between-dates

    The instruction to resolve permission issue is on the link given in the error message.

  22. cheong00 says:

    [The software already knows how to solve the problem. Why doesn't it do that?]

    Assuming the word "counterbalance" is the original word in the error message, if there is unsettled bookkeeping data in the system and you try to recalculate/refresh the counterbalance, the result may have difference than the figure it should have been.

    Maybe when the user run "run q refresh" command, it'll show warning that the system still have some "dirty" data and user should add switch to confirm whether to drop/force commit the outstanding data before "refresh", and give a link to a webpage showing how to determine which of the options is what the user should choose.

    So yes, it can and should be potentially destructive.

  23. Micha says:

    >  I can't even explain this away as a TL;DR. How can two sentences, each of which answers a question you asked, count as TL?

    I find it unlikely (given the current information), that the person in question did not read the message. Furthermore, what is your goal here? Do you want to understand what is going on and fix the underlying issue, or do you want to make a statement of the kind: "People sometimes behave stupid, they should stop being stupid!" The later reminds me of a beautiful passage of Harry Potter and the Methods of Rationality:

    | "When you do a fault analysis, there's no point in assigning fault to a part of the system you can't change afterward, it's like stepping off a cliff and blaming gravity. Gravity isn't going to change next time. There's no point in trying to allocate responsibility to people who aren't going to alter their actions. Once you look at it from that perspective, you realize that allocating blame never helps anything unless you blame yourself, because you're the only one whose actions you can change by putting blame there. —

  24. Darran Rowe says:


    Before these comments, I would have found it unlikely that people would have not been able to understand the actual meaning to the post, and then I read the comments.

    But in my experience, if someone is new to something and they have been bitten by these errors, they would be less likely to actually read the error. I have actually not fully read an error myself after getting frustrated at things not going well in the process of learning something. If you are learning, or at least relatively new, those error messages also look and feel a bit like really technical mumbo jumbo that you have no possibility of understanding.

    It is easy to sit in judgment over this and come to the conclusion that it couldn't happen, but ask yourself, why do you think that it can't happen? Most of the time it is actually based on the your view of yourself. How often have you heard things like "what's taking you so long, it isn't that hard"? Statements like that are based on the fallacy of "I don't find it hard" = "It isn't hard". I've even seen/heard this being applied in situations where it is unfair, like when someone is talking behind someone else's back. "Why can't they just finish that physical work, it isn't that hard." But not actually knowing the fact that the person they are talking about has some illness or physical disability that makes that "easy" work a major task.

    There is also another very subtle thing that makes it harder to believe that the actually did read the error message, and that is the simple fact that Raymond did make a post out of it. This post may not necessarily be based upon one person, but a bunch of people doing the exact same thing but Raymond just took one case. He has hindsight to his advantage here, also access to the relevant post(s). What's more, the post could very well be an attempt at putting this information into an anecdotal format.

    Well anyway, what I took away from this post is as follows.

    1) While not necessarily based upon one person, there has been at least one person on the internal Microsoft mailing lists that got confused by what they were doing, and then asked for help.

    2) After asking for help, they were informed that there was an answer to the question in the error itself. As a corollary to this happening in real life, look at the first comment by cheong000.

    3) As an attempt to send across the message of "make sure you try to read all of the message", Raymond decided to write a blog post in an anecdotal format.

  25. Andreas says:

    I'm always a bit wary when a tool tells me to do A to solve B. E.g. mercurial tells me to "push –force" when it fails to push something because the head has been changed (by someone else). That is *never* the correct solution.

  26. James Sutherland says:

    @Andreas: Like the irritating default on a certain other OS of seeing unfamiliar disk formats and defaulting to re-format that drive or partition in something native, thus destroying whatever was on the device before? Very "helpful"…

    My mother still reports web related problems to me as "The Internet's crashed!" Needless to say, the problem is always very much closer to home than the entire Internet having suffered an unexplained global outage.

  27. DWalker says:

    "We people answering questions in forums have seen this a lot:

    Say this one:…/script-error-in-days-between-dates

    The instruction to resolve permission issue is on the link given in the error message."

    Wow.  Just.  Wow.  That link is priceless.  The questioner asks "Is there a way to fix it?"  Sheesh.…/script-error-in-days-between-dates

  28. morlamweb says:


    [The software already knows how to solve the problem. Why doesn't it do that?]

    Perhaps the "q refresh" command is resource-intensive, and running it on a shared server could cause problems for other users on the server?  Running the "q refresh" command would therefore be something that should be scheduled during off-peak usage periods; say, 3 AM local time.  I can draw an analogy to my own experience.  My product uses a database backend, and there's a maintenance procedure that optimizes the schema indexes.  We have a script that reports the last analysis data of the product schemas (among many other things).  Now, that check script could run the schema analysis rather than simply reporting that the schemas are badly in need of analysis; however, the analysis process takes a lot of resources on the database and is best run after business hours.  Running the analysis when hundreds of users are on the system means that the database performance will drop through the floor, and will persist that way for a while, sometimes more than an hour.

    Of course, the "q refresh" command could simply be a destructive action, as other commenters have noted.

    Or maybe it's an internal dev tool, and the author of the tool expects users of the tool to know what they're doing?  I believe that Raymond has written several blog posts on that subject in the past (though I can't find any examples at the moment).

  29. 12BitSlab says:

    @ DWalker

    That is truly scary!  Of course, when you see some of the old "man in the street" interviews that Jay Leno used to do, one starts to realize that George Carlin was spot on when talking about how dumb the average person is.

  30. D-Coder says:

    Most of us reading this site are Spock.

    Some of us are not Spock.

    Many of us who are Spock have moments when we are not Spock.

    Most users are not Spock. We don't hear from the ones who are Spock.

  31. bzakharin says:

    Although I've done this too, saying "people are stupid" is not a good idea for several reasons. First, since "stupid" is a relative term, it's literally impossible for more than 50% of the population to be stupid. Second, what you really mean to say is "look at me, I'm smart!" which maybe you are, but it's not something you publicize like that.

  32. cheong00 says:

    @Boris: "People sometimes behave stupid" is different than "people are stupid". While it's true that "it's literally impossible for more than 50% of the population to be stupid", there is no problem for a lot of actions to be recognized as stupid.

  33. DWalker says:

    Well…  it's impossible for more than 50% of the population to be dumber than the average, but it's possible for 80% of the population to do dumb things some, or all, the time.  

    Are you sure that "stupid" is relative?  It may be possible for 80% of the population to be dumb!

  34. 640k says:

    Software blaming the user because the developer doesn't want to take responsibility for performing a dangerous task. If software can automate a task, why shouldn't it? Software can usually perform most tasks safely, but it might involve the developer to lifting a finger.

    This only indicate cowardness of the developer which has created yet another problem for the user, not solved anything, not saved time for the user.

    I can also think of a couple of reason why the weasel developer doesn't want to make sure that the task is safely automated, and most boils down to "too much work" involved". For the *developer*.

    [In this case, the suggested action was to perform a repair-install of the app. Is that something you want the app to do on its own initiative? From a script? -Raymond]
  35. 640k says:

    If a "repair-install" breaks the app even more, that's still the developer's fault. No matter how it is initiated. Showing an error message only tries to shift the blame from the developer to the user.

    If the app is broken and knows how to fix itself, it should just fix itself. Not "perform a repair-install". There's a difference. That would save time for the user.

    [Automatically performing a repair-install would break any other scripts that are running at the same time. The instructions really are something like "Wait until nobody is using the tool (or about to use the tool), and then run this command to do a repair-install. Note that the repair-install is interactive, so don't do it from a batch file on an unattended system, or you will be screwed." -Raymond]
  36. 640k says:


    Software cannot safely repair itself year 2015.

    [Remember, this is a developer tool, not a consumer product. Do you want git to auto-repair itself? -Raymond]
  37. Helen Munichian says:

    After reading the comments, I've become convinced that a) the user did read the message and b) we should give him credit for asking about it.

Comments are closed.

Skip to main content