Category Archives: Ruminations

How to piss off your users and never be the wiser

I just had an exasperating experience trying to pay my Johns Hopkins hospital bill online, exasperating enough to compel me write about it, and exasperating enough to make me reflect on software I have written.

It started off with my opening an envelope and looking at my billing statement.  I was resigned to paying via snail mail until I noticed some small print saying “go to to pay your bill”.  So, I went there, and was _not_ greeted by a nice big obvious “pay my bill” button, but rather had to click “billing and insurance” from among seven tabs at the top of the page, which when clicked took me to another page headed with the unhelpful text “For answers to your billing and insurance questions, please visit the comprehensive payment information provided by Johns Hopkins Medicine”, and further down which was a list headed with “I want to…” which did include the item “Pay My Bill”, but in slot seven of eight along with other such items as “make a gift”, “apply for a job”, and “refer a patient”.  WTF?  Fine, whatever, I clicked “Pay My Bill”… which took me to another page with a blob of preamble text followed by _another_ list, this time with _twelve_ (!) items, of which item seven was “view/pay your bill online”, which I would swear I had already indicated was the desired task to perform. Clicking this “no, really, I would _love_ to just pay my bill” link I was brought to another page where I was instructed to click on one of three pictures of bills with the captions “Blue Bill”, “Green Bill”, and “Clinical Practice Association Bill”. Blessedly not being color blind, in which case I would have been SOL, I clicked “Green Bill”, which took me to another page where I had to choose whether I was trying to pay a bill for “The Johns Hopkins Hospital”, “Johns Hopkins Bayview Medical Center”, or “Howard Country General Hospital”. I clicked the first link, and was taken to an external site at, finally arriving at something looking like a place to enter payment information.

This external site was also brain damaged. After clicking “pay without enrolling” I was presented with the opportunity to enter my “account number” and “medical record number”. I should only have had to enter a single identifier, a statement ID, but whatever. I entered that information and was brought to another form that had pre-populated my billing amount and that required I do nothing more than hit continue. I was then presented with a delightful form with the form fields configured in such a way that hitting the tab key caused me to alternate between address fields and credit card information fields, because, you know, it totally makes sense to enter my street address, and then my credit card number, and then my city, and then my credit card’s expiration date, and then my zip code, and then the CC’s CVV. Bah, whatever, power through! SUBMIT! Ignore the fact that the enter key never works and I must always use the mouse to click on some stupid button. What, what? “Invalid dollar amount”? But you pre-populated that value for me. And you won’t let me edit it. WTF?! I JUST WANT TO BE DONE WITH YOUR STUPID WEB APP.

Should have just gone the snail mail route… Sunk costs fallacy here we come… No, screw that, I’m not going to fight with this, I’m just going to mail the damn payment and never try to pay a Hopkins bill online again… I’ll use the 17th Century tech, thank you very much…

Except that’s not how this story ends…

And I skipped one of the earlier parts of the story…

You see, at the very beginning of the web app experience I was presented with an in-page pop-up window that asked “do you want to participate in our stupid survey at the end of this ordeal?”, and I of course clicked the “yeah, right, PASS!” button. By the time I was greeted with “invalid dollar amount”, however, I was just about ready to hunt down and murder the developers of this system, and damn it I really wanted to say so in their stupid survey. But, NO! Too late. You said you didn’t want to do so at the beginning of the workflow so now you can’t. WTF? If you had told me I would have been so pissed off by the end of this experience I would have clicked the “hell, yeah” button, but at that point I didn’t know that your god forsaken web app would be so cartoonishly bad that I would be be willing to wage a jihad just to let people know.

So I tried to walk through all the steps again, on the forlorn hope that I would be asked to participate in the survey again, but no such luck. Employing my l337 h4x0r skills I cleared my cookies and went at it once more. BAM. We’re in. “Yes”, I clicked, “I will take your stupid survey”. And then, oddly enough, I was actually able to get all the way through the app with no “invalid dollar amount” nonsense, managing at last to pay my bill.


And stupid it was, the survey… After forty some questions that wanted me to provide a one-to-ten score on such nebulous things as “how would you rate your overall experience”, I found, after much scrolling, a free-text box for “other comments”, which of course would only allow 1000 characters because God Forbid I fill their database with an excessively chatty diatribe on their prodigious failings. So pithily did I expound upon my grievances. But as I was about to hit “Submit” I inadvertently hit the button on my trackball that maps to the browser’s “Back” button, and my input was duly erased. “Fuck you, shitty web app”, I said, “fuck you forever”, and I went on with my life.

