<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Dzianis Karviha</title>
    <description>The latest articles on DEV Community by Dzianis Karviha (@dzianiskarviha).</description>
    <link>https://dev.to/dzianiskarviha</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3673674%2Fec0cce81-d794-4e20-9006-fe425eb2f8e4.jpg</url>
      <title>DEV Community: Dzianis Karviha</title>
      <link>https://dev.to/dzianiskarviha</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dzianiskarviha"/>
    <language>en</language>
    <item>
      <title>How do you decide what to give to Claude Code, and what to do yourself?</title>
      <dc:creator>Dzianis Karviha</dc:creator>
      <pubDate>Fri, 29 May 2026 08:10:24 +0000</pubDate>
      <link>https://dev.to/dzianiskarviha/how-do-you-decide-what-to-give-to-claude-code-and-what-to-do-yourself-2630</link>
      <guid>https://dev.to/dzianiskarviha/how-do-you-decide-what-to-give-to-claude-code-and-what-to-do-yourself-2630</guid>
      <description>&lt;p&gt;At a recent event, someone asked me two questions. I could not answer them well at the time:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;How do you decide which tasks to give to Claude Code, and which ones to do yourself? And are you afraid that the AI will do all the creative work, so your only job becomes managing agents?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I gave a generic answer at the moment. But after thinking about it, I believe the answer is simple.&lt;/p&gt;

&lt;p&gt;Let me start with a statement: software engineering is a craft, not creative work. We practice and develop our skills, repeat the same routines, and learn from our mistakes. But most of the time, we use building blocks that other people invented and tested before us: design patterns, infrastructure tools, etc. The most useful thing we can do is learn from others’ experiences and find a way to use them in our own projects.&lt;/p&gt;

&lt;p&gt;So we can divide our work into three groups:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Routine&lt;/strong&gt; — the daily, mechanical work. Writing code and tests based on a design that already exists. Using the patterns already established and proven on the project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Engineering&lt;/strong&gt; — this is where the constraints matter. There are often several possible solutions. Your job is to pick the one that fits the project best, or to see that any of them will work and choose the simplest one. When the design is right, the task is almost finished. You just need to write it down.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creativity&lt;/strong&gt; — making something that did not exist before. Many engineers, including me, may never do this in their whole career, and that is completely fine: the value of our profession is in execution, not invention.&lt;/p&gt;

&lt;p&gt;Here is an example. The idea of Claude Code as an agentic tool in the terminal was creativity. The level of abstraction is exactly right for this kind of generic developer tool. It is a simple idea, but I had always used IDEs, and I never thought that coding using the terminal could be more efficient. The first time I tried it, I understood right away that this was the right direction. Everything after that idea is engineering and routine.&lt;/p&gt;

&lt;p&gt;With this framework, the two questions become easy to answer:&lt;/p&gt;

&lt;p&gt;→ Claude Code can reliably do all of the &lt;strong&gt;routine&lt;/strong&gt;. As an engineer, you should give this work to it (or any other similar tool), because it is simply the most efficient way to do it. You can also build workflows where non-technical people complete this kind of work on real projects.&lt;/p&gt;

&lt;p&gt;→ In the &lt;strong&gt;engineering&lt;/strong&gt; part, Claude Code is a strong assistant. You can brainstorm with it and find solutions you would have missed. But the decisions are still your job. "Teaching" the tool to make good choices by clearly describing your constraints is itself a great engineering task. This is an area where you draw the line between the tool’s job and your own.&lt;/p&gt;

&lt;p&gt;→ I do not expect these tools to create real &lt;strong&gt;creativity&lt;/strong&gt; any time soon. By their nature, they can only reproduce what existed before.&lt;/p&gt;

&lt;p&gt;So, to use Claude Code well, you need two things. First, the experience to separate engineering from routine — in this way, you’ll do more engineering and fewer routine tasks. Second, the judgment to give the tool the right amount of freedom in the engineering part, based on the needs of your specific project.&lt;/p&gt;

&lt;p&gt;That's how I think about it now. How would you answer these two questions?&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>claude</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Claude Code in Production: 40% Productivity Increase on a Large Project</title>
      <dc:creator>Dzianis Karviha</dc:creator>
      <pubDate>Mon, 22 Dec 2025 13:40:49 +0000</pubDate>
      <link>https://dev.to/dzianiskarviha/integrating-claude-code-into-production-workflows-lbn</link>
      <guid>https://dev.to/dzianiskarviha/integrating-claude-code-into-production-workflows-lbn</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Over the past 4 months since August 2025, I've been actively integrating Claude Code into my development workflow. After this period of experimentation and practice, I believe Claude Code is now mature enough to be successfully integrated into production workflows on projects of various scales.&lt;/p&gt;

&lt;p&gt;I'm a solo maintainer of a 350k+ LOC codebase (PHP, TypeScript/React, React Native, Terraform, Python) with 10+ years of commercial software development experience. Since August, 80%+ of all code changes have been fully written by Claude Code — generated, then corrected by Claude Code after my review, with only minimal manual refactoring. All of them are reviewed by me. I've implemented many updates of different sizes.&lt;/p&gt;

&lt;p&gt;I've compiled my experience with Claude Code into this guide. I'll share my approach to using Claude Code in the development workflow, starting from the basic tools and building up to a complete overview of the workflows I use. &lt;/p&gt;

&lt;p&gt;This guide focuses on integrating Claude Code into existing large projects. While my experience is as a solo maintainer, the approaches described apply to engineering processes in general and can be adapted for teams. The principles should also work well with other tools like Cursor CLI or Codex.&lt;/p&gt;

&lt;p&gt;This guide complements the official Claude Code documentation by focusing on real-world integration patterns. For API reference and basic usage, see &lt;a href="https://code.claude.com/docs" rel="noopener noreferrer"&gt;https://code.claude.com/docs&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Before Claude Code
&lt;/h2&gt;

&lt;p&gt;Like most software developers today, I've been using GitHub Copilot as an intelligent autocomplete tool. And Claude Code wasn't my first attempt to delegate complete tasks to an LLM.&lt;/p&gt;

&lt;p&gt;In early 2025, I tried to adopt Cursor IDE (&lt;a href="https://cursor.com/" rel="noopener noreferrer"&gt;https://cursor.com/&lt;/a&gt;) for my workflow. It's built on top of VS Code. The disadvantage of working in an unfamiliar IDE outweighed all the benefits I gained from Cursor. I'm a big fan of JetBrains products and have been using IntelliJ IDEA for a decade. I tried using both IDEs—IntelliJ IDEA for regular work and Cursor for delegating tasks to the LLM—but this approach led to constant context switching and loss of focus. Eventually, I stopped using Cursor entirely.&lt;/p&gt;

&lt;p&gt;Then I discovered Claude Code. This tool has a completely different design. Instead of providing a full IDE, it's a terminal-based CLI tool with a thin integration layer for your existing IDE. This allows you to integrate LLM assistance without changing your development environment. Such a simple setup provides huge opportunities for customization and fits various workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Challenges
&lt;/h2&gt;

&lt;p&gt;Integrating Claude Code into an existing codebase comes with two core challenges.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Context window limits&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Claude Code has a 200k token context window—less than 5% of this project's codebase. You must carefully select which information to provide: include code that shows your patterns; exclude anything irrelevant. Too little context leads to incorrect implementations; too much leads to context pollution and degraded performance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Balancing speed, quality, and oversight&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Implementation with an LLM should be at least as fast as doing it yourself—otherwise, you lose the benefit. This creates a tradeoff:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Quality&lt;/strong&gt;: Early on, Claude produces inconsistent code that doesn't follow your patterns—forcing refactoring or detailed prompt crafting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Oversight&lt;/strong&gt;: Small tasks can run with minimal supervision; architectural changes need close attention.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The challenge is developing intuition for when to step in and when to let Claude work autonomously.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Claude Code Installation
&lt;/h2&gt;

&lt;p&gt;This guide is focused on Claude Code. To use it, you need a Claude.ai account and to install Claude Code on your system.&lt;br&gt;
Follow the official guide &lt;a href="https://code.claude.com/docs/en/quickstart#step-1:-install-claude-code" rel="noopener noreferrer"&gt;https://code.claude.com/docs/en/quickstart#step-1:-install-claude-code&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;: All code you work with in Claude Code is sent to Anthropic's servers for processing. Before using it on any project, get explicit consent from the project owner or customer, and review &lt;a href="https://www.anthropic.com/privacy" rel="noopener noreferrer"&gt;Anthropic's privacy policy&lt;/a&gt;. This applies especially to proprietary code or projects with strict data handling requirements. Do not apply it on the project until the consent is received.&lt;/p&gt;

&lt;p&gt;To try out the tool, you'll need to buy at least a Pro Plan subscription costing $20/month.  For regular usage, you'll likely need a Max subscription ($100/month). Claude sets usage limits per 5-hour window—with the Pro plan, I'd hit the limit within 1 hour of active work. The Max plan (5x the capacity) fits my workflow well, and I usually use it close to its limits.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd7qj4517gdgkfyy0ipbo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd7qj4517gdgkfyy0ipbo.png" alt="Claude Code Limits" width="641" height="132"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is the official Claude documentation &lt;a href="https://platform.claude.com/docs/en/" rel="noopener noreferrer"&gt;https://platform.claude.com/docs/en/&lt;/a&gt; and the Claude Code documentation &lt;a href="https://code.claude.com/docs/en" rel="noopener noreferrer"&gt;https://code.claude.com/docs/en&lt;/a&gt;. I'll reference specific parts in the subsequent sections.&lt;/p&gt;
&lt;h2&gt;
  
  
  4. Building Blocks
&lt;/h2&gt;

&lt;p&gt;This section is not documentation for Claude Code features, but rather a short overview in which I highlight specific Claude Code tools and aspects which are important for my use cases. You might find different ways to apply them for your scenarios.&lt;/p&gt;
&lt;h3&gt;
  
  
  Simple prompt
&lt;/h3&gt;

&lt;p&gt;It's the simplest tool. You can type &lt;code&gt;claude&lt;/code&gt; in your working directory and then type any prompt, press Enter and wait for the result. Claude Code will try to perform the task you've just provided to it.&lt;/p&gt;
&lt;h3&gt;
  
  
  CLAUDE.md file
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://platform.claude.com/docs/en/agent-sdk/modifying-system-prompts#method-1-claude-md-files-project-level-instructions" rel="noopener noreferrer"&gt;https://platform.claude.com/docs/en/agent-sdk/modifying-system-prompts#method-1-claude-md-files-project-level-instructions&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CLAUDE.md file is a plain but powerful feature of Claude Code. The idea is simple: CLAUDE.md content is always included in the context when Claude Code works with files in this directory. In CLAUDE.md, you can mention documentation files, source code files, or any other references Claude should consider. There's no special syntax—just write naturally, like: "See &lt;code&gt;docs/git-commit-format.md&lt;/code&gt; when preparing Git commits." Claude Code will include referenced files only when relevant to the current task.&lt;/p&gt;

&lt;p&gt;Also, it supports nested CLAUDE.md files. For example, when you have the following structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;root
|_CLAUDE.md
|_dir1
  |_CLAUDE.md
  |_dir2
    |_CLAUDE.md
    |_MyComponent.tsx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When Claude Code reads MyComponent.tsx file - it will include &lt;code&gt;root/CLAUDE.md&lt;/code&gt;, &lt;code&gt;root/dir1/CLAUDE.md&lt;/code&gt;, &lt;code&gt;root/dir1/dir2/CLAUDE.md&lt;/code&gt; files in the context.&lt;/p&gt;

&lt;p&gt;This hierarchy lets you organize context by scope: project-wide conventions in the root CLAUDE.md, module-specific patterns in subdirectory files. Claude gets both general and specific context when working with module files.&lt;/p&gt;

&lt;h3&gt;
  
  
  Subagents
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://code.claude.com/docs/en/sub-agents" rel="noopener noreferrer"&gt;https://code.claude.com/docs/en/sub-agents&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The official doc says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Custom subagents in Claude Code are specialized AI assistants that can be invoked to handle specific types of tasks. They enable more efficient problem-solving by providing task-specific configurations with customized system prompts, tools and a separate context window.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Each subagent has its own context, which helps reduce the context usage of the main conversation. Also, it has other features - like limiting tools available for this agent. In many guides on the Internet, you might find the description of the pipelines people build using subagents, like: Requirements Writer -&amp;gt; Requirements Reviewer -&amp;gt; Software Architect -&amp;gt; Backend Developer -&amp;gt; Frontend Engineer -&amp;gt; Code Reviewer -&amp;gt; etc.. &lt;/p&gt;

&lt;p&gt;Personally, I didn't find this approach to work well. It doesn't mean that it cannot be effective, but I found it's beneficial to have a single conversation with the feature context - which, of course, has its constraints - in context window size. Mostly, I'm using subagents for code reviewing. During the code review, the subagent runs with its own context (base process just provides some overview of what should be reviewed) and it's not biased by the decisions made during the source code implementation.&lt;/p&gt;

&lt;p&gt;There are many public collections of Claude Code subagents like this, for example &lt;a href="https://github.com/VoltAgent/awesome-claude-code-subagents" rel="noopener noreferrer"&gt;https://github.com/VoltAgent/awesome-claude-code-subagents&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;However, I suggest building your own subagents (and other prompts) designed specifically for your project rather than using public ones. Generic prompts won't understand your codebase patterns and conventions. See the "It's all about context" section for more on why minimal, project-specific prompts work better.&lt;/p&gt;

&lt;p&gt;Technically, a subagent is just a markdown file located in .claude/agents directory or its subdirectories. Claude Code uses it as a base for building the context in the child process.&lt;/p&gt;

&lt;p&gt;Claude autonomously decides when to invoke a specific subagent (based on the subagent description). Also, you can explicitly ask Claude to use a specific subagent (&lt;code&gt;use backend-codereviewer subagent for this task&lt;/code&gt;, and so on).&lt;/p&gt;

&lt;p&gt;The following subagents are used on my project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;backend-code-reviewer
frontend-code-reviewer
mobile-code-reviewer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When I say "separate context," I mean that subagents run in their own context window, independent from your main conversation. The main process shares only what you explicitly pass to the subagent — it doesn't inherit the full conversation history. This keeps the subagent focused and unbiased by previous decisions, which is especially valuable for code review.&lt;/p&gt;

&lt;h3&gt;
  
  
  MCP server
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://code.claude.com/docs/en/mcp" rel="noopener noreferrer"&gt;https://code.claude.com/docs/en/mcp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;MCP is the protocol that allows you to connect with external sources, for example, with the task tracker, with the monitoring tool, Slack, etc.&lt;/p&gt;

&lt;p&gt;While you can achieve the same result with a set of bash scripts and skills, MCP is the standard protocol, understandable by many LLMs.&lt;/p&gt;

&lt;p&gt;Each MCP server provides a set of tools that Claude Code may use when it needs to.&lt;/p&gt;

&lt;p&gt;Here is a specification of tools in the custom MCP server I implemented for getting the data from YouTrack (the task tracker we use on the project).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;get_issue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Get YouTrack issue details including title, description, and attached files&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;inputSchema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;object&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="na"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                  &lt;span class="na"&gt;issueId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                      &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;The YouTrack issue ID (e.g., PROJECT-123)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                  &lt;span class="p"&gt;},&lt;/span&gt;
              &lt;span class="p"&gt;},&lt;/span&gt;
              &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;issueId&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
          &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;get_issue_comments&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Get all comments for a YouTrack issue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;inputSchema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;object&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="na"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                  &lt;span class="na"&gt;issueId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                      &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;The YouTrack issue ID (e.g., PROJECT-123)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                  &lt;span class="p"&gt;},&lt;/span&gt;
              &lt;span class="p"&gt;},&lt;/span&gt;
              &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;issueId&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
          &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;get_attachment_content&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Get the content of a specific attachment from a YouTrack issue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;inputSchema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;object&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="na"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                  &lt;span class="na"&gt;issueId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                      &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;The YouTrack issue ID (e.g., PROJECT-123)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                  &lt;span class="p"&gt;},&lt;/span&gt;
                  &lt;span class="na"&gt;attachmentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                      &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;The attachment ID to retrieve&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                  &lt;span class="p"&gt;},&lt;/span&gt;
              &lt;span class="p"&gt;},&lt;/span&gt;
              &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;issueId&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;attachmentId&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
          &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;get_comment_attachment_content&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Get the content of a specific attachment from a YouTrack issue comment&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;inputSchema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;object&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="na"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                  &lt;span class="na"&gt;issueId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                      &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;The YouTrack issue ID (e.g., PROJECT-123)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                  &lt;span class="p"&gt;},&lt;/span&gt;
                  &lt;span class="na"&gt;commentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                      &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;The comment ID&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                  &lt;span class="p"&gt;},&lt;/span&gt;
                  &lt;span class="na"&gt;attachmentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                      &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;The attachment ID to retrieve&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                  &lt;span class="p"&gt;},&lt;/span&gt;
              &lt;span class="p"&gt;},&lt;/span&gt;
              &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;issueId&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;commentId&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;attachmentId&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
          &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So, when Claude Code has a YouTrack issue number, it can get the issue description using &lt;code&gt;get_issue&lt;/code&gt; tool and all comments using &lt;code&gt;get_issue_comments&lt;/code&gt;, when there are attachments, it'll read them using &lt;code&gt;get_attachment_content&lt;/code&gt; or &lt;code&gt;get_comment_attachment_content&lt;/code&gt; tools.&lt;/p&gt;

