Career Kevin Lee

Stack switching after 30: what changes, what does not

Experienced developers switch stacks differently than junior ones. The conceptual baggage is heavier but the diagnostic ability is sharper. Here is how that plays out in practice.

Stack switching after 30: what changes, what does not

There is a persistent assumption in developer education that learning gets harder with age and experience. The evidence from our graded PRs doesn't quite support that. Experienced developers switch stacks differently than junior developers, but not consistently worse. They struggle with different things, bring different assets, and need different feedback.

Understanding that difference is useful whether you're the developer doing the switching or the person trying to help them get there.

What experience buys you

A developer with eight years of Java experience switching to Go doesn't need to be taught how to think about abstraction, how to structure a function, or why separation of concerns matters. They can read unfamiliar code and roughly understand what it's doing faster than someone who has been writing code for two years. They have a strong instinct for when something is getting complicated enough to pull into a function, when a struct is getting too many responsibilities, when test coverage is thin.

These are real advantages. They show up in PRs. The code from experienced developers doing a stack switch is generally more readable, better decomposed, and less likely to have structural problems than the code from less experienced developers going through the same switch. The things that experienced developers write wrong are specific language idioms, not general software design.

This matters for feedback. Explaining Go's interface idioms to an experienced Java developer is different from explaining them to someone who has been writing code for a year. The experienced developer has a prior mental model of interfaces that's close but not identical. They need the delta, not the concept from scratch.

What experience works against you

The stronger your prior patterns, the harder they are to override. This is the core disadvantage of experience in a stack switch. A developer who has written idiomatic Java for eight years has deeply grooved reflexes for how Java code should look. When they start writing Go, those reflexes fire constantly.

The Java developer's error handling instincts are exception-based. When an error occurs, something is thrown and caught somewhere higher up. In Go, errors are values that flow explicitly through the call stack. Knowing this at the conceptual level doesn't prevent the exception-handling reflex from showing up in early PRs. The developer writes code that works but doesn't propagate errors the Go way, because under moderate pressure, the Go knowledge is fragile and the Java reflex is solid.

What's interesting is that this reflex interference is quite specific. It doesn't affect every concept, only the ones where Go and the prior language diverge significantly. An experienced Python developer writing Go will have the error handling reflex problem, but their code structure, naming conventions, and module design will often be fine because those are areas where Go and Python have broadly compatible patterns.

The concept gaps for experienced developers are more targeted than for less experienced ones. Fewer gaps, but deeper. The targeted nature is actually an advantage: there's less ground to cover. But the depth requires more repetitions to overwrite, because the competing reflex is more ingrained.

The diagnostic advantage

Experienced developers are generally better at figuring out what's wrong when something doesn't work. They've seen more failure patterns. They know how to read an error message and trace it back to a cause. They have a stronger intuition for what kind of thing could produce a given symptom.

In a stack switch, this shows up as faster recovery from problems that are diagnostically familiar. A Go goroutine leak produces memory growth that an experienced developer has seen in other contexts. They'll find it faster than a junior developer would, even though goroutine leaks are a Go-specific concept they haven't encountered before.

What they can't diagnose as quickly are problems that are conceptually novel rather than just contextually novel. If they've never encountered the concept of goroutine lifecycle before, they won't know to look there. They'll bring their diagnostic skill to bear but on the wrong frame, and that can actually slow them down relative to what you'd expect given their experience level.

This is one reason feedback on concept identification is more useful to experienced developers than feedback on code mechanics. "Here is the correct syntax" is something they'll pick up from the docs. "Here is the specific concept your code is getting wrong, and why" is harder to find without someone or something pointing to it explicitly.

Timeline expectations for experienced developers

In our experience grading PRs, developers with more than five years of experience in a prior stack typically reach production-quality Go code in six to ten weeks when they're getting regular concept-level feedback. That's slightly longer than the four to six weeks we see from developers with two to three years of experience in a prior stack.

The longer timeline for experienced developers is mostly attributable to the depth of the reflex patterns that need overwriting. The absolute quantity of concepts to learn is smaller, but each concept takes more repetitions to stabilize.

This is not a reason to be pessimistic about stack switching as an experienced developer. Six to ten weeks to production quality is a short timeline for a real stack switch. The question is whether the feedback mechanism is tight enough to use those weeks efficiently, or whether the developer is spending time writing code with gaps they don't know they have.

What doesn't change

A few things are essentially unchanged across experience levels in a stack switch. The need for targeted, specific feedback on real code doesn't diminish with experience. If anything, experienced developers are less tolerant of generic feedback that doesn't match their actual level, and more likely to dismiss it. The feedback needs to be calibrated to what they actually don't know, which is a smaller set but a specific one.

The need to write code, not just read it, also doesn't diminish. Experienced developers sometimes skip this step, believing their experience level means they can absorb a new stack more passively. That tends to extend the switch timeline because the reflex patterns don't get overwritten by reading; they get overwritten by writing and seeing concrete feedback on what came out.

Reading the docs, watching a video, following along with a tutorial: these are orientation, not preparation. The preparation is in the PRs.