Damn it, Hopkins… Your medical personnel are so awesome. Did you spend all your karma points on them and have none left over for your software development staff?

But maybe I’m the asshole. Or maybe, rather, I’m _also_ an asshole, I mean. I write imperfect software, and, really, how great are my channels for getting user experience gripes back to me? How good are the methodologies I have put in place at getting users of my systems to complain productively or, failing that, detecting automatically when the user experience has broken down? Maybe mediocre at best. I talk with users as much as I can manage. I encourage them to email the dev list to ask for support. I have logs of user actions, but, honestly, I don’t yet exploit those logs to the degree I ought. I think I earn some points for having a “Get Help” and “File A Bug” link on every page, but that only provides a mechanism to capture data from one’s most proactive and outspoken users. No doubt there exists a deep vein of ore to be tapped in the form of user visit logs that document specific actions and timestamps. How better to see, at scale, the way one’s user experience breaks down in the hands of real users?

Thus grows the “things I always want when I start a new software project” list, to include not just such things as “a good graphing package” and “a solid testing framework”, but also a means for mining the user experience quantitatively for the application’s shortcomings…

Spinning Up On DCS UH-1H

I got it into my head recently that now is as good a time as any to work on some bucket list items. One such item is flying.

To that end I hopped onto Steam and acquired DCS, i.e. Digital Combat Systems.  By “acquired” I mean “downloaded for free”.  DCS provides a highly realistic flight simulator environment with a variety of aircraft available as purchasable modules.  Fancying helicopters, I opted for UH-1H Huey.

I also wanted some reasonable gear with which to do the flying.  Looking around for a Joystick, the Saitek brand came up repeatedly.  The X-55 controller seemed to offer the latest revision of what I sought, but a bunch of reviews marked it as a step down from the X-52.  I ultimately acquired an X-52, doing so via eBay on account of availability issues, and rounded out my kit with a set of Saitek’s Pro Flight Combat Rudder pedals.  I find both pieces of hardware suitably pleasing.  One forum commenter, a professional helicopter pilot,  indicated that he liked the X-52 but actually preferred the X-45, though I could not find one for purchase at the time.  One of his reasons involved the centering spring on the X-52 that acts to bring the stick back to neutral, something that when piloting helicopters is not particularly desirable.  Various other comments mentioned the possibility of removing the centering spring, but I’ve not yet found the bravery for such a thing.

I have thus far spent a moderate amount of time in the training environments.  These consist of a mix of demonstration by an “instructor” and the opportunity to take the controls and work through a scripted session.  The scripting is not incredibly rich, but it’s decent, and will get you up and running.  I won’t profess any particular greatness, but I can pick up to a controlled hover, take off, land, and do a tolerable job of hitting targets that aren’t firing back at me.  In other words, I have enough experience to have gained a substantial amount of respect for the actual professionals that fly these things.

So far I have bumped up against a few bugs in the game that represented an in congruous lack of polish on an otherwise extremely sophisticated game.  Firstly, the weapons training script would jam at the step where it wanted you to take one of the door gunner positions, on account of the helicopter for the training mission not actually having any door guns installed.  I had to dig up a Youtube video that walked you around that bug by firing up the in-game mission editor. Hrm. After that I got stuck again not being able able to aim the door guns or use the flexible sight until a forum post yielded the bizarre fix of disabling and then re-enabling the “TrackIR” checkbox under the special options section. Bah. Having to do these things was a little bit ridiculous, but I managed.

There were other control-related challenges as well, though perhaps these were not the game’s fault, but nonetheless represented additional stumbling blocks.  One such problem involved the joystick not controlling pitch and roll if my Logitech G-27 Racing Wheel was also plugged into my computer.  Sigh.  And then there was the confusion of the rudder pedals defaulting to messing with my roll if I activated the toe brakes.  Good grief.

But…  Onward!  Having gotten through all of those initial challenges I’m really enjoying figuring things out (like how differently loaded and unloaded helicopters handle).  One of these days I think I shall take lessons in an actual helicopter.  I believe I’ll limit my experience with helicopter combat operations to the simulator, but it would be awesome to get up in the air eventually.  It’s pricey, at an apparent $300/hour for in-the-air time as per some preliminary Googling, but once I’ve done enough simulator time that I’m a little less concerned about killing myself I believe I’ll go for it.

