<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>morning club</title><description>Working notes by Aaron Thompson, revised in place and never finished.</description><link>https://morningclub.dev</link><language>en-gb</language><item><title>Shifting left to keep growing</title><link>https://morningclub.dev/shifting-left-to-keep-growing</link><guid isPermaLink="true">https://morningclub.dev/shifting-left-to-keep-growing</guid><description>My AI growth arc as an early senior engineer</description><pubDate>Fri, 24 Jul 2026 16:24:02 GMT</pubDate><content:encoded>&lt;p&gt;I’ve read a lot about how junior engineers will struggle to learn in the age of
AI. I’ve read much less about how mid to early-senior engineers will adapt to
keep growing. That’s the bucket I’m in. I spent my junior years writing code by
hand, and my career has since been roughly equal parts with AI and without it.
This post is about my growth arc through the AI half, and my hope is that
sharing how I’m adapting helps anyone else in the same boat.&lt;/p&gt;
&lt;p&gt;It’s a crazy time to be a software engineer. In the last 18 months, I’ve had to
drop old beliefs and recipes for success and rebuild my mental model for
personal growth to keep up, adapt, and hopefully even stay ahead.&lt;/p&gt;
&lt;p&gt;I career-switched when bootcamps were at the height of fashion and were a
reliable path to employment. In those days, my recipe for success was clear:
code more.&lt;/p&gt;
&lt;p&gt;The more I coded, the more I learned, the better I got at my job. I literally
tied success to reps on the keyboard, and it worked! So much so that my friend
and I had a name for it — Morning Club.&lt;/p&gt;
&lt;p&gt;Morning Club was simple. Wake up before work and get the reps in. That could
have been a course, a side project, or the next 15 minutes of an 8-hour
freeCodeCamp YouTube video. Time writing code was a reliable forcing function
for improvement, but of course, this mental model has not survived the AI era.
In the last 18 months, I’ve barely written code at all and achieved most of my
career progression, shipped my proudest work, and had genuine impact.&lt;/p&gt;
&lt;p&gt;So what’s the problem? Why is it that I feel like something needs to change if
I’m progressing and doing good work?&lt;/p&gt;
&lt;p&gt;You’ve probably heard that AI can act as an “amplifier” or a “mirror.” It takes
what already exists and builds on it. This is most noticeable in codebases, but
I believe it happens with people too, and I believe that this is what I have
been experiencing — increasing levels of amplification, not growth.&lt;/p&gt;
&lt;p&gt;My years of engineering without AI have given me a great base to leverage it for
more impact than I would have been able to produce otherwise. As AI got more
capable, I could feel myself developing more confidence and feeling braver to
tackle harder and harder problems. I stopped thinking about whether I &lt;em&gt;could&lt;/em&gt; do
things and started thinking more about what I &lt;em&gt;should&lt;/em&gt; do, and taking faster
action.&lt;/p&gt;
&lt;p&gt;This is genuinely a good thing. But I couldn’t shake this feeling that AI was
getting better and I was not. The completion of a big feature no longer left me
feeling more competent; it just left me feeling more dependent on Claude. My
skill and my confidence both felt like they were atrophying, and I needed to
make a change.&lt;/p&gt;
&lt;p&gt;I started reading a bit wider on the problem, and it turned out I was not the
only person feeling this. I read articles like
&lt;a href=&quot;https://addyosmani.com/blog/comprehension-debt/&quot;&gt;Comprehension Debt&lt;/a&gt; by Addy
Osmani and
&lt;a href=&quot;https://larsfaye.com/articles/agentic-coding-is-a-trap&quot;&gt;Agentic Coding is a Trap&lt;/a&gt;
by Lars Faye. Both great reads — they touch on how agentic coding risks humans
losing touch with their codebase and their skills if they become overly reliant
on agents.&lt;/p&gt;
&lt;p&gt;Eager to not fall into this trap, I went about solving my problem in the only
way I knew how — code more!&lt;/p&gt;
&lt;p&gt;My first attempt was an agent skill that tried to round up all the “cognitive
debt” I had accrued that session and give me “homework” aimed at paying it back.
Honestly, it wasn’t terrible; it just didn’t stand the test of time. It lasted
about two weeks before I couldn’t keep it up. Cracks in my old beliefs were
starting to show.&lt;/p&gt;
&lt;p&gt;Determined that coding was still the answer, my next attempt was an extension
that introduced random friction at points where the agent would otherwise have
done the work for me. It would stop in its tracks halfway through execution, and
I’d code the rest. Shockingly, this didn’t last long either. Finishing
half-baked work was actually slower and harder than doing the whole thing
yourself.&lt;/p&gt;
&lt;p&gt;After a couple of months of failing to claw back this feeling of growth, I came
across a
&lt;a href=&quot;https://www.youtube.com/watch?v=q_Jq4IgYImk&quot;&gt;YouTube video&lt;/a&gt; on how some of
Google’s top engineers are upskilling in the AI-native era.&lt;/p&gt;
&lt;p&gt;It’s a great watch, and it introduced me to something that totally transformed
how I view my workflow: “shifting left.”&lt;/p&gt;
&lt;p&gt;Unless you’ve heard the phrase before, it probably means nothing in isolation,
so let me show you.&lt;/p&gt;
&lt;p&gt;Until recently, my ideal workflow for new feature development looked roughly
like this:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/right-shifted-workflow.png&quot; alt=&quot;A workflow diagram — Chat, Plan and Code in a row with a review loop running from Code back through a Rev diamond into Code; below it a crossed-out brain labelled “cognitive surrender, LLM owns engineering” and a curve marked “right shifted.”&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1005&quot; height=&quot;489&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;My old workflow: the engineering is right-shifted, all of it happening after the LLM has already written the plan and the code.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The agent and I would chat. Once I was convinced it understood my intent, I’d
switch to plan mode, execute the plan, and review the output.&lt;/p&gt;
&lt;p&gt;You’ll notice that the engineering work — that is, my contribution — is, quite
literally, right-shifted. It all happens at the end: the reviewing of the code,
the back and forth post-execution. Pulling the magic slot machine until you get
what you want.&lt;/p&gt;
&lt;p&gt;This way of working is, I’ve come to learn, more akin to vibe coding than it is
to engineering, and it’s the main culprit behind this continued feeling of
professional atrophy.&lt;/p&gt;
&lt;p&gt;When you cognitively surrender the engineering to the LLM (i.e. it writes the
plan, not you), you create an expensive downstream loop. Because you were
hands-off at the start, you spend time (and tokens) at the end clawing back poor
implementations and design smells to stop this feature from being tacked onto
the growing codebase as a lump. You accrue cognitive debt, and you’ve learned
nothing.&lt;/p&gt;
&lt;p&gt;When you shift your contribution left, you take back control of the engineering,
and the workflow looks more like this:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/left-shifted-workflow.png&quot; alt=&quot;A workflow diagram — Specs/HLDs and Chat grouped inside a dotted boundary, a dashed arrow leading to Execute, and Execute and Review joined by a two-way arrow; below the boundary a brain labelled “I own engineering, productive struggle.”&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1005&quot; height=&quot;306&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Left-shifted: the contribution moves up front, into the spec, where I own the engineering.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In left-shifted engineering, the work happens up front, in the spec or
high-level design doc. Critically, the magic is in the productive struggle of
writing that spec yourself, without an LLM (at least for the first draft).
That’s where you own the engineering and learn by communicating your own intent.
It’s more rewarding, and it’s cheaper overall: because you were hands-on at the
start, you already know what to expect, so the review loop costs little in time
and tokens. You also get a real chance to fight codebase entropy, which is
something LLMs are terrible at.&lt;/p&gt;
&lt;p&gt;I know — I’m incredibly late to the party with spec-driven development. But
honestly, I didn’t see the point until I viewed it through the lens of
professional growth and cognitive surrender.&lt;/p&gt;
&lt;p&gt;I’m still experimenting with this, but my hope is that by shifting left and
putting a meaningful, productive, human-owned struggle into the engineering up
front — by way of a spec or some similar artefact — I can keep growing as an
engineer and finally let go of “code more” as my means to growth, while still
shipping.&lt;/p&gt;
&lt;p&gt;The great thing about a spec is that you can get pretty detailed with it if you
want. I like to be the one designing the module structure, the function
signatures, or whatever the relevant interface is.&lt;/p&gt;
&lt;p&gt;Shifting left has honestly been harder than I imagined, and I do still find
myself slipping right from time to time.&lt;/p&gt;
&lt;p&gt;What’s that saying… “what got you here won’t get you there”?&lt;/p&gt;
&lt;p&gt;Will I give up coding? Probably not, but it’s a hobby now, not the engine of my
growth.&lt;/p&gt;
&lt;p&gt;If you related to this in any way, I’d love to hear from you. Ping me a DM and
let me know what your journey has been like.&lt;/p&gt;
&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://addyosmani.com/blog/comprehension-debt/&quot;&gt;Comprehension Debt&lt;/a&gt; — Addy Osmani&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://larsfaye.com/articles/agentic-coding-is-a-trap&quot;&gt;Agentic Coding is a Trap&lt;/a&gt; — Lars Faye&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=q_Jq4IgYImk&quot;&gt;Build core skills to thrive as an AI-era developer&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</content:encoded><category>developing</category><category>ai</category><category>growth</category><category>spec-driven-development</category><category>agentic-coding</category></item></channel></rss>