With the rise of AI coding tools and the whole "vibe coding"
conversation, every developer seems to have a take. Here's mine.
Our job is to engineer reliable
solutions -- not to write every line of code by hand. Code
is the artifact, not the goal. What matters is the outcome:
software that works, is maintainable, and solves real problems.
AI is the latest in a long history of layers of abstraction. We moved
from assembly to high-level languages, from manual memory
management to garbage collection, from bare-metal servers to
containers. Each shift freed engineers to focus on higher-order
concerns. The work now shifts further toward reviewing, architecting, and
deciding.
The real skill is calibrating risk against velocity. An authentication flow handling tokens and
secrets demands careful scrutiny. A static landing page doesn't.
This portfolio, for instance -- no APIs, no auth, no sensitive
data -- was ~98% written by
Claude. And that's the point: knowing when to trust the
tool and when to take the wheel.
AI can generate code, but it can't replace understanding.
Design patterns,
language caveats, memory
management (even in GC'd languages), optimization
algorithms -- these are the skills that let you evaluate what
AI produces, catch what it misses, and know when "good enough" is the right
call versus when you need to push further. But it goes
beyond reviewing output. That same knowledge is what lets you
ask the right questions,
explain how things should be built, and define maintainable
guidelines that keep a codebase consistent -- whether the code
is written by a person or a model.
Software doesn't exist in a vacuum. Pushed by my lead at UMN
Solutions, I've been exploring project management --
scoping work, managing risk, communicating with stakeholders.
Planning to take the PMP
certification next. Because shipping great software is
as much about people and process as it is about code.