Workflow Tracking

The Financial Times reports that…

General Motors was forced on Friday to add a third batch of vehicles to its faulty ignition switch recall when it said 824,000 previously cleared vehicles might have been fitted with faulty switches during repairs.

The piece continues with the following…

The vehicles were recalled after GM established it could not be sure which batches of vehicles had been fitted with 5,000 of a batch of 95,000 faulty switches supplied to dealers and after-market suppliers. The remaining 90,000 switches were all fitted during repairs to vehicles covered by the previously announced recalls.

That sounds spectacularly painful.

CEO Mary Barra, trying to salvage GM’s reputation, states that they “are taking no chances with safety”, asserting that “trying to locate several thousand switches in a population of 2.2m vehicles and distributed to thousands of retailers isn’t practical.”

Well, maybe… It might not be practical in their present circumstances, but it is not outside the realm of the practical for what an organization with
mature workflow tracking processes in place might be able to do. A company the size of GM would seem almost certain to have at least made serious inroads into such things. Maybe this was an aberration? Or maybe this is a facet of their production operations for which they are only belatedly realizing the criticality of good tracking? Or maybe they have some processes that would help in a situation like this but lack the necessary cross-organization buy-in to execute on it reliably?

There are several related pieces to solving this kind of problem:

  • workflow decomposition
  • workflow element instrumentation
  • workflow element event modeling, to include maintaining provenance
  • workflow element event publication
  • logging of each type of event to an authoritative system
  • construction of Question Focused Databases that index those events usefully
  • definition and enforcement of choke point systems

Each of these things presents substantial challenges in its own right, both political and technical, but the pay-offs can be enormous. Implemented with sufficient generality, such mechanisms not only provide the forensics data to deal with the aftermath of crises, but also yield up the business intelligence to increase efficiencies, identify new opportunities, and detect small aberrations before they become full-blown disasters.

Shooting from the hip, simply working with a number of vehicles in the neighborhood of millions, and assuming recall repair costs around $1000, this single Black Swan Event for GM represents a mistake with a clean-up cost in the vicinity of one billion dollars, and those are only the directly observable costs, ignoring such ambiguous things as customer brand perception and workforce morale, things for which the ultimate costs to the company could dwarf the presently observable costs. So if GM had spent even one billion dollars positioning themselves to be able to know where faulty parts had gone, such an effort would have paid for itself in one fell swoop, and no doubt there would have been an epic amount of gravy to be had.

But let’s not trivialize things… Yes, you can get a lot of mileage out of teasing apart your workflows into well-defined discrete elements, generating provenance-maintaining events that include a UUID and timestamp at every step, and databasing that information intelligently. If, however, you’re a company like GM, your operations are quite sprawling, involving countless third party partners participating in an assortment of support roles. Somehow you have to bring together this mess of data despite having to work with various actors of varying cooperativeness. And even when you do figure out how to do that you still have the problem of all of your legacy systems out in the field giving you heartburn.

But let’s dream… What if every part were stamped with a UUID that could be reported later and linked to the events involved in its manufacture? What if the car itself were cognizant of all the components presently installed in it? What if the car had faculties for publishing the list of all installed components back to the manufacturer, perhaps doing so over wireless channels, thus obviating going to a service station? This would create the opportunity for the manufacturer to know, among other things, where “poison parts” had gone in an ecosystem of millions of cars, allowing them to pinpoint the relatively small number of vehicles with parts installed from known-bad batches, and to do so without the cooperation of the countless middlemen involved in the distribution and installation of such parts.

This is the future. It will be no small undertaking, involving no less than a fundamental re-imagining of how components are built and assembled into a logical whole as well as a careful rethinking of liability and privacy law, but it can be done, and it will be done, almost certainly within a decade, and the implications will be dramatic.

iPhone Progression

I bought an iPhone 5s this week.  I acquired an iPhone 4 in November 2010.  I was introduced to iPhone at 3G in the Spring of 2009.

The 5s seems solid.  It is FAST.  The BlueTooth stuff Just Plain Works.  The thumbprint  access control is awesome.  The display size is increased by an amount an amount that feels like it hits the sweet spot.  I appreciate the things that Siri renders hands free.

