You Must Try, and then You Must Ask
blogs.akamai.com
blogs.akamai.com
By forcing yourself to try for 15 minutes, you gain a deeper understanding of what you're troubleshooting so that, even if you don't fix it in 15, next time you're in a better position to troubleshoot than you were the last time.
And by forcing yourself to ask for help after 15, you not only limit the amount of banging-your-head time, but you also get to see how the other person solves the problem while all the details are still fresh in your mind, so that you'll more likely have a deeper understanding of why what you were doing to fix it wasn't working, and why the ultimate solution actually worked.
At least after fifteen minutes you have enough information where you can, hopefully, clearly articulate your question with enough detail. There are times where questions are fielded to me and it was simply "this does not work" where after fifteen minutes of legwork the answer was solved along the way.
Often the answer is found simply by questioning yourself. http://en.wikipedia.org/wiki/Rubber_duck_debugging
Part of it is incentive structure. That is, detecting when a team implicitly rewards augering in on a problem when stuck. After that, showing that there's no loss of credibility for asking questions and that answering reasonable questions is part of the job.
After that, subsequently rewarding people who "try and ask", which will net out to more productivity anyway.
Wow. Yeah. There are many paragraphs to write about this. Thanks for the food for thought!
My position has made a divide between me and some of the developers because I'm out of the normal management structure. It may be a natural "fear of the unknown," but the ways that I try to counterbalance this:
* Give them interesting or fun problems to solve;
* Debate and challenge their ideas openly;
* Admit that (most of the time) I have absolutely no idea what I am talking about.
I usually end most coffee conversations egging them on and telling them to test their theories. I think by creating a better team environment the fifteen minute rule may organically be followed.
It's not spending 15 minutes to go over all assumptions that makes me solve it. It's telling someone I can't solve it. It's the act of saying I can't do it.
I often start writing an email telling someone I can't solve a problem, and while writing I realize something I haven't tried. Then I stop, go try it, and it turns out to solve the problem. But if I don't start writing that email, and instead try to work on the problem for 15 more minutes, I don't solve it.
It's as if I don't take the problem seriously otherwise.
This is very similar to the 15 minute rule, only it's more efficient, since it takes less than 15 minutes to write that email.
So I would argue solving the problem has more to do with admitting you can't solve it than it has with going over assumptions. It triggers something in your brain that frees it to look at options it hasn't looked at before.
I thought it was the possibility you might embarrass yourself to the person you are emailing that helps solve it. But the strange thing is I also solve problems only after I send that email. My mind refuses to look at the problem from a different angle otherwise.
I want this to be defined as misconduct. People need to be fired for repeat offenses. If they can't at least explain what they did and what the actual result was, they're incompetent. If they won't, they're ridiculously lazy. In either case, they need to be out of a job.
So now when I'm tempted to ask a question on SO, I write out the question in a text editor, giving as much detail as possible. It's not a 100%, but I've found that going through the process of trying to frame a question intelligently goes a long way toward figuring it out myself.
My advice is to post the question anyway. And then when you solve it minutes later, post the solution too. That way you'll be providing a net increase to our collective knowledge while also helping yourself.
More relevant to HN viewers: If you're doing work on a production server, ask before trying. The cost to your corporation of you failing and bringing down a mission critical service is typically greater than the context switch of one additional person to make sure you're doing it right.
I'd suggest to try also with a step in between. Something like: try for 15 minutes, if you still can't find the solution, go for a quick break, like getting a coffee, and if the solution still doesn't magically appear, ask someone.
I lost count of how many times I solved a problem while getting up to get coffee, after trying hard to find the answer for a few minutes. I can't be the only one.
http://www.catb.org/esr/faqs/smart-questions.html#intro
Strongly recommended to hackers.
ETA: oh snap! Didn't realize that someone else posted this link above as a reply to a different comment. Oh well, you can never have too much rubber duck debugging!
In the process of writing up a clear and detailed post, which often involves simplifying the problem into something reproducible on jsfiddle, I suddenly see the answer.
Instead of hitting submit I can just close my browser tab.
The person you ask can focus on the parts that you didn't figure out for yourself. And, you may have gained a different perspective and/or insight into deficiencies or additional options that is actually of interest to the person you talk to (write, IM, etc.).
Viola. You just turned a lecture into a more interesting and engaging conversation.
15 minutes of documenting exactly why you have no idea how to proceed sounds about right. If you need longer, you probably haven't whittled down the problem sufficiently, and you can make progress that way.
More importantly, by the time a person realizes they're going in circles, they've actually been going in circles for probably twice as long.
When I started, I had very little experience, but a willingness to learn. My boss hired me anyway, and it moved from pushing paper to labs to "OK, we need to update this web application" and "I need you to learn how to deploy a very customized Windows image for 300 computers, and learn to maintain them." Since I was much younger, first as a student and then a full-time employee at uni, it was easy to ask my bosses (the first, if you can believe this, actually wrote his own code to hide a password in the bootloader to run some admin task on the first boot after imaging and then delete after completion; with Windows installations and incosistency, it took him months to get that write; he now is a full-time lit nerd and author, talk about renaissance man) and tell them everything I did and needed help. Not only did that teach me to solve the problem, it taught me how to approach computer problems (kind of like the OSI stack, but more general than networking, and not as shitty as "turn the computer on again and off again") and then onto "how do I debug stupid coding mistakes in scripts with the least time possible" (answer: it might not be a production app, but make sure your scripts have good on-and-off logging infrastructure or you will be sorry).
Unfortunately, I moved on from that job. And if this long-winded post is any indication, I am now seen as too chatty and annoying with this approach where I work. Some people get it, while as the other more senior infrastructure people see it as me questioning them when I ask for explanations or better tips to troubleshoot issues I could see (not that are there, but potentially could see) from my end and know when to leave them alone. As others pointed it, it is essential to enforce this on everyone, and in many institutions, that is seen as being chatty and nosy.
I learned a lot through my mentors, and I wish this could be imposed everywhere I worked and work, but many oppose this as questioning authority. I wish it was different, but oh well.
I noticed that going home early and tackling the problem early the next morning helps more than the 2-3 hours I spent with no success.
-John Stuart Mill: AutobiographyI think the reason why this works well is because you are force to document and make it as easy to understand as possible. There are complex problems, but it is easier to solve if those problems are broken down into solvable pieces.
I, um, "know people" that have been on that end of the spectrum.