&lt;p&gt;This approach allows you to not copy-paste requirements and conversation, but just reference your task tracking / log monitoring tool for getting relevant details.&lt;/p&gt;

&lt;p&gt;There are already many published official MCP servers, if an official MCP server is not available, I prefer to write my own (using Claude Code, you don't even need to study the MCP specification for it).&lt;/p&gt;

&lt;h3&gt;
  
  
  Skills
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://code.claude.com/docs/en/skills" rel="noopener noreferrer"&gt;https://code.claude.com/docs/en/skills&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a relatively new tool introduced in Claude Code in the middle of October 2025.&lt;br&gt;
It's just a different dimension of presenting the project knowledge in comparison with subagents and CLAUDE.md files. According to Claude Code documentation, skills are expected to be the description of atomic operations/updates you do on the project, like &lt;code&gt;implementing-unit-test&lt;/code&gt;, &lt;code&gt;implementing-controller&lt;/code&gt;, &lt;code&gt;creating-database-migration&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Unlike subagents, skills are used in the same conversation from which they are called (so skills use the same context as the main process). Unlike commands, skills are invoked by Claude Code autonomously (and you may ask to use a skill explicitly). Within the skill diretory, you can develop a custom bash/python/etc script that will perform specific tasks and skill will have knowledge how to utilise these bash (or Python, or in any other language) scripts.&lt;/p&gt;

&lt;p&gt;You can decompose the patterns you use and the approaches applied to your project into small pieces and describe each as a separate skill.&lt;/p&gt;

&lt;p&gt;For example, when we speak about a REST web application. To implement a single API method, Claude Code should understand the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How controllers are implemented (how routes are set up, how HTTP request is mapped to request DTO)&lt;/li&gt;
&lt;li&gt;How user authentication is done (how to get the actual user id and data, etc.)&lt;/li&gt;
&lt;li&gt;How database transactions are configured for requests&lt;/li&gt;
&lt;li&gt;How domain services are implemented&lt;/li&gt;
&lt;li&gt;How domain entities are implemented&lt;/li&gt;
&lt;li&gt;How data is persisted&lt;/li&gt;
&lt;li&gt;Events and subscriptions functionality if these patterns are used&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When this information is not provided via skill, Claude Code will try to understand patterns just based on the existing source code and documentation—and in most scenarios, it does this successfully. Skills offer a more structured way to encode your patterns.&lt;/p&gt;

&lt;p&gt;Note: Earlier, I experienced skills being invoked rarely—Claude Code seemed to use SKILL.md content without explicitly indicating the skill was running - while it seem that Claude Code actually reads SKILL.md content but just didn't indicate that skill is run. This has improved in recent versions. I'd suggest experimenting with skills on your projects—along with Plugins (&lt;a href="https://code.claude.com/docs/en/plugins" rel="noopener noreferrer"&gt;https://code.claude.com/docs/en/plugins&lt;/a&gt;), they can be a good way to share patterns within your organization.&lt;/p&gt;
&lt;h3&gt;
  
  
  Slash commands
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://code.claude.com/docs/en/slash-commands" rel="noopener noreferrer"&gt;https://code.claude.com/docs/en/slash-commands&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Claude Code provides a set of standard slash commands (like &lt;code&gt;/clear&lt;/code&gt; for clearing the existing context, &lt;code&gt;/exit&lt;/code&gt; etc).&lt;/p&gt;

&lt;p&gt;Also, you can implement your custom slash commands, which are just shortcuts for your prompts.&lt;/p&gt;

&lt;p&gt;Instead of typing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Commit all not committed frontend changes.

See backend/doc/git-commit-format.md for reference.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and other (possibly, much longer prompts) you might just type: &lt;code&gt;/commit:backend&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. It's all about context
&lt;/h2&gt;

&lt;p&gt;Context management is the single most important skill for effective Claude Code usage.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why context matters
&lt;/h3&gt;

&lt;p&gt;This section is short, but important. The way you work with context has a high impact on the result.&lt;/p&gt;

&lt;p&gt;The following article clearly states the problem &lt;a href="https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents" rel="noopener noreferrer"&gt;https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You should always think about the ways to provide as little information as required for the LLM agent to maximize the chances that it completes the task successfully.&lt;/p&gt;

&lt;p&gt;An important principle that is stated in the article above:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Regardless of how you decide to structure your system prompt, you should be striving for the minimal set of information that fully outlines your expected behavior. ... Given the rapid pace of progress in the field, "do the simplest thing that works" will likely remain our best advice for teams building agents on top of Claude.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That's why generic public prompt collections (like those mentioned in the Building Blocks section) often don't work well—they're too abstract for your specific codebase. &lt;/p&gt;

&lt;p&gt;I won't share prescriptive prompt engineering rules—they change as Claude improves. Instead, focus on principles: keep documents to 50-100 lines, start with the bare minimum, test on real tasks, iterate based on results. For syntax, best practices and detailed guidance, see the official documentation at &lt;a href="https://code.claude.com/docs" rel="noopener noreferrer"&gt;https://code.claude.com/docs&lt;/a&gt;. Over time, you'll build intuition for what works.&lt;/p&gt;

&lt;p&gt;Claude Code has a 200K token context limit. When reached, it automatically compacts by summarizing—often losing important details. I've experienced forgotten tasks and degraded performance after compaction. The practical solution: don't reach the limit. Clear context with &lt;code&gt;/clear&lt;/code&gt; and start fresh when tasks are complete.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Workflows implementation
&lt;/h2&gt;

&lt;p&gt;After understanding the challenges and building blocks, this section shows how I combine them into daily workflows. I'll describe my main workflows and provide specific examples of how I work with tasks.&lt;/p&gt;

&lt;p&gt;By workflow, I mean a repeatable process for completing tasks. It includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;My actions: reviewing plans, making decisions, providing approvals&lt;/li&gt;
&lt;li&gt;Claude Code commands: initiating tasks, triggering reviews, committing&lt;/li&gt;
&lt;li&gt;Other tools: task tracker integration, code review subagents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each workflow follows steps: gather context → clarify requirements → prepare implementation plan → review plan by the developer -&amp;gt; implement planned updates → review implementation by Claude Code and developer → commit. Key gates (plan review, code review) ensure I maintain control over the output.  &lt;/p&gt;

&lt;h3&gt;
  
  
  6.1 Implementation constraints
&lt;/h3&gt;

&lt;p&gt;This section describes the constraints I follow when working with Claude Code. These guide my decisions about LLM autonomy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Having full control over the design decisions
&lt;/h3&gt;

&lt;p&gt;When building a quick prototype, you might not be worried about the quality of the generated source code, and you might give the LLM the opportunity to design and implement solutions on its own, but for a large project, this approach will fail—Claude needs human guidance for design decisions.&lt;/p&gt;

&lt;p&gt;So, for medium and large-sized tasks, I'm preparing implementation plans on my own. For small-sized tasks, I'm asking Claude Code to prepare the implementation plan first, and carefully review it before accepting.&lt;/p&gt;

&lt;h3&gt;
  
  
  Implementing each task within the Claude Code context window
&lt;/h3&gt;

&lt;p&gt;As covered earlier, context compaction degrades performance. I split tasks to fit within a single context window. This also aligns with CI practices—smaller tasks mean smaller, more focused commits.&lt;/p&gt;

&lt;h3&gt;
  
  
  6.2 Repository and project structure
&lt;/h3&gt;

&lt;h4&gt;
  
  
  6.2.1 Modular structure
&lt;/h4&gt;

&lt;p&gt;You need to help Claude Code understand the structure of your project so it can efficiently navigate it and find the needed functionality more quickly. &lt;/p&gt;

&lt;p&gt;I recommend using a feature-based structure for your project instead of a flat or component-type-based structure.&lt;/p&gt;

&lt;p&gt;Example of feature-based structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;src/
|_projects/
  |_projects/
  |_tasks/
    |_actions/
    |_list/
    |_view/
    |_comments/
      |_actions/
      |_view/
|_notifications/
  |_ ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example of component-type-based structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;src/
|_hooks/
|_pages/
|_services/
|_types/
|_...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A feature-based structure is easier for both humans and programs to understand. And this structure follows the high cohesion principle. A modular structure simplifies the gathering of relevant context for an LLM agent — by reading the project documentation and files from a specific directory, it can get the information about the full feature implementation.&lt;/p&gt;

&lt;h4&gt;
  
  
  6.2.2 CLAUDE.md files and project documentation
&lt;/h4&gt;

&lt;p&gt;My root level CLAUDE.md has the following structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Technical Stack overview&lt;/span&gt;

[Just list of used frameworks, main libraries, database, etc]

&lt;span class="gu"&gt;## Architecture overview&lt;/span&gt;

&lt;span class="gu"&gt;### Feature module structure&lt;/span&gt;

[Short description of typical feature-module structure]

&lt;span class="gu"&gt;### Key Feature modules&lt;/span&gt;

[List of key root-level modules with 1-line description]

&lt;span class="gu"&gt;### Key Patterns&lt;/span&gt;

[Statement of key patterns used in the source code with the reference to the document that provides some more information how the pattern is applied in the project (uses progressive disclosure)]

&lt;span class="gu"&gt;### Guides&lt;/span&gt;

[The set of links to documentation documents in the format:
&lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="sb"&gt;`See ./filepath.md for ...`&lt;/span&gt;
That references the documentation related testing strategy, git commit format, etc. So Claude Code might read these docs if it's needed for the current task.]

&lt;span class="gu"&gt;### HARD RULES&lt;/span&gt;

[The list of unstructured rules that I add to tweak Claude Code behavior (when I notice that it fails consistently with some tasks). Also, you can type &lt;span class="sb"&gt;`#`&lt;/span&gt; to quickly add some rule to this section just from your current conversation.
When this list grows you might revise it and structure it - create separate documents, etc.]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I store all project documents in the same repository in the &lt;code&gt;doc/&lt;/code&gt; directory.&lt;/p&gt;

&lt;p&gt;A modular structure also lets you use nested CLAUDE.md files—each level adds relevant context automatically. You might create a CLAUDE.md file on each level, and when Claude Code accesses &lt;code&gt;src/projects/tasks/comments/actions/UpdateButton.tsx,&lt;/code&gt; it will add to the context files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CLAUDE.md&lt;/li&gt;
&lt;li&gt;src/projects/CLAUDE.md&lt;/li&gt;
&lt;li&gt;src/projects/tasks/CLAUDE.md&lt;/li&gt;
&lt;li&gt;src/projects/tasks/comments/actions/CLAUDE.md&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And all these files will append to each other by providing highly relevant data to the context. &lt;/p&gt;

&lt;p&gt;Just a note: I do not recommend creating CLAUDE.md for every single module that you have in your project. Start without this module CLAUDE.md file, add it only when you see issues in understanding some implementation. Also, if Claude Code needs to access the directory frequently, you might want to add CLAUDE.md to make it work faster by providing a condensed description of the module implementation. But assume by default that Claude Code should understand the implementation based on your project-level documentation (remember the rule: use the simplest solution that works).&lt;/p&gt;

&lt;h4&gt;
  
  
  6.2.3 Monorepo setup
&lt;/h4&gt;

&lt;p&gt;Beyond organizing individual modules, the overall repository structure also matters. I found it useful to work with all project components in a monorepo setup. This way you can easily reference backend source code when working on frontend, etc.&lt;/p&gt;

&lt;p&gt;Technically, I have different repositories for each component, I've just created a separate repository with a wrapper for all components. The final structure looks like the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;monorepo
|_.claude
|_docs
|_CLAUDE.md
|_backend
  |_docs
  |_CLAUDE.md
  |_...
|_frontend
  |_docs
  |_CLAUDE.md
  |_...
|_mobile
  |_docs
  |_CLAUDE.md
  |_...
|_infrastructure
  |_docs
  |_CLAUDE.md
  |_...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So, I'm working with all components in a single IDE window. All Claude Code agents/commands/skills are located in .claude directory in the root.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;monorepo/docs&lt;/code&gt; and &lt;code&gt;monorepo/CLAUDE.md&lt;/code&gt; contain documents that are applicable to the whole project. And each component also has a set of documentation specific to it.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Workflows
&lt;/h2&gt;

&lt;p&gt;So, here is the main part of this guide describing the main workflows I use for features development.&lt;/p&gt;

&lt;p&gt;By workflow, I mean the process in which I interact with Claude Code when working on specific tasks. This section focuses on feature development workflows, including code review. Other workflows — such as documentation generation and requirements gathering — are outside the scope of this guide and may be covered in future articles.&lt;/p&gt;

&lt;p&gt;I've created a set of Claude Code commands that initiate these workflows and that are used during the implementation.&lt;/p&gt;

&lt;p&gt;Each workflow I build has the following high-level steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gathering relevant context&lt;/li&gt;
&lt;li&gt;Clarifying uncertainties&lt;/li&gt;
&lt;li&gt;Building an implementation plan&lt;/li&gt;
&lt;li&gt;Reviewing the implementation plan&lt;/li&gt;
&lt;li&gt;Implementing the task based on the verified plan&lt;/li&gt;
&lt;li&gt;Reviewing the implementation&lt;/li&gt;
&lt;li&gt;Committing the result&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let me explain with examples.&lt;/p&gt;

&lt;h3&gt;
  
  
  Choosing between workflows
&lt;/h3&gt;

&lt;p&gt;There's no well-defined criterion for choosing between fast and full workflows. It comes down to intuition: if I'm confident that Claude Code will deliver a good result with the fast workflow, I use it. Otherwise, I use the full workflow. This intuition develops over time as you apply these workflows to different tasks and learn what works for your project.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.1 Fast workflow
&lt;/h3&gt;

&lt;p&gt;Fast workflow is initiated just with one command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/workflows:fast &amp;lt;issueId&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This workflow is used for pretty clear and pretty straightforward tasks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;That may be fully implemented just by examples in the source code base, and does not require a lot of changes/additions&lt;/li&gt;
&lt;li&gt;simple bug fixes&lt;/li&gt;
&lt;li&gt;etc&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I can also provide some additional info to the command, like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/workflows:fast DEV-1234 See component X implementation and implement in the same way&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/workflows:fast DEV-1234, likely the defect occurs due to ...&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The prompt for the command is pretty simple. If some project details are skipped, it's like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;1) Find YouTrack issue id from $ARGUMENTS
2) Read the issue description, all comments, and all attachments
3) Carefully review the existing source code base to understand the problem
4) In case you have questions, try to find the answers in the issue description, in the source code, and in the project documentation
5) Use &lt;span class="sb"&gt;`AskUserTool`&lt;/span&gt; (a built-in Claude Code tool for asking clarification questions) if you have questions. If you have no questions, just skip this step.
6) Prepare the implementation plan and present it to the user
7) In case the user has notes, update the plan and present it again
8) Start implementation after explicit approval only
9) Use code review subagents before providing the result to the review
10) When everything is ready, ask the user to review the update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So, this prompt acctually builds the following process:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkhj0aodc9x9irszlown6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkhj0aodc9x9irszlown6.png" alt="Fast Workflow" width="784" height="1448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Claude Code will read the specified task tracker issue, and, along with project documentation, will use it to understand and solve the problem.&lt;/p&gt;