Somehow, though, the iPhone loses a certain degree of design elegance every time I buy a new one.  Going from the 3G to the 4, I felt a loss in the physical form, as it went from a beautifully curvy shape to a more boxy one.  I miss caressing the 3G as it nuzzled into the palm of my hand.  Going from the 4 to the 5s, the color palette has gotten bleached.  What happened to the warmth and the gradients?  Compare the interface for dialing a number in the 4 to the 5s.  In the former, you get rich tones and beautiful gradients.  In the latter, everything is white.

I appreciate the raw efficiency of the new.  I mourn the beauty of the old that is gone.  Why can’t I have both?

Maybe what is attractive to Western markets is offensive to Eastern markets and vice-versa, the modern iPhone is trying to be a comprehensively international product, and so everyone gets a tolerable vanilla design?  Or maybe the new scheme is easier on color blind people?

Optimal Distance

This morning I read the Atlantic piece Finding The Next Edison* in which Derek Thompson touches upon the notion of “optimal distance”.  This idea made me reflect upon Hamming’s 1986 talk You And Your Research, the transcript of which I find myself re-reading every few years for inspiration.

To exist optimally distant from a problem entails possessing an expertise close enough to it that you can understand the basics and tinker with solutions but far enough to avoid an over-familiarity that breeds complacency and groupthink.  If, for example, you are laboring to help NASA predict solar-particle events, you’ll likely flounder if you’re an English Literature professor, and you might bog down in the status-quo if you’re a NASA-lifer, but being a retired telecommunications engineer might make you the perfect outsider.

This harkens back to Hamming’s lamentation that…

“When you are famous it is hard to work on small problems. This is what did Shannon in. After information theory, what do you do for an encore? The great scientists often make this error. They fail to continue to plant the little acorns from which the mighty oak trees grow. They try to get the big thing right off.”

Regarding which he counsels us to…

“Somewhere around every seven years make a significant, if not complete, shift in your field. Thus, I shifted from numerical analysis, to hardware, to software, and so on, periodically, because you tend to use up your ideas. When you go to a new field, you have to start over as a baby. You are no longer the big mukity muk and you can start back there and you can start planting those acorns which will become the giant oaks.”

*: We’ll ignore for the moment that Edison was more businessman than inventor and that the piece would have been better titled Finding The Next Tesla.


Having noticed that the Wall Street Journal was double-billing me, I set about to remedy things, assuming they would be reasonable and correct the error. Instead I got a case study in how not to treat your customers and found myself so irate with the outcome that I have severed my relationship with the publication.

I wrote:

I am confused about what I am getting billed. I think I am getting double-billed for access. I seem to be getting charged for both a “digital subscription to The Wall Street Journal” in October, which says it “includes unlimited access to WSJ Smartphone and WSJ Tablet apps” and has an annual cost of $275.88, but I seem to also be getting billed in May again for a “WSJ mobile subscription” at an annual rate of $103.48. Could you please explain what is going on? All I really want to do is read WSJ on my iPad and iPhone but I seem to be getting charged way more than makes sense. I would like to only be paying for what I am using. Could you please tell me what plan I should be on and why I am getting charged twice?

They replied:

Dear Andrew,Thank you for contacting The Wall Street Journal regarding billing.

Our records show you have signed up for 2 Online Wall Street Journal Digital subscriptions.

Please contact us by phone so we may help you cancel one of them.

Best Regards,

Customer Service
Dow Jones

So, I called them, and had a quite unsatisfactory dialog with a customer service representative who was exeedingly difficult to understand. In the end, they would agree only to refund a pro-rated amount for the “unused” portion of the “WSJ Mobile” subscription.

And so I wrote them again:

Joseph,I spoke with a representative on the phone. They canceled my “WSJ Mobile Reader” subscription because indeed it didn’t make any sense for me to have that in addition to the “” subscription which includes everything, including mobile phone access. They agreed to refund a prorated amount of the “WSJ Mobile Reader” subscription, but I feel strongly that that is inadequate. It should not be possible to be getting double-billed for mobile access when you are already paying the fee for full digital access. I’m not sure how this happened, but my credit card records (that only go back 24 months) show that this happened at least last year as well, and I wonder if it has been going on even longer. The $275/year fee for a “” subscription is already quite substantial, and it looks like I have been getting erroneously charged an additional $103/year for a while as well while getting literally nothing in return for it. I believe, therefore, that the honorable thing for WSJ to do in this instance is to refund any amount billed to me for a “WSJ Mobile Reader” subscription that coincided with when I had a “” subscription.


