The author describes a technique called 'Stream of Consciousness Driven Development' where during pair programming, they write a detailed markdown file exploring a problem and solution before making changes, to ensure both partners fully understand the reasoning.
<p>This is something I just tried out last week but it seems to have enough potential to be worth showing unpolished. I was pairing with a client on writing a spec. I saw a problem with the spec, a convoluted way of fixing the spec. Instead of trying to verbally explain it, I started by creating a new markdown file:</p>
<div class="codehilite"><pre><span></span><code>NameOfProblem.md
</code></pre></div>
<p>Then I started typing. First the problem summary, then a detailed description, then the solution and why it worked. When my partner asked questions, I incorporated his question and our discussion of it into the flow. If we hit a dead end with the solution, we marked it out as a dead end. Eventually the file looked something like this:</p>
<div class="codehilite"><pre><span></span><code>Current state of spec
Problems caused by this
Elaboration of problems
What we tried that didn't work
Proposed Solution
Theory behind proposed solution
How the solution works
Expected changes
Other problems this helps solve
Problems this does *not* help with
</code></pre></div>
<p>Only once this was done, my partner fully understood the chain of thought, <em>and</em> we agreed it represented the right approach, did we start making changes to the spec. </p>
<h3>How is this better than just making the change?</h3>
<p>The change was <em>conceptually</em> complex. A rough analogy: imagine pairing with a beginner who wrote an insertion sort, and you want to replace it with quicksort. You need to explain why the insertion sort is too slow, why the quicksort isn't slow, and how quicksort actually correctly sorts a list. This could involve tangents into computational complexity, big-o notation, recursion, etc. These are all concepts you have internalized, so the change is simple to you, but the solution uses concepts the beginner does not know. So it's conceptually complex to them.</p>
<p>I wasn't pairing with a beginning programmer or even a beginning specifier. This was a client who could confidently write complex specs on their own. But they don't work on specifications full time like I do. Any time there's a relative gap in experience in a pair, there's solutions that are conceptually simple to one person and complex to the other.</p>
<p>I've noticed too often that when one person doesn't fully understand the concepts behind a change, they just go "you're the expert, I trust you." That eventually leads to a totally unmaintainable spec. Hence, writing it all out. </p>
<p>As I said before, I've only tried this once (though I've successfully used a similar idea when teaching workshops). It worked pretty well, though! Just be prepared for a lot of typing.</p>
# Stream of Consciousness Driven Development
Source: [https://buttondown.com/hillelwayne/archive/stream-of-consciousness-driven-development](https://buttondown.com/hillelwayne/archive/stream-of-consciousness-driven-development)
This is something I just tried out last week but it seems to have enough potential to be worth showing unpolished\. I was pairing with a client on writing a spec\. I saw a problem with the spec, a convoluted way of fixing the spec\. Instead of trying to verbally explain it, I started by creating a new markdown file:
Then I started typing\. First the problem summary, then a detailed description, then the solution and why it worked\. When my partner asked questions, I incorporated his question and our discussion of it into the flow\. If we hit a dead end with the solution, we marked it out as a dead end\. Eventually the file looked something like this:
```
Current state of spec
Problems caused by this
Elaboration of problems
What we tried that didn't work
Proposed Solution
Theory behind proposed solution
How the solution works
Expected changes
Other problems this helps solve
Problems this does *not* help with
```
Only once this was done, my partner fully understood the chain of thought,*and*we agreed it represented the right approach, did we start making changes to the spec\.
### How is this better than just making the change?
The change was*conceptually*complex\. A rough analogy: imagine pairing with a beginner who wrote an insertion sort, and you want to replace it with quicksort\. You need to explain why the insertion sort is too slow, why the quicksort isn't slow, and how quicksort actually correctly sorts a list\. This could involve tangents into computational complexity, big\-o notation, recursion, etc\. These are all concepts you have internalized, so the change is simple to you, but the solution uses concepts the beginner does not know\. So it's conceptually complex to them\.
I wasn't pairing with a beginning programmer or even a beginning specifier\. This was a client who could confidently write complex specs on their own\. But they don't work on specifications full time like I do\. Any time there's a relative gap in experience in a pair, there's solutions that are conceptually simple to one person and complex to the other\.
I've noticed too often that when one person doesn't fully understand the concepts behind a change, they just go "you're the expert, I trust you\." That eventually leads to a totally unmaintainable spec\. Hence, writing it all out\.
As I said before, I've only tried this once \(though I've successfully used a similar idea when teaching workshops\)\. It worked pretty well, though\! Just be prepared for a lot of typing\.
A developer shares a free/open-source system for AI-assisted development using layered markdown documents and a workflow, with features like human gates and code map memory to improve project management.
PairCoder++ introduces a pair programming paradigm where a Driver agent writes code and a Navigator agent reviews it using toolchain verification, achieving significant improvements across 17 benchmarks for generating charts, scientific figures, CAD models, 3D scenes, and other structured artifacts.
A programmer reflects on how their development workflow has evolved over the past year, shifting from LLM-powered IDE autocomplete to using CLI coding agents and plan.md files, and questions the necessity of traditional IDEs.
A Hacker News user asks how to maintain flow state when coding with AI, describing the shift from long flow states to multiple short ones and suggests parallel idea exploration.