&lt;p&gt;In this workflow, I'm covering my constraint of having full control over implementation by reviewing the implementation plan prepared by Claude Code. This implementation plan is currently printed just to the Terminal, so I can efficiently review it for minor changes.&lt;/p&gt;

&lt;p&gt;When the implementation is complete, I call &lt;code&gt;/approved&lt;/code&gt; command (a custom slash command I created), which triggers Claude Code to run code review subagents and prepare the commit.&lt;/p&gt;

&lt;p&gt;This type of workflow has a great opportunity to be automated in the future, like the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The issue is created in YouTrack&lt;/li&gt;
&lt;li&gt;Claude Code is tagged&lt;/li&gt;
&lt;li&gt;Claude Code prepares the implementation plan for the update and updates the issue status&lt;/li&gt;
&lt;li&gt;The developer reviews it, and after all the notes are fixed, the developer accepts it&lt;/li&gt;
&lt;li&gt;Claude Code implements the update and creates a merge request&lt;/li&gt;
&lt;li&gt;A temporary environment is launched where this update can be verified before merging into the main branch&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  7.2 Full workflow
&lt;/h3&gt;

&lt;p&gt;And this is the main workflow that I'm using on the project. I'll describe the main parts of it.&lt;/p&gt;

&lt;h4&gt;
  
  
  7.2.1 Feature directory
&lt;/h4&gt;

&lt;p&gt;I create a feature directory for each task I'm working on. All the feature directories are located in the &lt;code&gt;/features&lt;/code&gt; directory of the monorepo. The name of the feature directory is the identifier of the issue in the task tracker.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;monorepo
|_features
  |_DEV-1456
    |_implementation-plan.md
    |_to-do.md
  |_...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each feature directory basically has the following documents.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;implementation-plan.md&lt;/li&gt;
&lt;li&gt;to-do.md&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It can also have additional files - additional documents, images, UML diagrams, generally, everything that Claude Code might use for task implementation.&lt;/p&gt;

&lt;p&gt;After the task is completed, the feature directory stays in git history—Claude Code can reference it for future updates. Some artifacts may also be copied to the source code module itself as documentation.&lt;/p&gt;

&lt;h4&gt;
  
  
  7.2.2 Implementation plan
&lt;/h4&gt;

&lt;p&gt;The implementation document describes the main implementation decisions. It has as few details as required for successful task implementation.&lt;/p&gt;

&lt;p&gt;For bigger tasks, I'm preparing UML diagrams, referencing them in the implementation plan, and adding clarifications needed. In most scenarios, I add clarifications just to UML diagram (using notes) and skip implementation plan creation.&lt;/p&gt;

&lt;p&gt;For smaller tasks, I can skip the implementation plan as well and write some details just in the to-do document.&lt;/p&gt;

&lt;h4&gt;
  
  
  7.2.3 To-do document
&lt;/h4&gt;

&lt;p&gt;This is the main feature directory document containing the implementation plan decomposed into subtasks. Each subtask (D-1, D-2, etc.) contains a checklist of steps for Claude Code to implement.&lt;/p&gt;

