Building with AI: My Journey with Claude Code
two months ago, I started using Claude Code as my daily programming companion. What began as curiosity quickly became an indispensable part of my workflow. This is the story of how AI pair programming fundamentally changed the way I write software.
The skeptic becomes a believer
I will be honest — I was skeptical at first. As someone who has been writing code for over five years, I had built up strong opinions about how software should be crafted. The idea of an AI writing code for me felt like cheating, or at best, a toy for beginners.
My first real test was a NestJS microservice migration at Jitera. We needed to refactor a monolithic authentication module into a standalone service with its own database, message queue integration, and API contracts. The kind of work that normally takes a week of careful planning and execution.
The moment I realized AI pair programming was different was when Claude Code understood the architectural intent behind my refactoring, not just the syntax.
What actually changed in my workflow
The biggest shift was not in writing code faster — it was in thinking faster. With Claude Code handling the mechanical aspects of implementation, I found myself spending more time on architecture, edge cases, and user experience. The cognitive load of translating thoughts into syntax dropped significantly.
- Boilerplate generation went from 30 minutes to 2 minutes — DTOs, controllers, service skeletons, test files
- Code review became more thorough because I had energy left for deep analysis
- Documentation improved because generating it was no longer a chore
- Exploring unfamiliar APIs became a conversation instead of a documentation hunt
The productivity numbers
I tracked my output over three months. Pull requests per week went from an average of 4 to 7. But more importantly, the quality metrics improved too — fewer bugs caught in review, better test coverage, and more consistent code patterns across the team.
// Before: manually writing each DTO
export class CreateUserDto {
@IsString()
@IsNotEmpty()
name: string;
@IsEmail()
email: string;
// ... 20 more fields
}
// After: describe the shape, get the complete implementation
// with validation decorators, swagger docs, and transform pipes
Where AI falls short
It is not all perfect. AI-generated code can be subtly wrong in ways that pass tests but fail in production. I learned to be especially careful with database queries — Claude Code would sometimes generate queries that work correctly but have terrible performance characteristics at scale.
The key lesson: AI is a multiplier, not a replacement. It amplifies whatever engineering judgment you bring to the table. If you understand the system deeply, AI makes you dramatically faster. If you do not, it can make you dramatically faster at building the wrong thing.
My setup today
I use Claude Code directly in my terminal alongside Cursor IDE. For complex refactoring tasks, I start with Claude Code to understand the codebase and plan the approach, then switch to Cursor for the actual implementation with inline AI assistance. For greenfield features, I often let Claude Code scaffold the entire structure and then refine.
The future of programming is not AI replacing developers. It is developers who use AI replacing developers who do not. And honestly? Writing code has never been more fun.