Apply today for a FREE subscription to CIO Magazine!
Sun, Aug 17, 2008 19:01 EDT

|
Posted by: Esther Schindler in Best Practices Topic: Personal ManagementBlog: Developer Wisdom
Current Rating: |
We fix the problems we know to look for. It's the assumptions left unexamined that are apt to bite you. Which superstitions are you carrying around that need to be re-examined?
One of the wisest, most brilliant programmers I ever met had a team lead habit I loved. If you made a technical assertion, Mike would ask, "Is that true?" Mike didn't ask the question to imply you were wrong; he asked, "Is that true?" to challenge your assumptions and to determine upon what data you drew your conclusions. If you said, "Yes, that's right. Here's why..." and made it clear your statement came from somewhere, he'd be satisfied, and you'd earn his respect.
If the programmer stuttered, "Um, I guess it's true," instead, more often than not the programmer headed back to his office to find out the real story. Or Mike would help the developer re-examine the assumptions being built into the software. If the assumptions made sense, fine. If not, it was an opportunity to write better code.
That wasn't just a technically interesting exercise. At the time I knew him, Mike and his team were building a compiler to generate the fastest executables possible. Nanoseconds counted. And with Mike at the helm, one particular math routine went from average performance to outstanding to... zero cycles. Because the "Is that right? Is that true?" question process eventually made the team realize that they didn't need the routine at all. Now that's code optimization.
At the other extreme, let's say you want to "uniqueify" an array in JavaScript (that is, find all the unique values in an array). You'll find a bunch of code samples with a quick online search. Most of them look very similar to one another, and they take a dumb, brute-force approach of walking the array multiple times. Bad performance, no biscuit. But hey, that's how everyone does it, right?
If you handed that code to an expert programmer like Mike, he'd ask, "Is that the best solution?" Well, no, maybe not. There's a way to do it that walks the array just once, if you take the time to think about it.
At the Schindler bitranch, we call these "superstitions:" information accepted on faith, without personal knowledge or examination. People pass along "everyone knows" data without questioning it, and others repeat the superstition as though it's undeniably true. Confidence isn't knowledge; in fact, confidence can prevent knowledge and innovation from happening, because an unquestioned belief means you never measure, never test, never look at alternatives.
My example above is about application performance, but this questioning-method applies to everything a developer does, from project estimation to designing for end-user usability. And it applies to every field! Stained glass artists accept as superstition that "lead is stronger than copper," but has anyone tested this assertion? Is it true? Some early experiments imply copper is equally strong. Woodworkers nod along when someone else mentions-in-passing which type of joint "everyone knows" is strongest; it wasn't until a couple of years ago that one magazine actually tested different kinds of joints for strength (with surprising results).
Superstitions are strongest (and most dangerous) when these "everyone knows" data points are hard to confirm or deny (such as most discussions of search engine optimization, since Google ain't talkin') and where "proof" is possible only through data triangulation. It's worse for developers and people in IT, I think, because things that were true a few years ago no longer are. In addition to questioning our own assumptions (or, as politely as
Thank you fot that Essay. I like the advice! Maybe one can use another less offensive question like "can you Explain why" or "thats an interesting fact, where does it come from". However if the team is used to "is that true" questions that can be a totally new culture everybody accepts.
That's good advice, but be aware that there's a cost to questioning assumptions as well. It's one thing for Mike, as the man in charge, to question subordinates, it's quite another if you want to question dogma in public--like if the benefits of TDD are true.
After all, that's what I get paid for -- tilting at other people's windmills!
Very, VERY good points here, Esther, with applications far beyond programming. Some of the greatest breakthroughs in science -- not to mention everyday wins in business -- arise from this kind of inquiry. It's hard to get out from under our assumptions, bit so very worthwhile.
Is it true that we should be as polite as possible?
What is the problem about being straightforward and assertive in testing assumptions?
If a professional cannot dispassionately accept examination of their work, then they deserve to feel embarrassed or whatever when their assumptions are challenged.
It seems that the real trick is not to focus on the comfort of the individual, but on building team cohesion. If a member is convinced of the team's fundamental acceptance, then superstition assertions become opportunities for team growth; the team learns when fundamental truths are proved, the individual learns by having blind spots exposed.