&lt;p&gt;Each subtask has its own identifier, which is used further for quick reference.&lt;/p&gt;

&lt;p&gt;Example of simple to-do document.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## DEV-1234. Implement debug mode&lt;/span&gt;

&lt;span class="gu"&gt;### D-1. DebugModeConfiguration entity &amp;amp; service&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; [x] create entity
&lt;span class="p"&gt;-&lt;/span&gt; [x] implement unit tests
&lt;span class="p"&gt;-&lt;/span&gt; [x] create database migration and apply it
&lt;span class="p"&gt;-&lt;/span&gt; [x] repository for the entity
&lt;span class="p"&gt;-&lt;/span&gt; [x] Create DebugModeConfigurationService service
&lt;span class="p"&gt;-&lt;/span&gt; [x] Create unit tests for service
&lt;span class="p"&gt;-&lt;/span&gt; [x] Commit without review

...

&lt;span class="gu"&gt;### D-4. Activation strategy&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; [x] implement activation strategy class
&lt;span class="p"&gt;-&lt;/span&gt; [x] update monolog config to use it
&lt;span class="p"&gt;-&lt;/span&gt; [x] create unit tests
&lt;span class="p"&gt;-&lt;/span&gt; [x] integration test: verify that configuration actually applied to the container
&lt;span class="p"&gt;-&lt;/span&gt; [x] Wait for review
&lt;span class="p"&gt;-&lt;/span&gt; [x] Commit

...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Some notes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This to-do document is created as an addendum to the implementation plan or UML diagram, so it doesn't have detailed information;&lt;/li&gt;
&lt;li&gt;For the unit tests, I'm just briefly describing the scenarios that should be tested&lt;/li&gt;
&lt;li&gt;Subtasks may have nested structure - usually, when a subtask involves the update of several application components (backend, frontend, mobile app, etc); in that case, they have identifiers like D-2.1, D-2.2.&lt;/li&gt;
&lt;li&gt;Depending on the task size and on how typical it is, I can explicitly specify that this subtask can be committed just after it's implemented. Review is skipped for pretty straightforward tasks that were previously successfully implemented without issues several times. (Potential issue can be caught during code review in GitLab UI)&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  How is subtask size chosen?
&lt;/h5&gt;

&lt;p&gt;So, as was mentioned previously, my target is to implement each subtask within a single context window, so I could be guided just by this constraint - decompose to the size that Claude Code is capable of implementing within a single context window.&lt;/p&gt;

&lt;p&gt;But basically, I'm just splitting the task into the set of subtasks as I previously did by applying continuous integration practices. One subtask - one small meaningful commit.&lt;/p&gt;

&lt;h4&gt;
  
  
  7.2.4 Implementation solution &amp;amp; to-do documents review commands
&lt;/h4&gt;

&lt;p&gt;I built two commands that are used for the validation of my inputs before the actual implementation is run:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;implementation solution review&lt;/li&gt;
&lt;li&gt;to-do checklist review&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These commands are run when the implementation plan/to-do document/UML diagram/other inputs are ready.&lt;/p&gt;

&lt;h5&gt;
  
  
  Implementation solution review command
&lt;/h5&gt;

&lt;p&gt;&lt;code&gt;/workflows:full:review-solution DEV-1234&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The goal of this command is to verify if the designed implementation matches patterns used in the project, naming standards, design principles, etc. Also, it verifies if the implementation covers all the requirements.&lt;/p&gt;

&lt;h5&gt;
  
  
  To-do document review
&lt;/h5&gt;

&lt;p&gt;&lt;code&gt;/workflows:full:review-todo DEV-1234&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This command reads the original requirements from the task tracker and checks that the implementation plan and to-do document cover all requirements completely. Also, it verifies that the order of implementation is optimal. This catches missing items or misunderstood requirements early, before any code is written.&lt;/p&gt;

&lt;p&gt;This is an example of successful review output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Verification Results for DEV-1234

✅ Verification Passed

YouTrack Requirements Covered:
- ✓ Deep Link Handling - covered in T-4.3 Deep Linking
- ✓ First Invitation (account creation) - covered in I-4 Team Invitation First-time
  scenario
- ✓ Invalid Token error handling - covered in I-4.1 (ResourceNotFoundException)
- ✓ Token Reuse error - covered in I-4.1 (InvitationCodeAlreadyAcceptedException)
- ✓ Token Expiration - covered in I-4.1 (InvitationCodeExpiresException)

Critical Components Present:
- ✓ Database migrations - I-2 (TeamInvitationCode::project), I-3.1 (SessionToken
  entity)
- ✓ Backend entities &amp;amp; services - AuthenticationService,
  TeamInvitationAcceptanceService
- ✓ Symfony security integration - I-3.2 with authenticator configuration
- ✓ API controllers - AuthenticationController, TeamInvitationAcceptanceController
- ✓ Client App API service - T-4.2 (teamInvitationService)
- ✓ UI screens - InvitationScreen, LandingScreen
- ✓ Deep linking - T-4.3 with preference storage and banner

Task Order:
- ✓ Logical order: package rename → entity/migration → authentication → team
  invitation → frontend
- ✓ Backend API completed before frontend implementation
- ✓ Migrations before code using new schema

Scope:
- ✓ To-do correctly scopes to Use Case 1 only (first-time/account creation)
- ✓ Use Case 2 deferred to DEV-1235 as specified

The to-do list is structurally complete. Claude Code can proceed with
implementation using existing patterns and skills.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is the output of the command that highlights some issues&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;✅ What's Good

Logout (L-1) - Complete:
- Backend: AuthenticationService.deleteSession, UseCases, Controller (DELETE /clientapp/logout) ✓
- Frontend: ConfirmDeletePopup, Settings menu, API service ✓
- E2E tests ✓

Login (L-2) - Structure Present:
- OneTimeCode entity and repository ✓
- OneTimeCodeService (createForEmail, redeemToken) ✓
- OneTimeCodeUseCases ✓
- OneTimeCodeController ✓
- Integration tests ✓
- Frontend login screen with forms ✓

❌ Critical Missing Items

1. Missing Event System Components for Email Sending

1. The diagram shows email sending requires:
   - OneTimeCodeCreated event class
   - OneTimeCodeEventListener (subscribes to event, triggers sender)
   - OneTimeCodeSender (infrastructure - actually sends the email)

The to-do mentions "publishes event" in tests but doesn't explicitly include creating the event listener and sender. Without these, no email will be sent.

Location: After OneTimeCodeService in L-2.1

Suggested additions:
- OneTimeCodeCreated event
- OneTimeCodeEventListener.onCreated()
- OneTimeCodeSender.sendOneTimeCode() (infrastructure)
2. Two Separate API Endpoints Needed

2. Diagram shows OneTimeCodeController has TWO endpoints:
   - POST /clientapp/authentication/onetimecode (request code)
   - POST /clientapp/authentication/withonetimcode (redeem code)

The to-do just mentions "OneTimeCodeController" without distinguishing. This might be fine if Claude Code infers both methods, but it's worth noting.

⚠️ Minor Observations

- Request DTOs (RequestOneTimeCodeRequest, RedeemCodeRequest) not mentioned - Claude Code can infer these
- expiresAt not in entity diagram - appears to be calculated from createdAt + 1 hour

  ---
Recommendation: The event system components (listener + sender) are critical for the "email with login code is sent" acceptance criterion. Do you want me to add these explicitly to the to-do.md?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  7.2.5 Task implementation command
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;/workflows:full:implement DEV-1234 D-1.1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Where DEV-1234 is the identifier of the issue in the task tracker, and D-1.1 is the identifier of the subtask in the to-do document.&lt;/p&gt;

&lt;p&gt;The command has the following description: ""&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;### 1. Read Youtrack issue&lt;/span&gt;

Get Youtrack issue number from $ARGUMENTS, the format is DEV-xxxx. Read Youtrack issue description, all issue comments and attachments.

&lt;span class="gu"&gt;### 2. Read feature documentation&lt;/span&gt;
&lt;span class="p"&gt;
1.&lt;/span&gt; Define the subtask identifier from $ARGUMENTS
&lt;span class="p"&gt;2.&lt;/span&gt; Read implementation-plan.md
&lt;span class="p"&gt;3.&lt;/span&gt; Read to-do.md
&lt;span class="p"&gt;4.&lt;/span&gt; Read all documents starting with subtask identifier: pattern &lt;span class="sb"&gt;`&amp;lt;subtaskId&amp;gt;-*.md`&lt;/span&gt;
&lt;span class="p"&gt;5.&lt;/span&gt; If needed, read implementation overview of previously implemented subtasks, the format is &lt;span class="sb"&gt;`&amp;lt;subtaskId&amp;gt;-implementation-overview.md`&lt;/span&gt;

&lt;span class="gu"&gt;### 3. Study related source code&lt;/span&gt;

Deeply study existing source code to understand the implementation.

&lt;span class="gu"&gt;### 4. Ask clarification questions&lt;/span&gt;

Before asking questions, try to find the answers in the projects documentation, in the requirements and in the existing source code.

If you cannot find the answer, use &lt;span class="sb"&gt;`AskUserTool`&lt;/span&gt; to ask your questions.

&lt;span class="gu"&gt;### 5. Prepare the implementation plan&lt;/span&gt;

Based on the project documentation, task documentation, source code you studied, prepare the implementation plan and save it to &lt;span class="sb"&gt;`&amp;lt;subtaskId&amp;gt;-implementation-plan.md`&lt;/span&gt; file (separate from your task-level implementation-plan.md).

In the implementation plan:
&lt;span class="p"&gt;*&lt;/span&gt; save all the questions you had and user's answers
&lt;span class="p"&gt;*&lt;/span&gt; describe all classes that will be created
&lt;span class="p"&gt;*&lt;/span&gt; all methods that will be updated
&lt;span class="p"&gt;*&lt;/span&gt; main technical decisions
&lt;span class="p"&gt;*&lt;/span&gt; do not duplicate the documentation prepared in CLAUDE.md and in doc/ folders, reference these documents instead
&lt;span class="p"&gt;*&lt;/span&gt; mention skills you are going to use to implement specific part of your plan (write &lt;span class="sb"&gt;`Using skill-name, I'll implement...`&lt;/span&gt;)

When you create the implementation plan document, ask the user to review it and STOP. Do not make any changes before the user's approval.
When the user has notes, read the implementation document and read all notes starting with &lt;span class="sb"&gt;`COMMENT: `&lt;/span&gt; string, update the implementation plan and ask the user to review the updated plan. STOP, do not make any changes before explicit approval.

&lt;span class="gu"&gt;### 6. Implement the changes&lt;/span&gt;

When the plan is explicitly approved by user, implement all the changes. Only in case the subtask's to-do list states &lt;span class="sb"&gt;`Commit without review`&lt;/span&gt; you are allowed to create git commit. In all other scenarios - if it's not specified explicitly or specified &lt;span class="sb"&gt;`wait for review`&lt;/span&gt; - stop and ask the user to review your uncommitted changes.&lt;span class="sb"&gt;


&lt;/span&gt;&lt;span class="gu"&gt;### 7. Commit your changes&lt;/span&gt;

When you received approval - commit your changes. Use component specific skill:
&lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="sb"&gt;`committing-backend-changes`&lt;/span&gt; - for backend
&lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="sb"&gt;`committing-frontend-changes`&lt;/span&gt; - for frontend
....&lt;span class="sb"&gt;


&lt;/span&gt;&lt;span class="gu"&gt;### 8. Prepare implementation overview&lt;/span&gt;

When the changes are committed, create implementation overview. Describe the functionality implemented with the references to created / modified files.
Do not repeat the implementation detail - just reference the files with short description of what was done.
Reference related project documentation that was used during the implementation.
File name: &lt;span class="sb"&gt;`&amp;lt;subtaskId&amp;gt;-implementation-overview.md`&lt;/span&gt;

