Skip to main content

Thoughts on AI Coding Tools

AI Coding Tools Agentic LLMs
Thoughts on AI Coding Tools

After submitting my resignation 3 months ago, I decided to use the notice period to full use.

In this time, I have

  • built a RAG pipeline for our team-internal documents with automated indexing of updated docs and integrated it with slack
  • played around with agent building libraries and tools
  • tried out a bunch of AI coding tools that were approved for internal use
  • used around $200 in model usage cost a month

I settled down with Cline and lastly Roo. It took about a week to find the sweet spot though.

  • How should my prompts be?
  • How much should I break the task down to get a good outcome?
  • What should be my general workflow for daily works?
  • What tools should I be using?

Once I started to get more comfortable with my workflow, it began to improve my delivery speed by quite a big margin. I can now confidently say that I am able to make AI agents produce code of acceptable quality with proper testing and documentation. And I can parallelize the work to significantly increase the throughput.

And last week, read an internal guide / memo from Stephen Callaghan, a Senior Principal Engineer at AWS, about his findings and thoughts in this regard. The document was so well written that I wanted to share the jist, without spilling any internal information.

So the rest of this writing is the summary of that memo and I mostly agree with them.

The Harsh Reality Check

Some uncomfortable truths:

  • If you're not using agentic LLMs daily, you're already behind.
  • "LLMs hallucinate" is not a valid excuse; tired engineers at 2 AM hallucinate too.
  • Your coding speed, not your knowledge, is now the bottleneck.
  • Senior engineers with agentic LLMs can now function as small teams.
  • The critical skill is now orchestrating LLM agents for superior code.
  • Your team's documentation debt can be eliminated in weeks, not years.
  • The LLM isn't replacing you; the engineer who uses it better will.

My Current Toolkit

While various interfaces exist (ChatGPT, Claude, Amazon's Cedric, Q CLI), I currently favor VSCode plugins for their adaptability and control. I've been focusing on two key tools: Cline and Roo.

Cline: A solid starting point. However, its development has become more enterprise-focused, with a slower release cadence.

Roo: A fork of Cline with a higher release cadence and a stronger embrace of agentic principles.

Why Roo > Cline: The Power of Modes & Orchestration

LLMs are goal-oriented and may "cheat" to succeed. Modes offer partitioning and guardrails, starting with specification writing and progressing through interfaces, architecture, tests, coding, integration, and documentation.

Modes are distinct personas using different LLM models, each with unique instructions. They maintain small context windows, allowing the orchestrator to delegate tasks effectively. Modes also allow me to imprint my work preferences, ensuring outputs align with my standards.

Agent Modes

  • Orchestrator: Strategic workflow orchestrator
  • Architect: Designs scalable, secure architectures
  • Specification Writer: Translates project context into modular pseudocode with TDD anchors
  • Auto-Coder: Writes clean, efficient, modular code
  • Debugger: Troubleshoots bugs and errors
  • Ask: Task-formulation guide
  • Tester: Implements Test-Driven Development
  • Documentation: Writes clear, concise Markdown documentation
  • Optimizer: Refactors and improves system performance
  • Focus: Single-purpose operator focused on memory bank operations
  • Git Maintainer: Handles all git operations
  • Doc Reviewer: Reviews documents and provides feedback
  • Doc Writer: Writes like me, to improve my own writing

Orchestration

The Orchestrator mode operates differently from other modes. Instead of direct handoffs, it:

  1. Decomposes complex tasks into smaller subtasks
  2. Delegates these subtasks to specialized modes using the new_task tool
  3. Receives results from completed subtasks via the attempt_completion tool
  4. Synthesizes these results into a comprehensive solution

This orchestration pattern allows for parallel work and specialized handling of different aspects of a complex task, making it particularly powerful for complex projects.

This is how you get efficiency and long running tasks. The context window is being reset by the sub-task from Orchestrator. I've had tasks running for hours and thousands of lines of code be written, well, with this model.

Note: As of Roo v3.14.3, Boomerang's context has been moved to Orchestrator, which is now included as a built-in mode, eliminating the need for manual setup.

Advice on Modes

  • Start with simple base modes: Architect, Code, Debug, Ask.
  • Create global and per-package modes.
  • Find an orchestrator that suits you.
  • Create custom modes for specific packages.
  • Try and adapt other people's modes to fit your needs.
  • Don't wholesale adopt someone else's system; personalize it.
  • Control mode updates through Git or revision management.
  • Teach modes by providing feedback and updating their rules accordingly.

Custom Instructions and Common Rules

I embed custom instructions in the modes for better manageability and use a common rules folder (.roo/rules/) for shared instructions across all modes to maintain consistency.

See Roo Custom Instructions and Custom Modes.

Memory Banks

Memory banks are key for effective mode collaboration. See Cline Memory Bank and GreatScotty Roo Memory Bank.

The memory bank consists of several markdown files that maintain project context across mode switches:

  • productContext.md: High-level project description, goals, features
  • activeContext.md: Current focus of work, recent changes, open questions
  • systemPatterns.md: Architectural patterns used in the project
  • decisionLog.md: Significant architectural decisions and their rationale
  • progress.md: Task progress tracking

Each mode can read from and write to these files, ensuring continuity and knowledge sharing across the development workflow.

MCP Servers

MCP Servers are essential for extending existing APIs. Some notable ones include:

  • Context7: Essential for good documentation
  • Fetch: Highly recommended for public info
  • zerolib-email: For email operations

Conclusion

I have not mentioned the choice of LLM model in this article. You can find that discussion in "Choosing AI Model for Agentic Coding Assistants: My Experience."

Ad