{"id":78015,"date":"2016-04-25T00:01:54","date_gmt":"2016-04-25T07:01:54","guid":{"rendered":"https:\/\/blogs.technet.microsoft.com\/heyscriptingguy\/?p=78015"},"modified":"2019-02-18T09:10:47","modified_gmt":"2019-02-18T16:10:47","slug":"how-to-answer-a-technical-question-a-guide-for-presenters","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/scripting\/how-to-answer-a-technical-question-a-guide-for-presenters\/","title":{"rendered":"How to answer a technical question: A guide for presenters"},"content":{"rendered":"<p><strong>Summary<\/strong>: Learn how to properly answer a technical question in a presentation in this step-by-step post by PowerShell MVP June Blender.<\/p>\n<p>Today we have another blog post by PowerShell MVP June Blender. June is an Honorary Scripting Guy and a technical evangelist for the SAPIEN\u00a0Technologies, Inc. She has been working with PowerShell for a long time. When she worked for Microsoft, she wrote the PowerShell help documentation. If you have ever used <strong>Get-Help<\/strong> in your life, more than likely you have seen some of her work.<\/p>\n<p>Take it away June \u2026<\/p>\n<h2>How to Answer a Technical Question<\/h2>\n<p>Like many people, I look forward to the PowerShell Summits (plural) all year. It&#8217;s my time for intense learning and deep collaboration. This year, I was honored to be a speaker along with true greats, like Don Jones, Jason Helmick, Mike Robbins, Ed Wilson, and Jeffery Hicks. I spent months on the research for my Pester talk, weeks writing the code, and many days practicing the delivery so that I covered the most important concepts in the allotted time.<\/p>\n<p>But, I didn&#8217;t practice answering audience questions. And, when the time came, I flubbed an answer. I didn&#8217;t get it wrong, but I went off on a tangent because I focused on what was interesting to me instead of what the questioner needed to know.<\/p>\n<p>So, I spent some time thinking about best practices for answering technical questions. It turns out that it&#8217;s very similar to best practices for writing help. It begins with listening, considering the questioner&#8217;s point of view, and answering the question that the questioner\u00a0asked.<\/p>\n<h2>The Question: Is #Requires a comment?<\/h2>\n<p>The question arose when I showed a <strong>#Requires<\/strong> directive in my integration test script.<\/p>\n<p>The questioner asked: &#8220;Isn&#8217;t that #Requires just a comment?&#8221;<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/HSG-4-25-16-1.png\"><img decoding=\"async\" class=\"alignnone size-full wp-image-78025\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/HSG-4-25-16-1.png\" alt=\"Screenshot of #Requires -RunaAsAdministrator in example code.\" width=\"755\" height=\"198\" \/><\/a><\/p>\n<p>&#8220;No,&#8221; I said, and went off about all of the <strong>#Requires<\/strong> directives including my favorite new thing, which is using a module specification object as the value of the <strong>#Requires -Module<\/strong> directive.<\/p>\n<p>I didn&#8217;t even think to run my script in an unelevated session to show the error that results. I didn&#8217;t mention the <a href=\"http:\/\/go.microsoft.com\/fwlink\/?LinkID=135190\" target=\"_blank\">about_Requires<\/a> help file.<\/p>\n<h3>Step 1: Listen<\/h3>\n<p>Whether you&#8217;re at your desk reading forum questions or in the middle of a presentation while your adrenaline is spiking, it&#8217;s important to take a deep breath, clear your mind, and listen carefully to the question.<\/p>\n<p>Before jumping to a conclusion, be sure that you understand what the questioner wants. It might not be exactly what they say. Examine the context of the question, if it&#8217;s available, or ask followup questions to clarify the question.<\/p>\n<p>When you&#8217;re answering in a public venue, there might be many people with the same question, and they might have different perspectives. Consider your answer carefully, remembering that you are likely to be answering not just this questioner, but many others.<\/p>\n<p>A &#8220;Why did you do it that way?&#8221; might mean that the questioner has thought of a different way (&#8220;Why did you do it that way instead of this way?&#8221;), or it might mean that the questioner doesn&#8217;t understand the technique that you&#8217;re using (&#8220;What are you doing?).<\/p>\n<p>A &#8220;Can I do this?&#8221; might be a question about whether it&#8217;s possible to solve this problem by using PowerShell (or a different technology), or it might be a request to validate that path of inquiry, in which case, the complete answer might be &#8220;Yes&#8221; or &#8220;No.&#8221; Most importantly, it might not be a request for you to tell them everything that you know about the topic, although you might suggest a technique.<\/p>\n<h3>Step 2: Don&#8217;t get defensive<\/h3>\n<p>If someone questions your technique, especially when you&#8217;re on stage or on a public forum, it&#8217;s easy to get defensive. But the goal is to share information so everyone ends up wiser. I&#8217;d rather learn something new and take a little hit to the ego than to ignore the question and miss the opportunity to learn.<\/p>\n<p>If the suggested technique is better, celebrate! And thank the questioner. My user group presentations have improved significantly because participants have shown me new and better ways to do things. The result is truly a community product, even though I&#8217;m the presenter.<\/p>\n<p>But, if the suggested technique is flawed, acknowledge and affirm, and then correct.<\/p>\n<h3>Step 3: Acknowledge and affirm<\/h3>\n<p>People ask questions for many reasons. They might be missing information. They might be confused or stuck. They might have a different idea. But, by speaking up, they&#8217;ve contributed to the conversation and might have made themselves a bit vulnerable.<\/p>\n<p>Begin by acknowledging the question. Repeat or rephrase it to show that you&#8217;ve heard and understand. Empathize with the questioner. (&#8220;Yes, you&#8217;re right. It looks like an unnecessarily complex approach.&#8221;) Compliment or thank them. (&#8220;Great question. Thanks for raising that issue.&#8221;)<\/p>\n<p>Affirm that the suggestion might sound reasonable or might work in particular circumstances. Explain the advantage of your technique. But, be sure that you never shame or discourage the questioner. You want to encourage them to participate because their next suggestion might be the one you really need.<\/p>\n<h3>Step 4: Correct any misconceptions<\/h3>\n<p>A questioner might have an incorrect conclusion because of a flawed assumption. If you think that you know the root cause of the error, try to correct it. But, be careful that you don&#8217;t assume incorrectly, or you&#8217;re likely to further confuse the questioner.<\/p>\n<h3>Step 5: Answer clearly and demonstrate<\/h3>\n<p>A great answer is like a great help topic in that it starts with clear, simple language. Keep the verbs simple. Avoid technical jargon. Don&#8217;t be clever.<\/p>\n<p>If you can, demonstrate. That&#8217;s not always possible in a presentation that&#8217;s strictly limited by time. But, in a forum or a user group with more flexible time boundaries, back up and show the effect of using the questioner&#8217;s idea.<\/p>\n<p>Keep it simple. Learn when to stop. Do not give an academic or technical lecture on an entire field of inquiry, as I&#8217;m prone to do. Just answer the question. An answer that has\u00a0too many details is as unhelpful as an answer that has\u00a0too few details.<\/p>\n<h3>Step 6: Suggest references<\/h3>\n<p>Follow up with good information sources for the questioner. When I ask a question, I love when the answer includes a reference to content\u00a0that has a full and detailed explanation of the context and the solution.<\/p>\n<p>Help files are a great start, but there are also excellent blog posts and videos.<\/p>\n<h2>The Answer: Isn&#8217;t #Requires just a comment?<\/h2>\n<p>This time, I&#8217;ll do it right.<\/p>\n<p>Isn&#8217;t #Requires just a comment?<\/p>\n<p><strong>Step 1: Listen<\/strong><\/p>\n<p style=\"padding-left: 30px\">Take a deep breath. This person is likely to be a PowerShell beginner. Prepare a respectful answer that doesn&#8217;t embarrass them. They probably know a lot about something else than I do.<\/p>\n<p><strong>Step 2: Don&#8217;t Get Defensive<\/strong><\/p>\n<p style=\"padding-left: 30px\">No reason to get upset about this one. Next step.<\/p>\n<p><strong>Step 3: Acknowledge and affirm<\/strong><\/p>\n<p style=\"padding-left: 30px\">Ah, yes! You&#8217;re right. It does look like a comment. The <strong>#Requires<\/strong> statement begins with a pound or hash sign (#) just like a comment. In fact, the text turns green just like a comment, which shows that this confused the syntax coloring logic, too.<\/p>\n<p style=\"padding-left: 30px\">[Aside: It turns green because the pound sign fools the PowerShell syntax tokenizer. But, don&#8217;t go there. This is my indulgence. It would distract the questioner, who is a beginner. <span style=\"text-decoration: underline\">Do Not<\/span> do this demo.]<\/p>\n<p style=\"padding-left: 30px\"><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/HSG-4-25-16-2.png\"><img decoding=\"async\" class=\"alignnone size-full wp-image-78035\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/HSG-4-25-16-2.png\" alt=\"Screenshot that demonstrates how the #Requires statement fools the syntax tokenizer into thinking that it\u2019s a comment type.\" width=\"772\" height=\"221\" \/><\/a><\/p>\n<p><strong>Step 4:\u00a0 Correct any misconceptions<\/strong><\/p>\n<p style=\"padding-left: 30px\">However, despite the obvious similarity, it&#8217;s not a comment. It&#8217;s a <em>directive<\/em>.<\/p>\n<p style=\"padding-left: 30px\"><strong>#Requires<\/strong> is a special string that establishes requirements for running a script or module file. If the requirements aren&#8217;t met, Windows PowerShell won&#8217;t run the script; it throws a terminating error.<\/p>\n<p style=\"padding-left: 30px\">Notice that there&#8217;s no space between the &#8216;#&#8217; and the &#8216;Requires&#8217;. That&#8217;s a required element of the <strong>#Requires<\/strong> syntax that makes it different from a comment.<\/p>\n<p><strong>Step 5: Answer clearly and demonstrate<\/strong><\/p>\n<p style=\"padding-left: 30px\">In this case, I&#8217;m using <strong>#Requires<\/strong> with its <strong>-RunAsAdministrator<\/strong> parameter, which requires the script to run in a session that has administrator privileges.<\/p>\n<p style=\"padding-left: 30px\"><span style=\"color: #800080\">Demo #1<\/span><\/p>\n<p style=\"padding-left: 30px\">Let&#8217;s run this test script without the required privileges and see what happens.<\/p>\n<p style=\"padding-left: 30px\"><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/HSG-4-25-16-3.png\"><img decoding=\"async\" class=\"alignnone size-full wp-image-78045\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/HSG-4-25-16-3.png\" alt=\"Screenshot of error that reports that the script must be run as Administrator.\" width=\"721\" height=\"160\" \/><\/a><\/p>\n<p style=\"padding-left: 30px\">When I run a script or module file with <strong>#Requires -RunAsAdministrator<\/strong> in a session that does not have &#8216;Run as administrator&#8217; permissions, the script fails. The error, although grammatically incorrect, is pretty clear.<\/p>\n<p style=\"padding-left: 60px\">&#8220;The script &lt;scriptPath&gt; cannot be run because it contains a #requires session is not running as Administrator. Start Windows PowerShell by using the Run as Administrator.&#8221;<\/p>\n<p style=\"padding-left: 30px\"><span style=\"color: #800080\">Demo #2<\/span><\/p>\n<p style=\"padding-left: 30px\">Unlike a comment, the <strong>#<\/strong> and the <strong>Requires<\/strong> cannot be separated by spaces. If you add even one space, it becomes an ordinary comment. The script runs without the required permissions and generates all sorts of errors as a result.<\/p>\n<p style=\"padding-left: 30px\"><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/HSG-4-25-16-4.png\"><img decoding=\"async\" class=\"alignnone size-full wp-image-78055\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/HSG-4-25-16-4.png\" alt=\"Screenshot of results when a space is between # and Requires.\" width=\"648\" height=\"392\" \/><\/a><\/p>\n<p style=\"padding-left: 30px\">That&#8217;s enough. Stop right there. Smile.<\/p>\n<p style=\"padding-left: 30px\">[<span style=\"text-decoration: underline\">Do Not<\/span> confuse the questioner (or the audience) with your dalliances into the abstract syntax tree. The questioner is likely to be a PowerShell beginner who does not share your delight in the language parser.<\/p>\n<p style=\"padding-left: 30px\"><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/HSG-4-25-16-5.png\"><img decoding=\"async\" class=\"alignnone size-full wp-image-78065\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/HSG-4-25-16-5.png\" alt=\"Screenshot of the language parser.\" width=\"715\" height=\"304\" \/><\/a><\/p>\n<p style=\"padding-left: 30px\">I&#8217;m showing this to you, because I can&#8217;t help it. <span style=\"text-decoration: underline\">Do Not<\/span> include this in the answer.]<\/p>\n<p><strong>Step 6: Suggest references<\/strong><\/p>\n<p style=\"padding-left: 30px\">Isn&#8217;t that cool? In fact, <strong>#Requires<\/strong> has other parameters that let you require a version of Windows PowerShell, a snap-in or a version of a particular module, and a shell. You can read about it in the <a href=\"http:\/\/go.microsoft.com\/fwlink\/?LinkID=135190\">about_Requires<\/a> help topic.<\/p>\n<p style=\"padding-left: 30px\">That&#8217;s better. I&#8217;ll keep this in mind the next time I&#8217;m answering a question.<\/p>\n<p>Thank you, June, this an awesome blog post.<\/p>\n<p>I invite you to follow me on <a href=\"http:\/\/bit.ly\/scriptingguystwitter\" target=\"_blank\">Twitter<\/a> and <a href=\"http:\/\/bit.ly\/scriptingguysfacebook\" target=\"_blank\">Facebook<\/a>. If you have any questions, send email to me at <a href=\"mailto:scripter@microsoft.com\" target=\"_blank\">scripter@microsoft.com<\/a>, or post your questions on the <a href=\"http:\/\/bit.ly\/scriptingforum\" target=\"_blank\">Official Scripting Guys Forum<\/a>. Also check out my <a href=\"https:\/\/blogs.technet.microsoft.com\/msoms\/\" target=\"_blank\">Microsoft Operations Management Suite Blog<\/a>. See you tomorrow. Until then, peace.<\/p>\n<p><strong>Ed Wilson<\/strong>\nMicrosoft Scripting Guy<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Summary: Learn how to properly answer a technical question in a presentation in this step-by-step post by PowerShell MVP June Blender. Today we have another blog post by PowerShell MVP June Blender. June is an Honorary Scripting Guy and a technical evangelist for the SAPIEN\u00a0Technologies, Inc. She has been working with PowerShell for a long [&hellip;]<\/p>\n","protected":false},"author":596,"featured_media":87096,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[637,568,641],"tags":[191,56,370,377,3],"class_list":["post-78015","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-community","category-hey-scripting-guy","category-windows-powershell","tag-community","tag-guest-blogger","tag-june-blender","tag-powershell","tag-scripting-guy"],"acf":[],"blog_post_summary":"<p>Summary: Learn how to properly answer a technical question in a presentation in this step-by-step post by PowerShell MVP June Blender. Today we have another blog post by PowerShell MVP June Blender. June is an Honorary Scripting Guy and a technical evangelist for the SAPIEN\u00a0Technologies, Inc. She has been working with PowerShell for a long [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/78015","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/users\/596"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/comments?post=78015"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/78015\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/media\/87096"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/media?parent=78015"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/categories?post=78015"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/tags?post=78015"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}