&lt;span class="gu"&gt;### 9. Update to-do document and commit changes&lt;/span&gt;

Update to-do document - check all completed to-do items. Commit all the changes in the monorepo you did.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This prompt implements the following process:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9sewdast6y5v1vbnpast.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9sewdast6y5v1vbnpast.png" alt="Full Workflow" width="800" height="1833"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, Claude Code gathers the context using the following info:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;task tracker issue description, comments, and attachments&lt;/li&gt;
&lt;li&gt;task documentation&lt;/li&gt;
&lt;li&gt;implementation details of the previous subtasks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To control the implementation, I'm reviewing the implementation plan prepared by Claude Code. It's saved to a separate markdown file (D-1.1-implementation.md for this example), so it's easier to review and edit it in comparison with doing this just in the Terminal.&lt;/p&gt;

&lt;p&gt;In case something is not correct, I'm adding comments just to this markdown file, and run &lt;code&gt;/workflows:full:answered&lt;/code&gt; command.&lt;/p&gt;

&lt;p&gt;Once all the details are approved, I run Claude Code in "accept all changes" mode — accepting all tool calls without manual confirmation for each one.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The user can execute Claude Code in the following modes (they are switched by pressing Shift+Tab in the Terminal):&lt;/p&gt;

&lt;p&gt;&lt;code&gt;normal&lt;/code&gt;  - Claude Code ask the permission to make any change in the files&lt;/p&gt;

&lt;p&gt;&lt;code&gt;auto-accept&lt;/code&gt; - Claude Code won't ask permission for most of the changes&lt;/p&gt;

&lt;p&gt;&lt;code&gt;plan&lt;/code&gt; - Claude Code doesn't make any changes, just prints the implementation plan to the terminal; it can also be accessed with the standard &lt;code&gt;/plan&lt;/code&gt; command. To make any changes, the user needs to enter &lt;code&gt;normal&lt;/code&gt; or &lt;code&gt;auto-accept&lt;/code&gt; mode (Claude Code offers this when the plan is complete).&lt;/p&gt;

&lt;p&gt;Claude Code can also be run with the --dangerously-skip-permissions flag (&lt;code&gt;claude --dangerously-skip-permissions&lt;/code&gt;). In that mode, it makes all the changes without any asking.&lt;/p&gt;

&lt;p&gt;By &lt;code&gt;accept all changes mode&lt;/code&gt; above, I mean &lt;code&gt;auto-accept&lt;/code&gt; mode. Usually, I run Claude Code in this mode only and rarely using &lt;code&gt;plan&lt;/code&gt; mode - Claude Code follows my prompt to ask the questions, do not start implementation until an explicit command is received. But this is my personal preference.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What's important here is that the development of each task starts with an empty context. Claude Code can recreate all context for every next task based on the documents in the feature directory. In that way, all the tasks can be accomplished within a single context window. (Again, this is not a hard rule; it's just my own constraint.)&lt;/p&gt;

&lt;p&gt;The implementation overview serves as a bridge between subtasks. Since each subtask starts with a fresh context (&lt;code&gt;/clear&lt;/code&gt;), Claude Code reads the implementation overviews from previous subtasks to understand what was already built. This allows it to continue working without needing the full conversation history from earlier sessions.&lt;/p&gt;

&lt;p&gt;Here is a demonstration of how Claude Code gathers the context in this workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
/workflows:full:implement is running… DEV-1234 L-1.2

⏺ Read(features/DEV-1234/to-do.md)
⎿  Read 103 lines

⏺ Search(pattern: "features/DEV-1234/*.md")
⎿  Found 6 files (ctrl+o to expand)

⏺ Let me read all the related documentation and the CLAUDE.md files for backend and frontend.

⏺ Read(features/DEV-1234/L-1.1-implementation-plan.md)
⎿  Read 115 lines

⏺ Read(features/DEV-1234/L-1.1-implementation-overview.md)
⎿  Read 78 lines

⏺ Read(features/DEV-1234/L-0-implementation-plan.md)
⎿  Read 111 lines

⏺ Read(frontend/CLAUDE.md)
⎿  Read 51 lines

⏺ Read(backend/CLAUDE.md)
⎿  Read 168 lines

