{"componentChunkName":"component---src-templates-blog-post-js","path":"/you-should-all-be-asking-way-more-questions/","result":{"data":{"site":{"siteMetadata":{"title":"sean goedecke"}},"markdownRemark":{"id":"2ddca042-3b4f-5a7c-95f8-0063f3fcd47c","excerpt":"When someone is explaining something to me, I ask on average one question every thirty seconds. I’m sure this is frustrating to some people, but it’s actually a…","html":"<p>When someone is explaining something to me, I ask on average one question every thirty seconds. I’m sure this is frustrating to some people, but it’s actually a good habit and you should do it too.</p>\n<h3 id=\"trying-to-understand\" style=\"position:relative;\">Trying to understand<a href=\"#trying-to-understand\" aria-label=\"trying to understand permalink\" class=\"heading-anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h3>\n<p>Most of the questions I ask are very short, and require very short answers. Typically I’m asking for confirmation: “so when you say X, you mean Y?”, or “this X is the thing you mentioned earlier when you were saying Z?“. The point of these questions is to make sure I understand.</p>\n<p>A small misunderstanding early on balloons into a big misunderstanding later, because all the things you misinterpret based on the first misunderstanding will become misunderstandings in their own right, and so on. That’s why you can’t just wait until someone’s finished talking and ask all your questions at once<sup id=\"fnref-1\"><a href=\"#fn-1\" class=\"footnote-ref\">1</a></sup>. </p>\n<p>I think most people don’t ask questions because they’re not <a href=\"https://gwern.net/on-really-trying\">really trying</a> to understand: they’re happy to just trust that the person they’re talking to knows what’s going on. This goes double when that person is a well-respected or more senior engineer. However, once you have <a href=\"https://en.wikipedia.org/wiki/Skin_in_the_Game_(book)\">skin in the game</a>, that all changes. When you’re in a position where <em>you</em> are the one responsible for success or failure — where you are going to have to go away after the conversation and take a bunch of concrete actions — you will find yourself wanting to ask many questions.</p>\n<h3 id=\"build-it-in-your-head\" style=\"position:relative;\">Build it in your head<a href=\"#build-it-in-your-head\" aria-label=\"build it in your head permalink\" class=\"heading-anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h3>\n<p>When someone’s explaining a plan to me at work, I am usually building it in my head: visualizing the specific lines of code that would need to be written in order to implement it. I’ll sometimes handwave the details for solved problems (for instance, I might say “send emails like subsystem X of the same service that also sends emails”), but at minimum I’m planning out:</p>\n<ul>\n<li>How data needs to flow between services (what kind of data, and how it will travel over the wire)</li>\n<li>How services will communicate with each other (e.g. how will they auth?)</li>\n<li>What data needs to be persisted, and where it’s going to live</li>\n</ul>\n<p>If I hear something that is suspiciously vague (for instance, someone describes service X as “storing data” when I know service X only talks to an ephemeral Redis store), I will immediately ask “hold on, how is that going to work?” Usually that indicates a missing dependency (e.g. service X has to make an RPC call to service Y, which does have a persistent database), which often suggests design changes (for instance, moving some or all of the functionality into service Y).</p>\n<p>Sometimes questions like these will uncover a fundamentally unworkable feature of the design. This usually happens when a plan fails to take into account some <a href=\"/wicked-features\">wicked features</a>. I remember many years ago a neighboring team built a complex event-driven system that was very elegant but made it completely impossible to silo customer data in a single datacenter. Because our company had “all your data lives in a single location” as a flagship feature, this system just did not work and had to be effectively abandoned.</p>\n<p>If you’re involved in any kind of technical leadership role, you will have to do this work eventually. Doing it as early as possible — i.e. in the conversation where someone is describing the plan to you — can save hours or days of wasted implementation. Often this is enough to turn a failed project into a <a href=\"/how-to-ship\">successful one</a>.</p>\n<h3 id=\"working-with-ai-agents\" style=\"position:relative;\">Working with AI agents<a href=\"#working-with-ai-agents\" aria-label=\"working with ai agents permalink\" class=\"heading-anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h3>\n<p>Maybe you only work with reliable engineers who can be trusted to make all the right decisions. You can thus let them talk without interruption, because it doesn’t really matter if you have a detailed understanding of what they’re saying. That’s great! But these days you probably also have colleagues that are inherently unreliable: AI agents.</p>\n<p>I mostly work with GPT-6-Astra and Claude Opus 5.5. These are good models that don’t often make <em>code</em> mistakes: when they set out to do something, they usually do it<sup id=\"fnref-2\"><a href=\"#fn-2\" class=\"footnote-ref\">2</a></sup>. But they make <em>design</em> mistakes all the time. They assume that two services can talk to each other when in fact they can’t, or they forget about the fact that their code has to run both in the cloud and on-premises, and so on. This is mostly due to the lack of <a href=\"/continuous-learning/\">continuous learning</a>: you didn’t know this stuff on your first day either, but you had plenty of time to pick it up. Language models are always on their first day.</p>\n<p>You should be absolutely <em>peppering</em> AI agents with questions. I constantly ask things like:</p>\n<ul>\n<li>Do we do X elsewhere in this codebase?</li>\n<li>Does service Y really support this type of authentication, or are you assuming we’d have to go build that too?</li>\n<li>Is this subsystem you built necessary to satisfy requirement Z, or does it in fact satisfy some other requirement you assumed?</li>\n<li>Why do we need to update the interface for A?</li>\n<li>Why do we need to touch this file? Isn’t that unrelated to the change?</li>\n</ul>\n<p>There will probably come a day when I always get sensible answers to these questions that convince me the model knows what it’s doing. But today is not that day. About half the questions I ask get answers that convince me<sup id=\"fnref-3\"><a href=\"#fn-3\" class=\"footnote-ref\">3</a></sup> the model has made a mistake: it should have reused the existing subsystem for X, or authed to Y differently, or kept the Z implementation simple, and so on. When this stops happening, I’ll stop asking questions (and try and see if my company will still be willing to pay me to occupy more of an architect role, I suppose).</p>\n<h3 id=\"final-thoughts\" style=\"position:relative;\">Final thoughts<a href=\"#final-thoughts\" aria-label=\"final thoughts permalink\" class=\"heading-anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h3>\n<p>You should all be asking way more questions. In other words, <strong>you should all be trying harder to actually understand what you’re hearing</strong>. Don’t trust that the person (or AI model) you’re talking to knows what they’re doing, even if you think they’re smarter than you. <a href=\"/nobody-knows-how-software-products-work/\">Nobody understands</a> complex software products. If you have deep domain knowledge of any area of a codebase, you will routinely find yourself correcting powerful AI models and principal engineers.</p>\n<div class=\"footnotes\">\n<hr>\n<ol>\n<li id=\"fn-1\">\n<p>Sometimes questions you have will be answered later on, but in my experience this is more about questions like “what are the broader consequences of X”, not the simple confirmation questions I often interrupt to ask.</p>\n<a href=\"#fnref-1\" class=\"footnote-backref\">↩</a>\n</li>\n<li id=\"fn-2\">\n<p>Your experience might be different if you’re working in a different domain or with a different language.</p>\n<a href=\"#fnref-2\" class=\"footnote-backref\">↩</a>\n</li>\n<li id=\"fn-3\">\n<p>I know some of these might sound like leading questions that would trigger sychophancy, but in my experience good coding models are very happy to robustly defend themselves.</p>\n<a href=\"#fnref-3\" class=\"footnote-backref\">↩</a>\n</li>\n</ol>\n</div>","fields":{"discussionLinks":[]},"frontmatter":{"title":"You should all be asking way more questions","description":null,"date":"September 25, 2026","tags":["good engineers"]}}},"pageContext":{"slug":"/you-should-all-be-asking-way-more-questions/","previous":{"slug":"/system-one-models-can-train-their-own-replacements/","title":"System One models like Jev can train their own replacements"},"next":null,"preview":{"slug":"/you-have-to-beat-the-models-at-something/","title":"You have to beat the models at something","snippetHtml":"<p>In 2025, I wrote that software engineers ought to be assessed by <a href=\"/value-over-replacement/\">“value over replacement”</a>: not how much money they made for their company, but how much they would have made compared to the average engineer in their position. I’ve always found it vaguely silly when engineers put “built a product that made $X” on their resumes, when they just did the <a href=\"/party-tricks/\">JIRA tickets</a> that came across their desk.<br /><a href=\"/you-have-to-beat-the-models-at-something/\">Continue reading...</a></p>"}}},"staticQueryHashes":["1146911855","3764592887"]}