claude codeexplainerhow to

How I Use Claude Code Professionally: My Claude Code Tips

This is how I actually use Claude Code day-to-day in a professional software development workflow. From setup and CLAUDE.md configuration to slash commands, context management, and real tips that improve output quality on every project. No hype, just what works.

How I Use Claude Code Professionally: My Claude Code Tips
Cristian Da Conceicao
Founder of Picasso IA

I've been using Claude Code as part of my daily professional workflow for months, and the productivity difference is real. Not in a vague, hand-wavy way. In a concrete "I shipped that feature in two hours instead of two days" way. But it took time to figure out how to get the most out of it. These are the actual habits, configurations, and workflows I've settled on after a lot of trial and error.

Developer hands typing on mechanical keyboard with terminal code reflected in keycaps

Why It Clicked for Me

Before Claude Code, I was copy-pasting code into a chat interface, losing context constantly, and spending half my time reformatting AI output to fit my actual codebase. Claude Code runs directly in the terminal, reads your files, and operates inside your project directory. That changes everything.

It Sees Your Actual Code

This is the difference that matters most. Claude Code doesn't work on abstract snippets. It reads your real files, sees your real imports, and understands your real project structure. When I ask it to add a feature, it knows what already exists. It doesn't invent imports that don't exist or write functions that duplicate something you already have three files away.

The Terminal Workflow Fits

I live in the terminal. Having an AI assistant that works where I already work, without switching contexts and without copying and pasting, just makes sense. The friction is nearly zero once you have it configured. I open my project directory, start a Claude Code session, and I'm immediately productive.

Developer at standing desk with split terminal and AI assistant panel visible on monitor

The Setup That Actually Matters

Most developers skip the setup phase and then wonder why their results are inconsistent. Don't do that. The five minutes you spend on configuration saves hours every week.

CLAUDE.md Is Non-Negotiable

Every project I work on has a CLAUDE.md file at the root. This is the configuration file Claude Code reads automatically when you start a session in that directory. I put everything in here:

  • What the project does (one clear paragraph, not marketing language)
  • The stack: language, frameworks, testing library, database
  • Build and run commands: how to start the dev server, run tests, build for production
  • Naming conventions: file naming, function naming, CSS class naming style
  • Hard constraints: "never use any in TypeScript," "all API calls go through the service layer," "no direct DOM manipulation in React components"
  • What NOT to generate: patterns or abstractions you've explicitly decided not to use in this codebase

Without this file, Claude Code has to infer the rules on every session. With it, you get a collaborator that already knows the codebase norms before the first message.

Allowlists and Permissions

Claude Code prompts for permission before running shell commands. I configure the allowlist in .claude/settings.json so I don't get interrupted on every operation I'm comfortable with. For local dev servers, test runners, and build commands, I allow them upfront. For destructive operations like database migrations, force pushes, or any rm -rf pattern, I keep the confirmation prompts intentionally active.

Scoping the Tools Per Project

I don't give Claude Code access to every tool in every project. In a frontend project, it doesn't need database access. In a backend service, it doesn't need browser automation. The tighter your tool scope, the more precise and less risky each interaction becomes. Think of it as least-privilege access for your AI coding assistant.

Aerial bird's-eye view of developer workspace with notebook, laptop, espresso cup, and code printouts

Slash Commands I Actually Use

These aren't obvious from the documentation, but they're some of the most useful features in a real daily workflow.

/clear When Context Gets Stale

Context window management is real. After a long session, you've accumulated a lot of conversation history. Some of it is relevant. Most of it is noise from earlier tasks. When I switch to a completely different part of the codebase, I run /clear to wipe the session history. A clean context produces sharper, more focused answers.

/compact for Long Sessions

When I'm deep in a coding session but don't want to lose the thread completely, I use /compact. It summarizes the current conversation into a compressed form, keeping the meaningful context but freeing up token budget. I use this when I'm mid-feature and need to continue without starting over from scratch.

/model for Different Tasks

Not every task needs the same model. For quick edits, explanations, and simple refactors, a faster model works well and responds quickly. For complex architectural decisions or multi-file refactors with subtle interdependencies, I switch to Claude Opus 4.7 for deeper reasoning. Claude 4 Sonnet sits in the middle: precise, reliable, and well-suited for most professional coding tasks. Matching the model to the complexity of the task keeps costs down while keeping output quality where it needs to be.

Developer studying an ultrawide monitor showing a complex code refactoring diff with green and red lines

How I Give Context (Without Wasting It)

The biggest gap between developers who get great output from Claude Code and those who get mediocre output is how they frame their requests. It's not about being verbose. It's about giving the model what it needs to make the right decision on the first try.

Describe Intent, Not Just the Task

Weak prompt: "Fix the bug in auth.ts."

Strong prompt: "The validateUser function in auth.ts throws a null pointer exception when the user object doesn't have an email field. The email field is optional in the schema, but the function doesn't handle that case. Fix it without changing the function signature or return type."

The second version gives Claude Code the what, the why, and the constraint. You get the right fix in one shot instead of three revision cycles.

Give It the Full Error

When debugging, I paste the full stack trace. Not a summary. Not a paraphrase. The actual error output, with file paths, line numbers, and the message exactly as it appeared. Root cause analysis is dramatically better when Claude Code works from the real error rather than a description of it.

Establish What Already Exists

Before asking for a new feature, I'll describe the existing code in context: "Here's the current UserService implementation. I want to add a deactivateUser method that follows the same pattern as deleteUser but sets status to inactive instead of removing the record." This eliminates ambiguity about style and existing patterns before Claude Code writes a single line.

Close-up of developer's hand near laptop trackpad with debugging terminal output visible on screen

My Refactoring Workflow

