{"course":{"slug":"how-software-changed","title":"How Software Development Changed","url":"https://addaly.com/learn/how-software-changed","level":"intermediate","track":"work"},"lesson":{"slug":"restarting-the-conversation","title":"Knowing when to start again","url":"https://addaly.com/learn/how-software-changed/restarting-the-conversation","position":47,"of":87,"minutes":8,"answer":"A conversation that has been wrong twice is a context containing the wrong approach three times, so restart with what the failure taught you rather than making a third correction.","keyIdea":"A conversation that has been wrong twice is a context containing the wrong approach three times, so restart with what the failure taught you rather than making a third correction, and time-box the decision because judgement is compromised exactly when it is needed."},"body":{"format":"markdown","text":"## The specific failure that costs the most time\n\nIt is wrong. You correct it. It is wrong in the same way. You correct it more forcefully. It apologises and produces a third version with the same flaw.\n\nTwenty minutes have gone. Twenty more will go, because the mechanism that produced the first two answers is still in place and has now been reinforced twice.\n\nThe rule: **wrong twice in the same way means start over.** Not correct harder. Start over.\n\n## Why arguing does not work\n\nEverything in the conversation shapes what comes next. That is the entire mechanism: the response is conditioned on the whole exchange, including the two wrong answers and your two corrections.\n\nSo a conversation that has gone wrong is not neutral ground you are steering from. It is a context that now contains three statements of the wrong approach and a couple of hedged retractions, and the next answer is generated in the presence of all of it. The wrong framing has more textual weight than your correction does.\n\nThe practical consequence is that a fresh start with better framing is cheaper than the third correction, almost always, and it does not feel that way, which is why people keep making the third correction.\n\n## Restarting well\n\nA restart is not repeating yourself. It is asking the better question you can now ask, because the failed attempt taught you something.\n\nCarry four things forward:\n\n1. **The constraint you discovered.** \"This must not add a dependency.\" \"The `Invoice.total()` signature is public and cannot change.\"\n2. **The file you forgot to include.** Usually the actual cause. The thing it kept getting wrong was defined somewhere it could not see.\n3. **The approach that is ruled out, and why.** \"Do not use the retry decorator; this endpoint is not idempotent.\"\n4. **A smaller scope.** If the whole task failed twice, ask for the first third of it.\n\n```\nWrite convert(amount: Decimal, from_ccy: str, to_ccy: str, at: datetime)\n-> Decimal in billing/fx.py. Rates come from RateProvider (attached).\nNo new dependencies. Do not change any other file. On a missing rate,\nraise RateUnavailable — do not return None and do not fall back to 1.0.\nIf you think another file needs to change, stop and say so.\n```\n\nEverything learned from the failed attempt is in those five lines, and they took forty seconds to write.\n\n## The sunk cost, named\n\nPeople persist because the first two attempts were *so close*. Ninety per cent right, one stubborn detail wrong. Abandoning that feels like discarding value.\n\nThere is no value to discard. The conversation is not an asset; the code either works or it does not, and a nearly-working answer that has resisted two corrections is evidence about the framing rather than about the distance remaining. The closeness is exactly what makes the trap work.\n\nA hard time-box helps more than resolve: **ten minutes, or two corrections, whichever comes first.** Then stop, close it, and write the better request. Making it a rule removes it from the domain of judgement, which is useful because judgement is the thing that is compromised at minute nineteen.\n\n## When to stop entirely rather than restart\n\nSometimes the third attempt is not the answer either, and the signal is worth recognising.\n\nIf you cannot write a clear request, the problem is not the tooling. It is that you do not yet know what you want, and no amount of rephrasing will fix that. Go and find out: read the code, ask the person who requested it, run something, draw the data model.\n\nAnd occasionally the honest answer is that this task is not one to delegate. Twenty minutes of failure is decent evidence that the work is judgement-heavy, and judgement-heavy work is the category to do yourself. In that case the twenty minutes were not wasted: they told you something about the task that you did not know at the start.\n\n## The wider version of the rule\n\nThis is a specific case of something older. Any loop where you are correcting rather than converging is a loop to exit.\n\nThe same applies to a debugging session that has produced four theories and no reproduction, a design discussion in its second hour, and a merge conflict you have resolved twice. Stop, go back to the last known-good state, and re-approach with what you now know. The instinct to push on because you are nearly there is the most reliably expensive instinct in software."},"check":{"question":"Why is a fresh request usually cheaper than a third correction, even when the previous attempt was nearly right?","options":[{"text":"Long conversations exceed the context window, so earlier constraints have been dropped and must be restated anyway.","correct":false,"tempting":"Truncation happens in very long sessions, but the failure appears well before any window limit is reached."},{"text":"Each response is generated in the presence of the previous wrong ones, which carry more textual weight than the corrections.","correct":true},{"text":"Corrections are usually phrased as complaints rather than requirements, so they carry less information than an original request.","correct":false,"tempting":"Phrasing does matter, but a precisely worded third correction fails in the same way, which shows the problem is not wording."},{"text":"Being nearly right means the remaining error is subtle, and subtle errors need a different model rather than a different prompt.","correct":false,"tempting":"Assumes the difficulty is in the residual detail, when repeated identical failure points at the framing instead."}]},"prev":{"slug":"when-not-to-reach-for-it","title":"When to put the tool down","url":"https://addaly.com/learn/how-software-changed/when-not-to-reach-for-it"},"next":{"slug":"a-loop-that-costs-nothing","title":"A complete free workflow","url":"https://addaly.com/learn/how-software-changed/a-loop-that-costs-nothing"},"authorship":"Founder and series editor: Dr Mustafa Mun. Written by AI models to a written standard. Exam keys checked blind by a second model: 3,665 of 3,666 agreed. Academic review invited.","review":{"status":"Draft, open for academic review"},"cite":"Addaly (2026) 'Knowing when to start again', in How Software Development Changed. Edited by M. Mun. Addaly. Available at: https://addaly.com/learn/how-software-changed/restarting-the-conversation (Accessed: 13 October 2026).","licence":{"name":"CC BY-NC-SA 4.0","url":"https://creativecommons.org/licenses/by-nc-sa/4.0/"},"reader":{"schema":1,"title":"Knowing when to start again","courseTitle":"How Software Development Changed","module":{"index":5,"slug":"the-working-loop","title":"The working loop"},"answer":null,"keyIdea":"A conversation that has been wrong twice is a context containing the wrong approach three times, so restart with what the failure taught you rather than making a third correction, and time-box the decision because judgement is compromised exactly when it is needed.","hero":{"kind":"plate","image":null,"alt":null,"caption":null},"blocks":[{"t":"h2","id":"the-specific-failure-that-costs-the-most-time","runs":[{"text":"The specific failure that costs the most time"}]},{"t":"p","runs":[{"text":"It is wrong. You correct it. It is wrong in the same way. You correct it more forcefully. It apologises and produces a third version with the same flaw."}]},{"t":"p","runs":[{"text":"Twenty minutes have gone. Twenty more will go, because the mechanism that produced the first two answers is still in place and has now been reinforced twice."}]},{"t":"p","runs":[{"text":"The rule: "},{"text":"wrong twice in the same way means start over.","b":true},{"text":" Not correct harder. Start over."}]},{"t":"h2","id":"why-arguing-does-not-work","runs":[{"text":"Why arguing does not work"}]},{"t":"p","runs":[{"text":"Everything in the conversation shapes what comes next. That is the entire mechanism: the response is conditioned on the whole exchange, including the two wrong answers and your two corrections."}]},{"t":"p","runs":[{"text":"So a conversation that has gone wrong is not neutral ground you are steering from. It is a context that now contains three statements of the wrong approach and a couple of hedged retractions, and the next answer is generated in the presence of all of it. The wrong framing has more textual weight than your correction does."}]},{"t":"p","runs":[{"text":"The practical consequence is that a fresh start with better framing is cheaper than the third correction, almost always, and it does not feel that way, which is why people keep making the third correction."}]},{"t":"h2","id":"restarting-well","runs":[{"text":"Restarting well"}]},{"t":"p","runs":[{"text":"A restart is not repeating yourself. It is asking the better question you can now ask, because the failed attempt taught you something."}]},{"t":"p","runs":[{"text":"Carry four things forward:"}]},{"t":"ol","start":1,"items":[[{"text":"The constraint you discovered.","b":true},{"text":" “This must not add a dependency.” “The "},{"text":"Invoice.total()","code":true},{"text":" signature is public and cannot change.”"}],[{"text":"The file you forgot to include.","b":true},{"text":" Usually the actual cause. The thing it kept getting wrong was defined somewhere it could not see."}],[{"text":"The approach that is ruled out, and why.","b":true},{"text":" “Do not use the retry decorator; this endpoint is not idempotent.”"}],[{"text":"A smaller scope.","b":true},{"text":" If the whole task failed twice, ask for the first third of it."}]]},{"t":"code","lang":"","label":"Text","text":"Write convert(amount: Decimal, from_ccy: str, to_ccy: str, at: datetime)\n-> Decimal in billing/fx.py. Rates come from RateProvider (attached).\nNo new dependencies. Do not change any other file. On a missing rate,\nraise RateUnavailable — do not return None and do not fall back to 1.0.\nIf you think another file needs to change, stop and say so."},{"t":"p","runs":[{"text":"Everything learned from the failed attempt is in those five lines, and they took forty seconds to write."}]},{"t":"h2","id":"the-sunk-cost-named","runs":[{"text":"The sunk cost, named"}]},{"t":"p","runs":[{"text":"People persist because the first two attempts were "},{"text":"so close","i":true},{"text":". Ninety per cent right, one stubborn detail wrong. Abandoning that feels like discarding value."}]},{"t":"p","runs":[{"text":"There is no value to discard. The conversation is not an asset; the code either works or it does not, and a nearly-working answer that has resisted two corrections is evidence about the framing rather than about the distance remaining. The closeness is exactly what makes the trap work."}]},{"t":"p","runs":[{"text":"A hard time-box helps more than resolve: "},{"text":"ten minutes, or two corrections, whichever comes first.","b":true},{"text":" Then stop, close it, and write the better request. Making it a rule removes it from the domain of judgement, which is useful because judgement is the thing that is compromised at minute nineteen."}]},{"t":"h2","id":"when-to-stop-entirely-rather-than-restart","runs":[{"text":"When to stop entirely rather than restart"}]},{"t":"p","runs":[{"text":"Sometimes the third attempt is not the answer either, and the signal is worth recognising."}]},{"t":"p","runs":[{"text":"If you cannot write a clear request, the problem is not the tooling. It is that you do not yet know what you want, and no amount of rephrasing will fix that. Go and find out: read the code, ask the person who requested it, run something, draw the data model."}]},{"t":"p","runs":[{"text":"And occasionally the honest answer is that this task is not one to delegate. Twenty minutes of failure is decent evidence that the work is judgement-heavy, and judgement-heavy work is the category to do yourself. In that case the twenty minutes were not wasted: they told you something about the task that you did not know at the start."}]},{"t":"h2","id":"the-wider-version-of-the-rule","runs":[{"text":"The wider version of the rule"}]},{"t":"p","runs":[{"text":"This is a specific case of something older. Any loop where you are correcting rather than converging is a loop to exit."}]},{"t":"p","runs":[{"text":"The same applies to a debugging session that has produced four theories and no reproduction, a design discussion in its second hour, and a merge conflict you have resolved twice. Stop, go back to the last known-good state, and re-approach with what you now know. The instinct to push on because you are nearly there is the most reliably expensive instinct in software."}]}],"check":{"question":[{"text":"Why is a fresh request usually cheaper than a third correction, even when the previous attempt was nearly right?"}],"options":[{"text":[{"text":"Long conversations exceed the context window, so earlier constraints have been dropped and must be restated anyway."}],"correct":false,"tempting":[{"text":"Truncation happens in very long sessions, but the failure appears well before any window limit is reached."}]},{"text":[{"text":"Each response is generated in the presence of the previous wrong ones, which carry more textual weight than the corrections."}],"correct":true,"tempting":null},{"text":[{"text":"Corrections are usually phrased as complaints rather than requirements, so they carry less information than an original request."}],"correct":false,"tempting":[{"text":"Phrasing does matter, but a precisely worded third correction fails in the same way, which shows the problem is not wording."}]},{"text":[{"text":"Being nearly right means the remaining error is subtle, and subtle errors need a different model rather than a different prompt."}],"correct":false,"tempting":[{"text":"Assumes the difficulty is in the residual detail, when repeated identical failure points at the framing instead."}]}],"order":[3,0,1,2],"why":null},"prev":{"slug":"when-not-to-reach-for-it","title":"When to put the tool down","minutes":8},"next":{"slug":"a-loop-that-costs-nothing","title":"A complete free workflow","minutes":9}}}