Their reply:

Dear Andrew,Thank you for contacting The Wall Street Journal Digital regarding your digital subscription.

We apologize that you have been paying duplicate subscription for digital subscription and for the mobile reader subscription.

Our record shows that your subscription was in automatic renewal, we see here that you signed up for a trial of the mobile reader subscription for 14 days and after that you agree to renew it for one year for $52 that was last May 1, 2010. While you have that subscription you registered again your credit card information to have your digital subscription for $155 on October 15, 2010.

Those are the payment history we have seen in your account however, you now have one digital subscription and it is enrolled in automatic renewal.

If you have any questions or need any further personal assistance, please write again or call us at the Customer Service number below.

We invite you to try WES Portfolio (, our new tool that lets you track your brokerage accounts through Portfolio automatically provides current and historical performance data for your holdings as well as relevant news and alerts impacting your investments.

Thank you for your interest in our publication.

Best Regards,

Customer Service
The Wall Street Journal. Digital Network

Not satisfied, I wrote again:

To Whom It May Concern,

So, your records and comments do agree that I have been getting double-billed for some time. I appreciate the apology, but by itself it is not adequate. I believe that concrete amends must be made by refunding what amounts to erroneous billing due to either a software or policy glitch. I have been a loyal WSJ subscriber for about a decade. I hope that the newspaper can be sufficiently farsighted to make things right and that we can resolve this matter without further undue efforts on my part, thus allowing me to be a happy paying customer for many years to come.

Based on a combination of your comments, my memory, my credit card billing records, and Google searches, I deduce that the following has happened… For several years, I had a “” subscription that gave me access to your web site, which per your records cost $155/year as of October 2010. The WSJ subsequently introduced a mobile version of the paper that I was able to view for some time without additional charge. Some time later the WSJ started charging for the mobile addition and I agreed to pay for a “Mobile Reader” subscription to continue my access. Then it appears that that the “” subscription changed to include mobile and tablet access, and in reflection of this had its price increased to $275/year. It seems, however, that even though the mobile access for which I was paying approximately $100/year had its features rolled under the “” subscription plan, and even though the billing department raised my “” subscription rate to $275/year to reflect the change, the billing department also continued to bill me ~$100/year for mobile access for multiple billing cycles, a clear and unacceptable instance of double-billing.

If this is case, and all signs point to such, this is clearly improper and must be corrected. It is not adequate merely to refund a pro-rated amount for the “Mobile Reader” subscription for the billing cycle that began on May 2013. It is the newspaper’s ethical obligation to refund the full amount of the “Mobile Reader” subscription for that billing cycle and for any previous one that overlapped when I was being charged the increased amount for the “” subscription that included mobile access as part of its price. That is the decent and honest thing to do, as I am sure you will agree.

I sincerely hope that the newspaper can set this right of its own volition and that I won’t be forced to do something as odious as issuing credit card charge-back proceedings or get so irate that I cancel my subscription permanently.


Grimly determined not to provide customer satisfaction, they replied:

Dear Andrew,

Thank you for contacting The Wall Street Journal regarding your payment history. We are sorry that you were paying for 2 separate accounts.

We do have several customers that have multiple accounts. We do not stop one account just because another one is started or the access is included in another account. It is up to the subscriber to call in if they want one of their accounts stopped.

Please accept our apologies for the inconvenience. If you need any further assistance please respond to this email, or contact us using the information below. Thank you for being a part of Dow Jones, publishers of The Wall Street Journal.

Best Regards,

Customer Service
Dow Jones

Stubbornly giving them one last chance:

To Whom It May Concern,

Can you please explain why anyone would ever want to have a “Mobile Reader” account in addition to a “” account since the former includes the latter? I am not a business paying for employee accounts with different user names, I am not providing a gift subscription to someone else with a different user name, and I am not maintaining multiple print accounts to be delivered to separate locations. There does not seem to be any logical reason why I would maintain a “Mobile Reader” subscription and “” subscription at the same time for myself.

It seems that, through a combination of billing software that fails to detect such anomalies plus multiple restructurings of subscription plans over several years, a situation has emerged in which customers under certain circumstances, such as myself, will see their bills rise substantially while receiving no additional services unless they detect the condition themselves and manually correct it. Apparently it is not even possible via the website to correct subscription issues, requiring calling a customer service associate on the phone.

I have been a loyal and paying customer of the digital edition of the WSJ for approximately a decade, to include being willing to shell out the extra money for the mobile edition. I would like to continue to do so. However, if the newspaper is willing to gamble thousands of dollars in long-term subscriptions fees in order to extract a relatively modest amount from me right now by engaging in what appear to be deceptive business practices, then I don’t think I will be able to stay as a happy customer. I am asking you, one last time, to make this right by compensating me for the double-billings, and if you cannot do so then I would like to have my “” subscription that renewed just a few days ago canceled immediately and refunded in full, and I will furthermore be commencing credit card charge-back proceedings. Paying customers deserve better treatment than this.

Make this right.


And now the finale of tone-deafness and suicidal recalcitrance:

Dear Andrew,

Thank you for contacting The Wall Street Journal regarding your request to cancel the account. We apologize for the inconvenience.

Please call 1-800-JOURNAL (568-7625) to cancel your account by phone. Our hours of operation are Monday through Friday, 7 am – 10 pm ET; Saturday 7 am – 3 pm ET. If you are calling from outside the United States please contact us at 1-609-514-0870 for assistance or visit ( for international dialing options.

We appreciate your patience and hope to hear from you soon.

Best Regards,

Czarina Mae
Customer Service
Dow Jones

Wow. Alright, then…

Nuke the entire site from orbit. It’s the only way to be sure.

Subcription cancelled.

Credit card chargebacks forthcoming.

There is plenty of other stuff to read on this planet put out by companies that don’t treat their customers like garbage.


True Enough (Some Yak Shaving Required)

“Do you have a stationary bike?”, doc asked, inquiring as to my capacity to do self-directed physical therapy in the aftermath of some surgery to help loosen up my leg. “No…”, I replied, but shortly thereafter set about remedying that.

I figured purchasing a cycling trainer might be a good investment and set about doing some research. After ruling out the wind- and magnetic-resistance style trainers, and settling on purchasing a fluid style trainer, it came down to either a CycleOps Fluid 2 or a Kurt Kinetic Road Machine. They seemed close, but the latter appeared more solidly engineered, and thus I went. I did, however, buy a CycleOps Stackable Climbing Block for the front wheel, on the grounds that the corresponding piece of equipment sold by Kurt did not look nearly as nice (it seemed to bite the tire in an altogether unfriendly way instead of making well distributed contact).

No sooner had I received the trainer and hooked my bike up to it I was a little dismayed. I was getting a whump-whump noise that seemed sync’d to the rotational frequency of the wheel. I figured the wheel must be out of true and so cracked open my copy of Zinn & the Art of Road Bike Maintenance, jumped to the “Wheels and Tires” chapter, read up on the corresponding material, and realized that my tools did not include a spoke wrench or a truing stand.

After some cursing I eventually found my calipers, measured the nipple size for my spokes, took my best guess as to what the calipers were saying (the damned button-battery was dead) and matched that up to the various sizes of wrench in existence, and ended up ordering a Park Tool “SW-40 Four Sided Spoke Wrench”, the .127 inch variety.

After some more research, I found myself thinking that the truing stand was unnecessary. I thought about the Park Tool “TS-2.2 Professional Wheel Truing Stand”, but I couldn’t convince myself that I really needed it, not with a sticker price of $250, and not without the ambition to run a bike shop. I can definitely see how it would be nice, so maybe I will spring for it eventually, but I have to fight the temptation to spend my whole paycheck on Amazon. It’s just too easy.

The way I ultimately did the work was as follows:

  1. attach the bike to the trainer (leaving the resistance mechanism unengaged; I could have also used my bike stand)
  2. turn the crank to get the wheel going
  3. gently apply the rear brake and listen for a cyclic whump sound, indicative of the rim scraping one side of the brake calipers at one or more locations
  4. if the sound is sufficiently untroubling that you are satisfied, you’re done!
  5. apply the brake until the sound gets really pronounced
  6. back off on the brake a little bit, maintaining an audible sound
  7. let the wheel come to a stop
  8. gently spin the wheel by hand and find where it is catching the brake, either flinging the wheel and seeing where it stops, or gently turning it by hand and feeling where it meets friction; continue to hold the brake at a constant tension
  9. draw an O on both sides of the rim at the problematic spoke pair
  10. with the wheel still in the sticky location, look at the brake calipers and determine which side of the wheel is hitting the brakes; you can release the brake now
  11. keeping track of the spoke pair needing attention, swing the wheel such that the place that the rim meets those spokes is at the bottom
  12. using the spoke wrench, tighten one quarter turn (turn counter-clockwise when looking down at it) the spoke that emanates from the hub opposite the side of the brake caliper that was scraping, and loosen one quarter turn (turn clockwise when looking down at it) the spoke that emanates from the hub on the same side of the brake caliper that was scraping, thus pulling that portion of the wheel away from the scraping side of the brake caliper
  13. record which way you pulled the wheel by drawing a little plus symbol on the side of the wheel toward which you adjusted it, thus keeping a record of all the changes you made during this session
  14. go to step 2

When I re-engaged the resistance mechanism of the trainer with the real wheel, hopped on, and started peddling, the whump-whump sound was gone.

Bike hackin’ skillz!

The Great Forgetting

To The Atlantic Editors,

While overall I agree with the thesis of Carr’s November 2013 piece, The Great Forgetting, I am disappointed with at least one item of proffered evidence that suffers from multiple substantial flaws. In particular, he cites “one recent study, conducted by Australian researchers, [that] examined the effects of [software] systems used by three international accounting firms”. From the limited presentation of the study, it would seem quite likely to conflate causation and correlation, rendering it largely useless. Furthermore, the attribution of the study merely to unnamed “Australian researchers”, with no mention of a study name, institution, publication, or date, makes it impractical to find the source.

We are told that “two of the firms employed highly advanced software” while a third firm “used simpler software”, the former providing a large degree of decision support functionality compared to the latter. Subjected to “a test measuring their expertise”, we’re told that individuals using the simpler software “displayed a significantly stronger understanding of different forms of risk”. And… What are we to believe about this?

The study’s presentation seems to imply that the overly helpful software atrophied the brains of the workers in the two firms using it. Maybe that is true, but we don’t actually know that such a causal relationship exists. As an alternate explanation, perhaps the two firms that use the (purportedly) more sophisticated software generally hire lower caliber accountants and have decided that more intrusive software is the only way to get acceptable results from them. Furthermore… Was proficiency of individuals measured both before and after exposure to the firms’ software? How long did the individuals use the software? Were the sample sizes large enough to avoid statistical noise? Were there any meaningful controls in place for this study?

Carr has apparently interpreted this study in a way that makes it convenient to weave into the larger narrative of the piece, but as it was presented it fails to support his thesis. Such careless cherry picking undermines a very real and otherwise well articulated issue.


StarCraft Life Lessons

After a hiatus of seven years, StarCraft has come roaring back into my life with the release of StarCraft 2. Given the game’s phenomenal richness and complexity, I cannot help but draw parallels between its challenges and those of life writ large.

To succeed at StarCraft, a player must be able to shift between macro and micro management tasks as well as cycle with fanatic discipline through a variety of distinct but intimately related macro management tasks. Focus too long on micro management tasks, and though you may win present battles, you’ll find yourself without troops to micro manage later. Focus overly much on particular macro management tasks, and you’ll eventually find those tasks impossible and undermined. The various facets of StarCraft make up a tightly coupled system of systems that all must operate well to be successful. So, too, with “real” life…

A solid StarCraft player is running a tight loop in which he/she polls a variety of subsystems and issues commands to them to optimize the system’s state. Such high level queries follow…

  • Are adequate workers being built?
  • Do I have idle workers?
  • Do I have adequate supplies?
  • Do I have enough resource flow?
  • Do I have enough production capacity?
  • Am I spending my resources?
  • Do I know what kinds and quantities of units my adversaries are building?
  • Do I have enough expansion bases?
  • Can I see enough of the map?
  • Have my adversaries acquired expansion bases?
  • Do I know where my opponents’ units are?
  • Are my units well positioned?
  • Have I upgraded my units’ strength and abilities?
  • Am I about to be attacked?
  • Am I harassing my adversaries enough?
  • Can I handle cloaked enemy units?
  • Can I handle highly mobile enemy units?
  • Can I handle long range enemy units?

You do not want to switch to a sub-task because it became a problem. Rather, you want to cycle through tasks and hit each one before it becomes an issue. If you’re frantically building Turrets in your base because you’re being overrun by cloaked Banshees, you’re doin’ it wrong. If you’re popping out additional Supply Depots because your supplies are maxed out, you’re being reactive instead of proactive. More generally, if you’re only doing a task because some other task is actively blocking on it then you are doomed.

The exigencies of life have a way of making one focus on the most obviously looming problems at the expense of other issues until they start to provide more concrete impact. Therein lies the path to unhappiness and ineffectiveness. If you’re expending all of your effort on your project at the office, then you’re neglecting your health, neglecting financial management, neglecting continual learning, neglecting to keep up on current events, neglecting your relationships, and so on. Eventually these neglects will undermine the thing on which you are attempting to focus, causing you to fail at everything.

To break out of such a rut requires a conscious and concerted effort. Build a loop in which you poll the various facets of your life. Keep asking “Am I making progress in this arena of my life?”. Keep a trail of your progress and/or set and observe concrete milestones. Keep a journal. Keep a log book. Keep shelves of books you have read. And so on…

But don’t go for 300 Actions Per Minute in your daily life… The frenetic pace of StarCraft is not the pace one wants in life as a whole. That said, the regular and proactive monitoring and management of multiple tightly related sub-goals can serve as the underpinnings of a satisfying life.

To be more relevant to a purported software blog… A successful software project presumably also results from a well run “health” management loop…

  • Am I delivering useful features to customers?
  • Am I returning to messy code and cleaning it up?
  • Am I writing enough automated tests?
  • Is there enough documentation?
  • Do I have good configuration management?
  • Am I validating the usability of the user interfaces?
  • Am I exposing good APIs?
  • Is the system going to scale?
  • Am I managing compliance issues successfully?
  • Am I making good use of existing technologies?
  • Am I anticipating the impact of coming technologies?
  • Are my team members in good spirits and growing?
  • Am I aware of my competitors’ status and plans?
  • Am I keeping my partner organizations adequately informed?
  • Am I keeping my management apprised of political and resourcing issues?


Presentation Fail

OSCON has reminded me over and over again this week that most people do not know how to give an engaging presentation. Worse still, OSCON in nature attracts a diverse crowd, making “deep dive” talks generally a bad idea, and yet so many presenters dive right into the deep end without offering the audience adequate context. Finally, far too many presenters fail to realize that entertaining an audience vastly improves the chances of educating an audience.

Three questions inhabit the fore of your audience members’ minds. Why should I care about this issue? What do you have to offer that others haven’t already? Why should I believe you? Sadly, many presenters jump straight into describing some system they built or research they conducted without answering the first question. Consequently, whatever they have to offer for the second question is lost. If they get around to the third question at all the audience has lost interest unless they were already domain experts.

A simple template for success follows:

  1. describe a real world problem that any layman could understand to offer context for why one should care
  2. go through some crude solutions and explain their limitations
  3. describe superior solutions and how they address the limitations of the simpler ones
  4. provide concrete examples of your solutions in practice, offer statistical data that support your thesis, and include rich yet elegantly compact visualizations

Also, please, please, PLEASE do not fill up all of your slides with a bunch of text. Your slides should exist as a conversational backdrop and a visual aid. They should provide complementary presentations of the words coming out of your mouth. If you must, use note cards for cues on where you want to take the conversation, not your slides. Filling your slides with a bunch of prose fragments squanders a valuable information channel.

Lastly, and before giving the presentation to a large audience, conduct the analog of a “hallway usability test”. Grab one of your hapless colleagues or friends, subject him to your presentation, carefully assess his involuntary reactions, and ask for feedback (maybe even quiz him on the key points). Was he board and fidgety? Did he fail to grasp and retain the key points? If so, then either the presentation is boring or your delivery is flawed. Refine the content. Practice the delivery on another colleague.

Too many people mistake “making slides” for “preparing to give a presentation”. Don’t be one of them. Don’t assume that people will love your talk just because you love the subject of the talk. Have some empathy for your would-be audience and then test your presentation theories. Don’t speak in a monotone. Have some showmanship. Give the crowd opportunities to be active participants. Your audience will thank you.