Refactoring is where Claude Code genuinely saves me the most time. But you need the right process to avoid introducing bugs while moving fast.

Always Review the Diff

Before I approve any multi-file edit, I read the diff carefully. Not skimming. Actually reading every changed line and asking: does this change do what I intended? Does it touch anything I didn't expect? Claude Code is good at refactors, but it sometimes makes adjacent changes based on assumptions about what you probably want. The diff is your last checkpoint before changes land.

One Concern at a Time

I don't ask for large refactors in a single shot. I break them into atomic steps: "Rename all instances of UserRecord to UserDocument across the codebase." Review and approve. "Now update the TypeScript interface at types/user.ts to match the new naming." Review and approve. Smaller sequential changes are easier to verify and safer to apply.

Use It for Mechanical Refactors

The refactors I use Claude Code for most are the tedious, repetitive ones. Migrating from one HTTP client to another. Adding consistent error handling across 40 similar functions. Updating all API calls to use a new authentication pattern. These are tasks where a human gets tired and introduces subtle inconsistencies. Claude Code stays consistent across every instance.

Two software developers collaborating at a shared desk with code on the monitor, exposed brick wall background

Writing Tests with Claude Code

I've changed how I write tests since using Claude Code. I now write production code first and ask Claude Code to generate tests after, using the real implementation as context.

The Prompt Pattern That Works

After writing a function, I'll say: "Write unit tests for this function. Cover the happy path, null and empty inputs, and any edge cases you can identify from the implementation. Match the assertion style and test file structure used in the existing tests in this directory."

That last instruction matters a lot. Pointing it to existing test files keeps the style consistent and prevents it from inventing a different assertion library or test organization pattern.

Review the Coverage Critically

Claude Code will sometimes generate tests that look thorough but miss the actual edge cases in your specific implementation. I always ask myself: did it test the exact branching paths in my function? Did it test the side effects, not just the return value? A test that tests the wrong behavior is worse than no test, because it gives false confidence during CI.

Ask for Tests That Would Fail

One technique I use regularly: ask Claude Code to write a test case that would currently fail given the implementation, then ask it to fix the implementation to make it pass. This forces it to think about what the code is actually doing wrong, rather than generating plausible assertions around the existing behavior.

Side profile of developer with satisfied expression, monitor glow showing green passing test checkmarks

Where Claude Code Struggles

Being honest about the limitations makes you a better user of the tool and prevents you from shipping bugs you could have caught.

Long Dependency Chains

When a change requires following a dependency chain across six or seven files, Claude Code can lose track. If your fix in routes/users.ts depends on understanding middleware/auth.ts, services/userService.ts, models/user.ts, and utils/validation.ts to get right, you may need to read those files into context explicitly before asking for the change. Don't assume it will find and load all of them on its own.

Confident but Wrong

Claude Code will sometimes give you an incorrect answer with high apparent confidence. It won't hedge or say "I'm not sure about this." It'll write code that compiles but has a subtle logical error. This is exactly why you run your test suite after every AI-generated change. The model is a capable collaborator, not a source of ground truth.

Context Drift in Long Sessions

In a very long session where you've pivoted direction several times, Claude Code can start drawing on stale context from earlier in the conversation. If you've significantly changed your approach mid-session, use /clear and re-establish the current state of the code. Starting fresh is always better than letting outdated context influence new decisions.

Developer leaning back in ergonomic chair with relaxed satisfied expression in a warm home office

Other AI Models Worth Having in Your Toolkit

Claude Code is built on Anthropic's Claude model family, but professional AI-assisted development doesn't stop there. Different models have different strengths and it pays to know what each one does well.

Claude 4.5 Sonnet brings improved code generation quality for longer, more complex tasks. Claude Opus 4.6 brings deeper reasoning for architectural decisions where you need more than fast text completion. Claude 3.7 Sonnet holds up well for documentation, explanations, and written summaries.

For open-source alternatives, Deepseek R1 is genuinely impressive on coding tasks and worth running side by side with Claude for comparison. GPT-4o remains strong for general reasoning and can serve as a useful second opinion on complex decisions. When speed matters and the task is lighter, Claude 4.5 Haiku is fast and cost-efficient without sacrificing too much accuracy.

The Habits That Made the Real Difference

After months of daily use, these are the specific habits that moved the needle most:

HabitWhy It Works
Write CLAUDE.md before anything elseEliminates repeated context-setting on every new session
Read the full diff before approvingCatches subtle errors before they compound
Use /clear between unrelated tasksKeeps context sharp and prevents stale drift
Paste full error stack tracesDramatically improves root cause accuracy
Request small, sequential changesEasier to review, safer to apply
Name constraints explicitly in promptsPrevents unwanted style changes or extra refactors
Match the model to the task complexityBalances output quality and cost per request

Tip: The fastest way to improve your Claude Code output quality is to make your first message more specific. Every vague word in your prompt costs you a revision cycle.

What This Actually Adds Up To

I'm not writing less code. I'm writing better code, faster, with fewer bugs making it to review. Claude Code doesn't replace thinking about architecture, design, or trade-offs. It removes friction from the parts that don't require creative thought: boilerplate, repetitive updates, test generation, formatting fixes, and obvious bug corrections.

The developers getting the most out of AI coding tools aren't delegating everything. They're staying in control while letting the tool handle the grunt work. That balance is the real skill now.

If you want to run the models powering tools like Claude Code directly in your browser, Picasso IA has Claude Opus 4.7, Claude 4 Sonnet, Claude 3.5 Sonnet, and dozens of other models all in one place. No API keys, no local setup required. You can test prompts, compare outputs across models, and build better intuition for what to expect from each one before bringing it into your professional workflow.

Developer working at desk at dusk with city skyline through window, monitor glow illuminating face

Share this article