He's Almost 4. Here's What Changed.
What changed, what stalled, and what quietly went backwards as a three-year-old builder became almost four.
Almost a year ago, when we sat down to build a game together, the spec was three words: “you drive a car.” Last week it was this: “build a rally game, with a top-down from behind the car player view, driving across a mountain racecourse.”
Same kid. Same couch. Same toolchain – except it isn’t, because the new spec demanded 3D, so we traded our usual 2D CSS tricks for three.js. (He didn’t know he was forcing a stack migration. He just knew flat wasn’t what he meant anymore.)
He turns four soon. This is the follow-up to the milestones chart I published when he was three – what actually changed, what stalled, and the one thing that quietly went backwards.
None of this is precocity. It’s ordinary development with a computational thinking lens. Your kid is doing versions of all of this – the only change is whether anyone’s helping to build the framing around it.
The resolution went up
The biggest shift isn’t a new skill. It’s resolution. The concepts he had at three – sequences, conditions, cause and effect – are the same concepts now, rendered at much higher detail.
At three, a game idea was a noun. Now it’s a noun with a camera angle, a setting, and a genre. “A rally game.” “Top down, from the back of the car.” “A mountain racecourse.” That’s not new vocabulary so much as a steadier picture – he can hold the whole thing in his head long enough to describe its parts before any of it exists.
The same thing shows up away from screens. A cardboard build now opens with a plan: “First I’ll cut out the shape of the body, then I’ll cut out the wheels, then we need some axles, and then we can glue on the wood wheels…” Six-plus steps, narrated in advance, reliably – a noticeably longer horizon than just a few months ago. Nobody drilled it. It arrived on its own schedule, the way these things do.
Conditionals went three levels deep
The if-then negotiations I wrote about at three were single-link: if I eat the meatball, then I get blueberries. The current model chains.
Verbatim, from a recent toy-related incident: “If I don’t play with my toys gently, then you will take my toys away, then I won’t be able to bring a toy to bed with me.”
A condition, a consequence, and then the consequence of the consequence, projected into a future bedtime he cares about. He’s tracing the branch two nodes down the tree. And to be clear, this isn’t a party trick – kids this age produce chains like this all the time, usually while negotiating for something. The shift worth noticing and encouraging is that the chains get longer.
He debugged misleading telemetry
The story I keep coming back to: his remote-control car stopped driving.
Three-year-old him would have declared it broken and escalated to management (me). Almost-four him ran a diagnostic sequence:
Is it stuck on something? No. Does the remote work – check the remote battery. Do the wheels still turn? Yes. Is the car’s battery empty? …Yes.
Here’s what makes this one genuinely hard, even for adults: this car model keeps its headlights on and its wheels turning even when the battery is too low to actually drive. The system was reporting itself healthy while failing. Anyone who’s worked in software has met that bug – the service that passes its health check and drops every request. He worked through the misleading signals and isolated the real cause. (Plenty of other malfunctions still end in tears. This one happened to catch him on a scientist day.)
What stalled
Not everything went up and to the right.
Patterns plateaued. Interest in pattern games has stalled, and AABAAB still trips him up. The developmental expectation said patterns would deepen steadily; the kid in my living room would rather build than alternate. Concrete beats abstract at this age, and right now patterns are losing to cardboard. I’m not pushing it. The interest will cycle back or it won’t, and either way drilling it would cost more than it buys.
One branch of the conditional tree is in denial. The kid who can chain three conditionals about bedtime toys still cannot accept that the negative branch of our conditionals exists. “If you sit properly at the restaurant, we’ll get dessert. If you’re disruptive, we’ll leave.” He has heard this rule a hundred times. He can recite it. And yet when the leaving actually happens, it arrives as a cosmic injustice – as if we invented the else-clause on the spot. The logic is installed; accepting that it applies to him is apparently a separate milestone, still pending.
If anything regressed, it’s that. I’d call it less a reasoning failure than motivated reasoning – which, to be fair, is also extremely common in adults with strong opinions about their own pull requests.
What four looks like from here
The headline isn’t a new pillar, and it isn’t a remarkable child. It’s that the same ordinary pillars got more load-bearing: longer sequences he plans himself, conditionals that chain, debugging that survives a misleading signal, and specs detailed enough to drag a 3D engine into the house.
If you’re charting your own kid against any milestone list, including mine: expect the resolution to improve before the repertoire expands, expect at least one area to stall while another sprints, and expect the else-clause to be litigated. (That last one might just be permanent.)
If you want the structured version of how we got here, 12 Weeks of Tech Projects for Toddlers is the week-by-week curriculum – every activity in it tested on the same kid who stars in this post, else-clause denial and all. It’s at buildwithyourkid.com .