⏺ youtrack - get_issue (MCP)(issueId: "DEV-1234")
⎿  {
"customFields": [
{
… +177 lines (ctrl+o to expand)

⏺ youtrack - get_issue (MCP)(issueId: "DEV-1233")
⎿  {
"customFields": [
{
… +260 lines (ctrl+o to expand)

⏺ Let me read DEV-1235 (Settings Screen) for more context on the menu requirements, and explore the existing frontend code structure.

⏺ youtrack - get_issue (MCP)(issueId: "DEV-1235")
⎿  {
....
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  7.2.6 Examples
&lt;/h4&gt;

&lt;p&gt;So, basically, all my workflows are built on top of these &lt;code&gt;/workflows:fast&lt;/code&gt;, &lt;code&gt;/workflows:full:*&lt;/code&gt; commands. The inputs to the workflows might be different based on the type and size of the task.&lt;/p&gt;

&lt;p&gt;In general, I'm just choosing the form of task presentation that is most convenient to me to think about and design the implementation. This is not related to the Claude Code specific constraints that I found (so you can experiment with the inputs you usually use for your tasks).&lt;/p&gt;

&lt;p&gt;Here are several examples:&lt;/p&gt;

&lt;h5&gt;
  
  
  Small-sized and medium-sized tasks that are pretty typical for the project
&lt;/h5&gt;

&lt;p&gt;An implementation plan in that scenario is usually not prepared, and some implementation notes are added just to the to-do.md file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;### P-1. Preferences configuration&lt;/span&gt;

&lt;span class="gu"&gt;#### P-1.1 Frontend. Create feature toggle&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; [x] Create ToggledFeature::PREFERENCES_PAGE (for isDefaultTeam)
&lt;span class="p"&gt;-&lt;/span&gt; [x] Commit

&lt;span class="gu"&gt;#### P-1.2 Backend. Create a preferences API method&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; [x] Create enum DisplayTasksFilter.php with values: TODAY, PAST_DUE, NO_DUE_DATE, ALL
&lt;span class="p"&gt;-&lt;/span&gt; [x] Create src&lt;span class="se"&gt;\P&lt;/span&gt;references&lt;span class="se"&gt;\P&lt;/span&gt;references&lt;span class="se"&gt;\D&lt;/span&gt;omain&lt;span class="se"&gt;\P&lt;/span&gt;references.php (+ repository)

&lt;span class="p"&gt;~~~&lt;/span&gt;&lt;span class="nl"&gt;
&lt;/span&gt;- $showCompletedTasks: true;
- $displayListOfTasksInStatus: "DUE_TODAY"
&lt;span class="p"&gt;~~~&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; [x] Create migration and execute
&lt;span class="p"&gt;-&lt;/span&gt; [x] Create API POST /preferences - Api, Application (for isDailyMailEnabled use DailyMailService):
&lt;span class="p"&gt;  -&lt;/span&gt; create PreferencesService
&lt;span class="p"&gt;  -&lt;/span&gt; use DailyMailService for isDailyMailEnabled
&lt;span class="p"&gt;  -&lt;/span&gt; create PreferencesPresenter
&lt;span class="p"&gt;  -&lt;/span&gt; create PreferencesUseCase

&lt;span class="p"&gt;~~~&lt;/span&gt;&lt;span class="nl"&gt;json
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"isDailyMailEnabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"showCompletedTasks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"displayListOfTasksInStatus"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;DisplayTasksFilter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;~~~&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; [x] Create PreferencesApiTest::testSavePreferences - 1 test
&lt;span class="p"&gt;-&lt;/span&gt; [x] Update /me

&lt;span class="p"&gt;~~~&lt;/span&gt;&lt;span class="nl"&gt;json
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"_preferences"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"showCompletedTasks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;default&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"displayListOfTasksInStatus"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DUE_TODAY"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;default&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DUE_TODAY"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;~~~&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; [x] Update integration test for GET /me method to test _preferences (1 test for default values and 1 test for customized values)
&lt;span class="p"&gt;-&lt;/span&gt; [x] Wait for review
&lt;span class="p"&gt;-&lt;/span&gt; [x] Commit

&lt;span class="gu"&gt;#### P-1.3 Frontend. Create preferences page&lt;/span&gt;
...

&lt;span class="gu"&gt;#### P-1.4 Mobile App. Create preferences screen&lt;/span&gt;
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  Medium-large sized task
&lt;/h5&gt;

&lt;p&gt;The implementation plan is prepared by me, for some parts of it, I may have a conversation with Claude Code for brainstorming different ideas and implementation options. Then it prepares a summary that I just paste into the implementation plan.&lt;/p&gt;

&lt;p&gt;The structure usually is the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## DEV-1234. Task Name&lt;/span&gt;

Package: src/Contacts/BulkImport

&lt;span class="gu"&gt;### API method for downloading CSV template&lt;/span&gt;

GET /contacts/bulk/template.csv will return CSV file template with all possible columns. Generate the document on the fly just in the controller.

&lt;span class="gu"&gt;### API method for CSV file uploading&lt;/span&gt;

POST /contacts/bulk/import

Example of request:
&lt;span class="p"&gt;~~~&lt;/span&gt;&lt;span class="nl"&gt;json
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;~~~&lt;/span&gt;

Classes:

&lt;span class="gs"&gt;**Application/ContactsCsvParser**&lt;/span&gt;

Responsibilities:
&lt;span class="p"&gt;*&lt;/span&gt; parses input CSV into PHP array of array{ firstName: string, lastName: string, ... }
&lt;span class="p"&gt;*&lt;/span&gt; validates max rows requirement (with validation exception in case of issue)
&lt;span class="p"&gt;*&lt;/span&gt; validates that firstName and lastName are present and have values
&lt;span class="p"&gt;*&lt;/span&gt; validates extra columns

Unit tests:
&lt;span class="p"&gt;*&lt;/span&gt; valid CSV parsing
&lt;span class="p"&gt;*&lt;/span&gt; missing first name column - validation exception
&lt;span class="p"&gt;*&lt;/span&gt; CSV file with extra column - validation exception
&lt;span class="p"&gt;*&lt;/span&gt; ...

&lt;span class="gs"&gt;**Application/BulkContactsImporter**&lt;/span&gt;

Responsibilities:
....
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;I'm currently preparing the list of unit test scenarios on my own. Previously, it was prepared by Claude Code, and sometimes the tests were too detailed. It's definitely possible to tune it to write a good set of unit and integration tests. But I've decided that providing exact scenarios for unit and integration tests is also a good form of documentation for Claude Code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The issue description in the task tracker already has detailed information regarding requirements about required columns in the CSV file, so the implementation plan does not duplicate these requirements, but references them. Claude Code understands such references well, though referencing requirements by their ID should work even better for complex requirements.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Large-sized tasks
&lt;/h5&gt;

&lt;p&gt;For complex tasks involving significant architectural changes, I prepare UML class diagrams for backend implementation. The implementation plan serves as an appendix to the UML documents, describing solutions that aren't obvious from the diagrams alone. Usually, UML is enough, and the implementation plan is skipped - I can add all clarifications needed with notes to a class diagram.&lt;/p&gt;

&lt;p&gt;The UML file is provided in two forms: as an image (PNG) and in XML format. Claude Code can analyze both — the image for visual understanding and the XML for extracting exact method signatures and argument names.&lt;/p&gt;

&lt;p&gt;I use Visual Paradigm for UML—its CLI commands allow automated export to PNG and XML, which integrates well with Claude Code. In the implementation plan, I reference diagrams using Visual Paradigm's identifier. I've created a skill (&lt;code&gt;diagram-exporting-diagram&lt;/code&gt;) that runs Visual Paradigm CLI commands to generate PNG and XML files from these references.&lt;/p&gt;

&lt;p&gt;I also use Claude Code to review UML diagrams during design — checking for consistency with existing patterns and completeness of the design.&lt;/p&gt;

&lt;p&gt;This UML-based approach is the most effective workflow I've found for complex tasks—it deserves a dedicated article, which I plan to write in the future. The to-do document in this case becomes quite simple — just referencing names of classes presented on the diagram and lists test scenarios:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## DEV-1234. Sharing Client Portal Access&lt;/span&gt;

Diagram: ClientApp, package Access

&lt;span class="gu"&gt;### T-1. Backend API&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; [ ] ClientAppAccess, repository, migration
&lt;span class="p"&gt;-&lt;/span&gt; [ ] ClientAppAccessService. Unit Tests:
&lt;span class="p"&gt;  -&lt;/span&gt; [ ] creates ClientAppAccess when not exist
&lt;span class="p"&gt;  -&lt;/span&gt; [ ] publishes event
&lt;span class="p"&gt;  -&lt;/span&gt; [ ] removes ClientAppAccess when contact is not provided
&lt;span class="p"&gt;  -&lt;/span&gt; [ ] publishes event
&lt;span class="p"&gt;-&lt;/span&gt; [ ] ClientAppAccessUseCases, use ProjectPermission.READ_CLIENT_PORTAL_CONFIGURATION
&lt;span class="p"&gt;-&lt;/span&gt; [ ] ClientAppAccessPresenter
&lt;span class="p"&gt;-&lt;/span&gt; [ ] ClientAppAccessController + integration tests
&lt;span class="p"&gt;  -&lt;/span&gt; [ ] test that data is created
&lt;span class="p"&gt;  -&lt;/span&gt; [ ] test that existing records are removed
&lt;span class="p"&gt;-&lt;/span&gt; [ ] Implement ClientPortalAccessEventListener with 1 unit test and 1 integration test for this logic
&lt;span class="p"&gt;-&lt;/span&gt; [ ] wait for review
&lt;span class="p"&gt;-&lt;/span&gt; [ ] commit

...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude Code reads the diagram and fills in the implementation details — class properties, method signatures, relationships — based on what it sees in the UML.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.3 Code review
&lt;/h3&gt;

&lt;p&gt;Code review is a cross-cutting concern that applies to all workflows described above. It's implemented via dedicated subagents (&lt;code&gt;backend-code-reviewer&lt;/code&gt;, &lt;code&gt;frontend-code-reviewer&lt;/code&gt;, &lt;code&gt;mobile-code-reviewer&lt;/code&gt; — see Building Blocks section).&lt;/p&gt;

&lt;p&gt;The workflows are set up in a way that code review subagents are called automatically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Before providing results for my review&lt;/li&gt;
&lt;li&gt;Before committing the result (for "commit without review" subtasks)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Since subagents run in their own context window, the reviewer is not biased by the decisions made during implementation — it evaluates the code independently.&lt;/p&gt;

&lt;p&gt;Additionally, code review with Claude Code is integrated into the commit-stage CI pipeline, providing an extra layer of verification before changes are merged.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.4 Working on subtasks in parallel
&lt;/h3&gt;

&lt;p&gt;To speed up the implementation of the task, I run several subtasks in parallel. In general, Claude Code documentation recommends using git worktrees:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://code.claude.com/docs/en/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees" rel="noopener noreferrer"&gt;https://code.claude.com/docs/en/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the best way to do this. But on my project, currently, this approach is not used because of the backend app integration tests design — I currently cannot run multiple instances of integration test environments on my local machine.&lt;/p&gt;

&lt;p&gt;Instead, I run multiple Claude Code instances in separate terminal tabs within my IDE. Each tab is named with the YouTrack issue ID or subtask ID for easy tracking. Usually, 2-3 instances run in parallel during the development phase.&lt;/p&gt;

&lt;p&gt;Since my monorepo is a wrapper directory containing separate git repos for each component (backend, frontend, infrastructure), parallel instances working on different components don't conflict — each commits to its own repository.&lt;/p&gt;

&lt;p&gt;For coordination:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I order subtasks carefully so parallel ones don't have dependencies&lt;/li&gt;
&lt;li&gt;When a subtask depends on another that's still in progress, I can proceed with the assumption that the API will be implemented as described in the requirements&lt;/li&gt;
&lt;li&gt;If all subsequent subtasks are blocked by the current one, I work on documentation for the next task instead&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While multiple Claude Code instances could technically work in parallel and commit to the same repo (working on different files), I don't practice this to avoid potential conflicts.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.5 Troubleshooting Common Failures
&lt;/h3&gt;

&lt;p&gt;Here's a short overview of how I handle common failures.&lt;/p&gt;

&lt;h4&gt;
  
  
  Repeated incorrect code
&lt;/h4&gt;

&lt;p&gt;When Claude Code produces incorrect implementations repeatedly, my response depends on the type of failure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Immediate fixes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I add &lt;code&gt;// REVIEW:&lt;/code&gt; comments directly in the source code to point out specific issues&lt;/li&gt;
&lt;li&gt;I type correction notes in the terminal for quick adjustments&lt;/li&gt;
&lt;li&gt;For complete misalignment with my design, I roll back changes, &lt;code&gt;/clear&lt;/code&gt;, and revise the task description or project documentation before retrying&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Preventing recurrence:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I use &lt;code&gt;#&lt;/code&gt; at the start of my input to quickly add a rule to CLAUDE.md (Claude Code appends the message to the nearest CLAUDE.md file), or I add a rule directly — this is my most common fix for recurring issues.&lt;/p&gt;

&lt;p&gt;For repeated failures in specific operations, I create a dedicated skill. Example: Claude kept forgetting to apply migrations to the test database and verify that all migrations were applied. A &lt;code&gt;backend-implementing-migration&lt;/code&gt; skill with step-by-step verification fixed this permanently.&lt;/p&gt;

&lt;h4&gt;
  
  
  Context pollution
&lt;/h4&gt;

&lt;p&gt;When Claude starts exploring wrong modules or mixing up context:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recognition:&lt;/strong&gt; I monitor what Claude includes in context — it describes its process. When I notice it exploring wrong areas (e.g., modules with similar naming), I &lt;code&gt;/clear&lt;/code&gt; it immediately rather than trying to correct the course.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prevention by design:&lt;/strong&gt; The workflow structure prevents most context pollution architecturally:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Each subtask starts with &lt;code&gt;/clear&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Sessions end with commit + implementation overview&lt;/li&gt;
&lt;li&gt;Implementation overviews preserve progress across sessions — when I &lt;code&gt;/clear&lt;/code&gt; and start fresh, Claude reads the overview instead of needing full conversation history&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Plan gaps discovered during implementation
&lt;/h4&gt;

&lt;p&gt;Sometimes implementation plan has gaps that only become apparent during coding.&lt;/p&gt;

&lt;p&gt;When I spot issues, I add &lt;code&gt;// REVIEW:&lt;/code&gt; comments directly in the source code or type them to the terminal or update the UML diagram to address the problem. Claude Code reads these comments and changes, then makes the necessary fixes and updates the implementation plan and overview retrospectively. &lt;/p&gt;

&lt;h4&gt;
  
  
  API hallucinations
&lt;/h4&gt;

&lt;p&gt;Claude may invent non-existent methods or use incorrect API signatures — both for external libraries and my own codebase.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What catches them:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Static code analysis (type checking)&lt;/li&gt;
&lt;li&gt;Unit and integration tests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These run before code review, catching most issues automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When they slip through:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I look up the actual API reference manually&lt;/li&gt;
&lt;li&gt;I provide Claude with links to current documentation&lt;/li&gt;
&lt;li&gt;I ask Claude to read my custom components and study their interfaces before using them&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  8. Full Structure Example
&lt;/h2&gt;

&lt;p&gt;Here is just a summary of the Claude Code configuration files built based on the principles and information in the previous sections.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.1. My Current Setup
&lt;/h3&gt;

&lt;p&gt;The current section provides the full structure of my project setup. This structure implements everything described in previous sections.&lt;/p&gt;

&lt;p&gt;The example includes only the configuration that is relevant to the development workflows I described.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;monorepo/
|_.claude/
|   |_agents/
|   |   |_backend/
|   |   |   |_code-reviewer.md
|   |   |_frontend/
|   |   |   |_code-reviewer.md
|   |   |_mobile/
|   |       |_code-reviewer.md
|   |_commands/
|   |   |_workflows/
|   |       |_full/
|   |       |   |_implement.md
|   |       |   |_approved.md
|   |       |   |_review.md
|   |       |_fast.md
|   |_skills/
|       |_backend-applying-authorization/
|       |_backend-implementing-console-command/
|       |_backend-implementing-command-integration-test/
|       |_backend-implementing-controller/
|       |_backend-implementing-domain-entity/
|       |_backend-implementing-domain-service/
|       |_backend-implementing-file-type/
|       |_backend-implementing-migration/
|       |_backend-implementing-presenter/
|       |_backend-implementing-repository/
|       |_backend-implementing-request-mapper/
|       |_backend-implementing-use-case/
|       |_creating-feature-directory/
|       |_diagram-exporting-diagram/
|       |_diagram-querying-xml/
|       |_frontend-implementing-breadcrumbs/
|       |_frontend-implementing-api-service/
|       |_frontend-implementing-feature-toggle/
|       |_frontend-implementing-form/
|       |_frontend-implementing-form-input/
|       |_frontend-implementing-platform-layout/
|       |_frontend-implementing-settings-module/
|       |_frontend-using-data-loader/
|       |_implementing-skill/
|_backend/
|   |_docs/
|   |   |_codestyle.md
|   |   |_coding-standards.md
|   |   |_domain-entity.md
|   |   |_domain-services.md
|   |   |_git-commit-format.md
|   |   |_integration-tests.md
|   |   |_unit-tests.md
|   |   |_monitoring.md
|   |   |_presenter.md
|   |   |_repositories.md
|   |   |_testing-strategy.md
|   |   |_use-cases.md
|   |   |_authorization.md
|   |   |_data-mappers.md
|   |   |_module-structure.md
|   |   |_event-bus.md
|   |_CLAUDE.md
|_frontend/
|   |_docs/
|   |   |_...
|   |_CLAUDE.md
|_features/
|   |_DEV-1234/
|   |   |_implementation-plan.md
|   |   |_to-do.md
|   |   |_diagram.png
|   |   |_diagram.xml
|   |_DEV-1235/
|       |_...
|_CLAUDE.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  8.2. Better options for Claude configuration organization
&lt;/h3&gt;

&lt;p&gt;So, as I mentioned previously, for storing the Claude Code configuration, I created a separate "wrapper" project that contains .claude/ directory files and CLAUDE.md file. You might want to go further, especially at the organization level. &lt;/p&gt;

&lt;p&gt;Plugins are a unified packaging mechanism that bundles multiple components together. The single plugin structure looks as the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; plugin-name/
  ├── .claude-plugin/
  │   ├── plugin.json      # Manifest with metadata
  │   └── hooks.json       # Optional hooks config
  ├── .claude/
  │   ├── commands/        # Slash commands
  │   ├── agents/          # Subagents
  │   ├── skills/          # Agent skills
  │   └── .mcp.json        # MCP servers
  └── marketplace.json     # For distribution
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can use plugins within your organization to apply standardized processes across your teams. &lt;/p&gt;

&lt;p&gt;For a single project, this also makes sense. Currently, I have a pretty well-structured process of feature development. But I also have a set of occasional agents/skills/commands for different tasks — preparing requirements, generating an overview for the client, etc. Related tools can be structured into plugins. &lt;/p&gt;

&lt;p&gt;See the documentation here &lt;a href="https://code.claude.com/docs/en/plugins" rel="noopener noreferrer"&gt;https://code.claude.com/docs/en/plugins&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Getting Started
&lt;/h2&gt;

&lt;p&gt;The previous sections described the workflows and structure I use. This section shows how to build toward that setup — whether you're working solo or introducing it to a team.&lt;/p&gt;

&lt;h3&gt;
  
  
  9.1 For Individual Developers
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Take time to build intuition
&lt;/h4&gt;

&lt;p&gt;Don't expect immediate productivity gains. The first weeks are an investment in learning how Claude Code behaves with your specific codebase, understanding its strengths and limitations, and developing a sense for which tasks it handles well autonomously versus which need close supervision.&lt;/p&gt;

&lt;p&gt;At the same time, I believe it can be introduced safely without decreasing the current performance just from the first days.&lt;/p&gt;

&lt;h4&gt;
  
  
  Start with the foundation
&lt;/h4&gt;

&lt;p&gt;Before diving into complex workflows, set up the basic structure described in Section 8:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create your CLAUDE.md files with project-specific context&lt;/li&gt;
&lt;li&gt;Configure basic code review subagents&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Identify patterns and create skills upfront
&lt;/h4&gt;

&lt;p&gt;Before starting real tasks, analyze your codebase for recurring patterns. It's more effective to create skills for your most common patterns upfront:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Review your typical feature implementation: what components do you usually create?&lt;/li&gt;
&lt;li&gt;Identify the common operations: adding entities, creating API endpoints, implementing forms, etc.&lt;/li&gt;
&lt;li&gt;Create a skill for each pattern with examples from your existing code&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Begin with simple tasks
&lt;/h4&gt;

&lt;p&gt;Once your skills are in place, start with straightforward, well-defined tasks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simple bug fixes with clear reproduction steps&lt;/li&gt;
&lt;li&gt;Adding a new field to an existing entity&lt;/li&gt;
&lt;li&gt;Implementing a feature similar to existing ones&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Run one task at a time. Watch how Claude Code approaches the problem, what context it gathers, where it succeeds, and where it struggles. In case of failure, try to understand why it happened, tune Claude Code configuration (create a doc, update CLAUDE.md, etc), and start the process from the beginning.&lt;/p&gt;

&lt;h4&gt;
  
  
  Run tasks in parallel only when you're confident in your current workflows
&lt;/h4&gt;

&lt;p&gt;Start tasks in parallel only if you are confident enough that your workflows are stable.&lt;/p&gt;

&lt;h4&gt;
  
  
  Iterate continuously
&lt;/h4&gt;

&lt;p&gt;Your setup will never be "done." As you work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add skills when you notice repeated patterns&lt;/li&gt;
&lt;li&gt;Update documentation when Claude Code makes incorrect assumptions&lt;/li&gt;
&lt;li&gt;Refine workflows based on what actually works for your project&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is continuous improvement, not perfection from day one.&lt;/p&gt;

&lt;h3&gt;
  
  
  9.2 For Teams
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Choose a Champion
&lt;/h4&gt;

&lt;p&gt;Designate one person to lead the introduction. This champion should:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Have time to experiment and iterate on the setup&lt;/li&gt;
&lt;li&gt;Be able to document patterns and create initial skills&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The champion builds the foundation that the rest of the team will use.&lt;/p&gt;

&lt;h4&gt;
  
  
  Centralize the configuration
&lt;/h4&gt;

&lt;p&gt;Teams benefit significantly from a centralized approach:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shared CLAUDE.md files ensure consistent context across all team members&lt;/li&gt;
&lt;li&gt;Common skills library prevents duplicate effort&lt;/li&gt;
&lt;li&gt;Standardized workflows make code reviews predictable&lt;/li&gt;
&lt;li&gt;Unified code review subagents enforce team standards&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Spread across team members
&lt;/h4&gt;

&lt;p&gt;Once the foundation is solid:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start with developers who are enthusiastic about the tooling&lt;/li&gt;
&lt;li&gt;Pair them with the champion for initial onboarding&lt;/li&gt;
&lt;li&gt;Gather feedback and refine the setup&lt;/li&gt;
&lt;li&gt;Gradually expand to the rest of the team&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Don't force adoption.&lt;/p&gt;

&lt;h4&gt;
  
  
  Spread across the organization
&lt;/h4&gt;

&lt;p&gt;For multi-team organizations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Share successful patterns between teams via plugins&lt;/li&gt;
&lt;li&gt;Create organization-wide skills for common infrastructure and patterns (auth, logging, etc.)&lt;/li&gt;
&lt;li&gt;Establish cross-team standards for Claude Code configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  9.3 Bonus: A Skill for Creating Skills
&lt;/h3&gt;

&lt;p&gt;When building your initial skills library, having a meta-skill that creates other skills can speed up the process significantly. Here's the actual skill I use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;implementing-skill&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Creates concise Claude Code skills from source documents, existing source code, code examples, or prompts. Extracts only project-specific patterns. Target 50-100 lines.&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="gh"&gt;# Implementing Concise Claude Code Skills&lt;/span&gt;

Creates focused skills containing only project-specific patterns, conventions, and gotchas.

&lt;span class="gu"&gt;## When to Use&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; User wants to create skill from documentation, code examples, source code or description
&lt;span class="p"&gt;-&lt;/span&gt; Codifying project-specific patterns into reusable skill

&lt;span class="gu"&gt;## Core Philosophy&lt;/span&gt;

&lt;span class="gs"&gt;**Assume Claude is an expert programmer.**&lt;/span&gt; Only include what's unique to this project:

✅ &lt;span class="gs"&gt;**Include:**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Project-specific naming/structure conventions
&lt;span class="p"&gt;-&lt;/span&gt; Unique file locations and organization
&lt;span class="p"&gt;-&lt;/span&gt; Critical gotchas (e.g., &lt;span class="sb"&gt;`@psalm-suppress TooManyArguments`&lt;/span&gt;)
&lt;span class="p"&gt;-&lt;/span&gt; Project-specific validation commands
&lt;span class="p"&gt;-&lt;/span&gt; Non-obvious patterns from codebase

❌ &lt;span class="gs"&gt;**Exclude:**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Standard language/framework knowledge Claude already knows
&lt;span class="p"&gt;-&lt;/span&gt; Generic programming patterns
&lt;span class="p"&gt;-&lt;/span&gt; Verbose explanations of common concepts
&lt;span class="p"&gt;-&lt;/span&gt; Information fully covered in referenced example files

&lt;span class="gs"&gt;**Target: 50-100 lines**&lt;/span&gt; (150 max)

&lt;span class="gu"&gt;## Instructions&lt;/span&gt;

&lt;span class="gu"&gt;### 1. Analyze All Available Context&lt;/span&gt;

Extract patterns from whatever user provides:

&lt;span class="gs"&gt;**Source types:**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Documentation files (e.g., &lt;span class="sb"&gt;`backend/doc/repository-creation.md`&lt;/span&gt;)
&lt;span class="p"&gt;-&lt;/span&gt; Code examples (e.g., "based on TeamDomainRepository.php")
&lt;span class="p"&gt;-&lt;/span&gt; User prompt describing workflow
&lt;span class="p"&gt;-&lt;/span&gt; UML diagrams or technical specs
&lt;span class="p"&gt;-&lt;/span&gt; Mix of above

&lt;span class="gs"&gt;**Read and identify:**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; What's project-specific vs generic?
&lt;span class="p"&gt;-&lt;/span&gt; What patterns repeat across examples?
&lt;span class="p"&gt;-&lt;/span&gt; What gotchas or special annotations appear?
&lt;span class="p"&gt;-&lt;/span&gt; What validation/workflow steps are unique?

&lt;span class="gu"&gt;### 2. Check for Conflicts &amp;amp; Better Solutions&lt;/span&gt;

Before creating skill, verify:

&lt;span class="gs"&gt;**Check existing skills:**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Glob &lt;span class="sb"&gt;`.claude/skills/*/SKILL.md`&lt;/span&gt; and &lt;span class="sb"&gt;`*/config.json`&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Name/description overlaps? → Propose extending/merging
&lt;span class="p"&gt;-&lt;/span&gt; Keyword conflicts? → Suggest different keywords
&lt;span class="p"&gt;-&lt;/span&gt; Similar trigger scenarios? → Consolidate or differentiate

&lt;span class="gs"&gt;**Is skill the right solution?**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Simple one-time pattern? → Add to &lt;span class="sb"&gt;`CLAUDE.md`&lt;/span&gt; instead
&lt;span class="p"&gt;-&lt;/span&gt; Reactive automation? → Use hook (&lt;span class="sb"&gt;`.claude/hooks/`&lt;/span&gt;)
&lt;span class="p"&gt;-&lt;/span&gt; User-invoked workflow? → Create slash command (&lt;span class="sb"&gt;`.claude/commands/`&lt;/span&gt;)
&lt;span class="p"&gt;-&lt;/span&gt; Complex repetitive pattern? → Skill is appropriate

&lt;span class="gs"&gt;**If conflicts/alternatives found:**&lt;/span&gt; Present options to user, get approval before proceeding.

&lt;span class="gu"&gt;### 3. Extract Project-Specific Patterns Only&lt;/span&gt;

From all sources, extract ONLY:
&lt;span class="p"&gt;-&lt;/span&gt; Unique naming conventions (e.g., &lt;span class="sb"&gt;`{EntityName}Repository`&lt;/span&gt;, &lt;span class="sb"&gt;`{EntityName}RepositoryImpl`&lt;/span&gt;)
&lt;span class="p"&gt;-&lt;/span&gt; Specific file paths/structure (e.g., &lt;span class="sb"&gt;`{Module}/Domain/`&lt;/span&gt;, &lt;span class="sb"&gt;`{Module}/Infrastructure/`&lt;/span&gt;)
&lt;span class="p"&gt;-&lt;/span&gt; Critical annotations (e.g., &lt;span class="sb"&gt;`@psalm-suppress`&lt;/span&gt;, &lt;span class="sb"&gt;`@extends`&lt;/span&gt;, specific doc comments)
&lt;span class="p"&gt;-&lt;/span&gt; Project validation commands (e.g., &lt;span class="sb"&gt;`docker compose exec php composer check`&lt;/span&gt;)
&lt;span class="p"&gt;-&lt;/span&gt; When to trigger (keywords, scenarios)

&lt;span class="gu"&gt;### 4. Generate Skill Name &amp;amp; Ask Minimal Questions&lt;/span&gt;

&lt;span class="gs"&gt;**Generate name automatically:**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Component-specific: &lt;span class="sb"&gt;`{component}-{action}-{object}`&lt;/span&gt;
&lt;span class="p"&gt;  -&lt;/span&gt; Examples: &lt;span class="sb"&gt;`backend-implementing-repository`&lt;/span&gt;, &lt;span class="sb"&gt;`frontend-creating-component`&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; General: &lt;span class="sb"&gt;`{action}-{object}`&lt;/span&gt;
&lt;span class="p"&gt;  -&lt;/span&gt; Examples: &lt;span class="sb"&gt;`creating-feature-directory`&lt;/span&gt;, &lt;span class="sb"&gt;`reviewing-skill`&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Format: lowercase-with-hyphens, gerund form (-ing), max 64 chars

&lt;span class="gs"&gt;**Ask 1-2 questions max, only if:**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Skill name is ambiguous (confirm generated name)
&lt;span class="p"&gt;-&lt;/span&gt; Critical pattern unclear from all sources (rarely needed)

Extract everything else from context automatically.

&lt;span class="gu"&gt;### 5. Create Concise SKILL.md (50-100 lines)&lt;/span&gt;

&lt;span class="gs"&gt;**Structure:**&lt;/span&gt;
&lt;span class="gh"&gt;~~~markdown
---
&lt;/span&gt;name: {skill-name}
&lt;span class="gh"&gt;description: {What + when, max 164 chars}
---
&lt;/span&gt;
&lt;span class="gh"&gt;# {Title}&lt;/span&gt;

{One sentence: what it creates/does}

&lt;span class="gu"&gt;## When to Use&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; {Trigger keyword scenario 1}
&lt;span class="p"&gt;-&lt;/span&gt; {Trigger keyword scenario 2}

&lt;span class="gu"&gt;## Instructions&lt;/span&gt;

&lt;span class="gu"&gt;### 1. {First Step - usually context gathering}&lt;/span&gt;

Extract from context (docs/UML/prompt/code):
&lt;span class="p"&gt;-&lt;/span&gt; {What to extract}
&lt;span class="p"&gt;-&lt;/span&gt; Only ask if critical info missing

&lt;span class="gu"&gt;### 2. {Main Action Step}&lt;/span&gt;

&lt;span class="gs"&gt;**{File/Component Type 1}:**&lt;/span&gt; &lt;span class="sb"&gt;`{project/specific/path}`&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; {Project-specific pattern}
&lt;span class="p"&gt;-&lt;/span&gt; {Critical gotcha if any}

&lt;span class="gs"&gt;**{File/Component Type 2}:**&lt;/span&gt; &lt;span class="sb"&gt;`{project/specific/path}`&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; {Pattern unique to this project}

&lt;span class="gs"&gt;**Reference:**&lt;/span&gt; &lt;span class="sb"&gt;`{path/to/example/file}`&lt;/span&gt;

&lt;span class="gu"&gt;### 3. {Project-Specific Patterns Section}&lt;/span&gt;

&lt;span class="gs"&gt;**{Pattern Name}**&lt;/span&gt; (only if non-obvious):
&lt;span class="se"&gt;\~&lt;/span&gt;~~{language}
{Minimal code showing unique project pattern}
&lt;span class="se"&gt;\~&lt;/span&gt;~~

&lt;span class="gu"&gt;### 4. Validate&lt;/span&gt;

&lt;span class="se"&gt;\~&lt;/span&gt;~~bash
{project-specific validation command}
&lt;span class="se"&gt;\~&lt;/span&gt;~~

&lt;span class="gu"&gt;### 5. {Optional: Updating Existing}&lt;/span&gt;

{Brief: Read → Update → Validate}
&lt;span class="p"&gt;~~~&lt;/span&gt;&lt;span class="nl"&gt;
&lt;/span&gt;
**Apply ruthless filtering:**
- Each line: "Is this project-specific?" → No? Delete.
- Each example: "Would Claude know this?" → Yes? Just reference file instead.
- Keep critical patterns, skip explanations.

### 6. Create config.json

**File:** `{skill-name}/config.json`
&lt;span class="p"&gt;~~~&lt;/span&gt;json
{
  "keywords": ["keyword1", "keyword2"],
  "hint": "☝️ {Brief hint when to use this skill}"
}
&lt;span class="p"&gt;~~~&lt;/span&gt;&lt;span class="nl"&gt;
&lt;/span&gt;
**Keywords:** Words that trigger hint in user prompts (case-insensitive, whole word match)
**Hint:** Short message suggesting skill usage (shown via hook when keywords match)

### 7. Create Templates (Optional)

Only if template:
- Contains non-obvious project structure
- Saves significant time vs writing from scratch

Otherwise: reference existing example files.

### 8. Validate &amp;amp; Report

1. Check line count: 50-100 ideal, 150 absolute max
2. Remove any generic content that snuck in
3. Invoke `reviewing-skill`
4. Report created files and next steps

## Naming Conventions

- `backend-{action}-{object}` (e.g., `backend-implementing-repository`)
- `frontend-{action}-{object}` (e.g., `frontend-creating-hook`)
- `infrastructure-{action}-{object}` (e.g., `infrastructure-deploying-lambda`)
- General: `{action}-{object}` (e.g., `creating-feature`, `reviewing-skill`)

Always gerund form (-ing) for action.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ironically, this skill doesn't follow its own "50-150 lines" recommendation. This is not a hard rule, but rather a constraint for Claude Code while it implements the skill - it's forced to keep the information short and provide only necessary details.s&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Results
&lt;/h2&gt;

&lt;p&gt;Subjectively, I'd estimate the performance gain at 30-40% in comparison with the period before the Claude Code introduction. So, it's definitely more than a week saved per month.&lt;/p&gt;

&lt;p&gt;I decided to gather the statistics based on my git history for the last two-year period.&lt;/p&gt;

&lt;p&gt;I understand that it cannot be used as the only valid metric for measuring performance. At the same time, I think that it has a correlation with productivity if we compare it for long periods for the same codebase, and with similar types of tasks done during these periods.&lt;/p&gt;

&lt;p&gt;I've chosen the following periods to compare:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;May - August 2024&lt;/li&gt;
&lt;li&gt;August - October 2024&lt;/li&gt;
&lt;li&gt;October 2024 - January 2025&lt;/li&gt;
&lt;li&gt;January - March 2025&lt;/li&gt;
&lt;li&gt;March - June 2025&lt;/li&gt;
&lt;li&gt;June - August 2025&lt;/li&gt;
&lt;li&gt;October - December 2025&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;September 2025 is excluded because it was a period for different experiments with Claude Code, and it's not relevant for comparison.&lt;/p&gt;

&lt;p&gt;All the statistic is aggregated by weeks. Weeks with fewer than 10 git commits in a week are excluded from the calculation (in order to exclude vacations, etc). Each of the periods above has 9-11 weeks, matching this requirement.&lt;/p&gt;

&lt;p&gt;Generally, all these periods are ongoing development of the application. At the same time, they could have some features impacting the LOC statistic.&lt;/p&gt;

&lt;p&gt;Here are summary comparison table for the statistics and some graphs. More detailed data is available via the links at the end of this section in interactive graph view.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;May-Aug'24&lt;/th&gt;
&lt;th&gt;Aug-Oct'24&lt;/th&gt;
&lt;th&gt;Oct-Jan'25&lt;/th&gt;
&lt;th&gt;Jan-Mar'25&lt;/th&gt;
&lt;th&gt;Mar-Jun'25&lt;/th&gt;
&lt;th&gt;Jun-Aug'25&lt;/th&gt;
&lt;th&gt;Oct-Dec'25&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Weeks included&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Avg Commits per Week&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Avg Prod Deployments per Week&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total NET LOC - Min&lt;/td&gt;
&lt;td&gt;1,419&lt;/td&gt;
&lt;td&gt;374&lt;/td&gt;
&lt;td&gt;499&lt;/td&gt;
&lt;td&gt;959&lt;/td&gt;
&lt;td&gt;2,288&lt;/td&gt;
&lt;td&gt;1,369&lt;/td&gt;
&lt;td&gt;2,801&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total NET LOC - Max&lt;/td&gt;
&lt;td&gt;3,413&lt;/td&gt;
&lt;td&gt;3,306&lt;/td&gt;
&lt;td&gt;3,815&lt;/td&gt;
&lt;td&gt;3,870&lt;/td&gt;
&lt;td&gt;7,062&lt;/td&gt;
&lt;td&gt;4,297&lt;/td&gt;
&lt;td&gt;12,143&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;Total NET LOC - Avg&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;2,590&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;1,681&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;2,045&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;2,481&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;3,975&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;2,506&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;5,947&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Source NET LOC - Min&lt;/td&gt;
&lt;td&gt;925&lt;/td&gt;
&lt;td&gt;377&lt;/td&gt;
&lt;td&gt;454&lt;/td&gt;
&lt;td&gt;765&lt;/td&gt;
&lt;td&gt;2,042&lt;/td&gt;
&lt;td&gt;1,061&lt;/td&gt;
&lt;td&gt;988&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Source NET LOC - Max&lt;/td&gt;
&lt;td&gt;2,871&lt;/td&gt;
&lt;td&gt;3,094&lt;/td&gt;
&lt;td&gt;3,696&lt;/td&gt;
&lt;td&gt;3,132&lt;/td&gt;
&lt;td&gt;5,349&lt;/td&gt;
&lt;td&gt;3,025&lt;/td&gt;
&lt;td&gt;6,799&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;Source NET LOC - Avg&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;2,125&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;1,480&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;1,701&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;2,016&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;3,267&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;1,822&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;3,473&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Test NET LOC - Min&lt;/td&gt;
&lt;td&gt;88&lt;/td&gt;
&lt;td&gt;-232&lt;/td&gt;
&lt;td&gt;45&lt;/td&gt;
&lt;td&gt;159&lt;/td&gt;
&lt;td&gt;129&lt;/td&gt;
&lt;td&gt;132&lt;/td&gt;
&lt;td&gt;296&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Test NET LOC - Max&lt;/td&gt;
&lt;td&gt;924&lt;/td&gt;
&lt;td&gt;661&lt;/td&gt;
&lt;td&gt;886&lt;/td&gt;
&lt;td&gt;953&lt;/td&gt;
&lt;td&gt;1,713&lt;/td&gt;
&lt;td&gt;1,988&lt;/td&gt;
&lt;td&gt;5,091&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;Test NET LOC - Avg&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;434&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;145&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;344&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;463&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;707&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;505&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;em&gt;2,043&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The following metrics are used:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Weeks Included - the number of weeks used for calculation&lt;/li&gt;
&lt;li&gt;Avg Commits per Week - the metric is not a direct reference for performance. Commits with Claude Code became more atomic (previously, I could combine several changes into a single commit to save time). That is also better from a CI/CD principles perspective and makes it easier to apply automated code review by a clear scope for each commit.&lt;/li&gt;
&lt;li&gt;Avg Prod Deployments per Week - this is an &lt;em&gt;approximate&lt;/em&gt; number of production deployments gathered as the number of git tags created during this period. Git tag is used as the version of the production build. Not all of them are actually deployed to production. At the same time, several components are deployed from a single git repo and only 1 tag is used for them&lt;/li&gt;
&lt;li&gt;Source NET LOC - * - metric calculated for source files only as NumberOfAdded minus NumberOfDeleted&lt;/li&gt;
&lt;li&gt;Test NET LOC - * - metrics calculated for test files only&lt;/li&gt;
&lt;li&gt;Total NET LOC - both, source files + test files&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And here is the graph that compares NET LOC statistic of October - December 2025 with other periods&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv6s4sw861j3sxu5p1qca.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv6s4sw861j3sxu5p1qca.png" alt="Net LOC Statistic" width="800" height="137"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For more detailed metrics, see the interactive charts:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dzianis-karviha.github.io/claude-code-guide/sections/weekly_stats.html" rel="noopener noreferrer"&gt;Weekly Statistic&lt;/a&gt; | &lt;a href="https://dzianis-karviha.github.io/claude-code-guide/sections/period_stats.html" rel="noopener noreferrer"&gt;Period Statistic&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  11. What's next?
&lt;/h2&gt;

&lt;p&gt;Claude Code may be used in numerous scenarios for optimizing development workflows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Requirements gathering
&lt;/h3&gt;

&lt;p&gt;Requirements often arrive lacking technical detail. Claude Code can help structure this process by asking clarification questions upfront, preparing requirements in a standardized format, and suggesting implementation options.&lt;/p&gt;

&lt;p&gt;This reduces back-and-forth communication and speeds up development — requirements arrive ready for implementation planning.&lt;/p&gt;

&lt;h3&gt;
  
  
  Automate simple updates implementation via CI
&lt;/h3&gt;

&lt;p&gt;This would let me implement and deploy small, straightforward updates directly from the task manager through a CI pipeline — no manual coding required.&lt;/p&gt;

&lt;p&gt;The implementation path is clear but requires CI/CD pipeline improvements and dedicated time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Custom Tools for development workflow
&lt;/h3&gt;

&lt;p&gt;I believe the current performance boost will plateau soon. While the workflow is efficient, jumping between terminal tabs, markdown files, and source code affects focus significantly.  &lt;/p&gt;

&lt;p&gt;The idea is to build a dashboard that visualizes task input (to-do files) and orchestrates Claude Code instances.&lt;/p&gt;

&lt;p&gt;This is still exploratory — I'll explore existing tooling first. If you've built something similar, I'd be interested to hear about your approach.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Author: Dzianis Karviha (&lt;a href="https://www.linkedin.com/in/dzianis-karviha" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/dzianis-karviha&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>claude</category>
      <category>devproductivity</category>
      <category>softwareengineering</category>
    </item>
  </channel>
</rss>
