Back to Insights
AISoftware

AI-Assisted Development: Beyond the Hype

An honest look at AI coding assistants like GitHub Copilot and Claude. Learn where they excel, where they fail, and how to use them effectively.

S5 Labs TeamJuly 8, 2025

The conversation around AI coding assistants has become almost religious. On one side, enthusiasts proclaim that tools like GitHub Copilot and emerging competitors will replace developers entirely. On the other, skeptics dismiss them as fancy autocomplete that creates more problems than it solves. The truth, as usual, is more nuanced—and more useful.

After months of integrating AI assistants into our development workflows, we’ve developed a clearer picture of their genuine capabilities and limitations. This isn’t about whether AI will transform software development (it will) but about how to extract real value from these tools today.

The Current Landscape

GitHub Copilot remains the dominant player, trained on billions of lines of code from public repositories. Claude from Anthropic offers strong reasoning capabilities, with Claude 3.5 Sonnet becoming a favorite for complex coding tasks. GPT-4o powers various coding tools and integrations, while OpenAI’s o1 models show promise for tasks requiring deeper reasoning. Cursor has gained significant traction by building IDE-native experiences around these models.

The technology is improving rapidly. What seemed impressive six months ago now feels like table stakes. But capability and practical utility aren’t the same thing.

Where AI Assistants Actually Excel

Through extensive use across different project types, we’ve identified scenarios where AI assistants provide consistent, measurable value.

Boilerplate and Repetitive Code

This is the clearest win. Writing CRUD operations, setting up API endpoints, creating test fixtures, configuring build tools—tasks that follow predictable patterns are handled remarkably well. An experienced developer can often guide an AI to generate in minutes what would take an hour to type manually.

The key word is “guide.” You still need to know what you want. The AI won’t design your database schema or decide which fields to validate. But once you’ve made those decisions, it can produce the implementation quickly.

Exploring Unfamiliar Territory

When working with a new library, framework, or language feature, AI assistants serve as interactive documentation. Instead of reading through pages of docs to find the right method signature, you can describe what you’re trying to accomplish and get working examples.

This is particularly valuable for libraries with sparse documentation or those that have evolved significantly between versions. The assistant can often show you the modern way to accomplish something, not just the way documented in a tutorial from three years ago.

Rubber Duck Debugging With Suggestions

Explaining a bug to an AI assistant often surfaces the issue—just like traditional rubber duck debugging—but with the added benefit that the duck might actually spot the problem. We’ve found AI assistants surprisingly good at catching issues like off-by-one errors, missing null checks, and incorrect assumptions about API behavior.

The assistant won’t replace a proper debugger for complex issues, but for the bugs that make you feel foolish once found, it’s often faster than stepping through code manually.

Code Review and Refactoring Suggestions

Asking an AI to review a function or suggest refactoring approaches can surface blind spots. It might point out that a conditional could be simplified, suggest extracting a helper function, or note that a particular pattern violates conventions the team has established elsewhere.

This works best when you treat the suggestions as starting points, not directives. The AI doesn’t know your team’s preferences, performance constraints, or the full context of why code was written a certain way.

Where They Consistently Fall Short

Understanding the limitations is just as important as leveraging the strengths. We’ve encountered these issues repeatedly across different assistants and models.

Complex Architectural Decisions

AI assistants can discuss architectural patterns intelligently—they’ve been trained on countless blog posts and documentation about microservices, event sourcing, and CQRS. But they lack the judgment that comes from seeing architectures succeed and fail in production.

When asked to design a system, they’ll often suggest something plausible but generic. They don’t know that your team struggles with distributed systems debugging, that your deployment pipeline can’t handle certain patterns, or that your users need sub-100ms response times.

Architecture requires understanding constraints that exist outside the code. AI assistants don’t have access to those constraints.

Maintaining Large-Scale Consistency

AI assistants work on a relatively small context window—they can see some of your code, but not all of it. This creates problems on larger codebases where consistency matters.

An assistant might suggest implementing a feature one way in the file you’re working on, while elsewhere in the project the same feature is implemented differently. It might recommend a pattern that conflicts with established conventions or use a library function that was deprecated by your team.

For small projects or isolated modules, this matters less. For substantial codebases maintained by teams, it’s a persistent friction.

Edge Cases and Error Handling

AI assistants are trained on typical code, which means they’re good at generating typical implementations. They’re notably weaker on edge cases—the null inputs, malformed data, race conditions, and failure modes that distinguish production-ready code from prototypes.

We’ve found that AI-generated code often handles the happy path elegantly while leaving error handling incomplete or overly generic. Code review needs to specifically scrutinize these areas.

Security-Critical Code

Authentication, authorization, cryptography, input sanitization—these areas demand precision and paranoia. AI assistants will generate code that looks reasonable and might even work in simple tests, but subtle vulnerabilities can lurk in implementation details.

We don’t trust AI assistants to write security-critical code without expert review. The cost of a subtle mistake is too high, and the assistants don’t demonstrate the adversarial thinking that security requires.

Effective Integration Strategies

Given these strengths and limitations, how should development teams actually use these tools?

Treat the AI as a Junior Developer

This framing is useful: the AI is like a junior developer who types fast, has read a lot of code, but lacks judgment and needs supervision. You’d never ship a junior’s code without review, and you’d give them tasks matched to their skill level.

Give the AI concrete, well-defined tasks. Review its output carefully. Don’t ask it to make decisions that require understanding context it doesn’t have.

Verify, Don’t Trust

AI assistants confidently generate code that doesn’t work. They’ll use APIs that don’t exist, misremember function signatures, and implement logic that subtly misses the requirement. This isn’t a flaw in specific models—it’s an inherent characteristic of how these systems work.

Build verification into your workflow. Run the generated code. Write tests (or have the AI write tests, then run them). Check imports and dependencies. Read through the logic to confirm it does what you intended.

The speed gains from AI assistance evaporate if you spend them debugging hallucinated code. Understanding how tokens and LLM inference work helps explain why these hallucinations occur and how to minimize them.

Invest in Clear Communication

The quality of AI output correlates strongly with the quality of your prompts. Vague requests produce vague code. Specific requests—including context about the project, constraints, and desired outcomes—produce more useful results.

This is a skill that improves with practice. Learning to communicate effectively with AI assistants is becoming a genuine professional competency, distinct from but related to traditional programming skills. Our prompt engineering patterns guide provides techniques that apply to both coding and general AI interactions.

Know When to Type It Yourself

Sometimes it’s faster to write the code than to explain what you want. This is especially true for small functions where the explanation would be longer than the implementation, for code where you need precise control over every detail, and for modifications to existing code where the AI would need extensive context.

The goal is productivity, not AI usage for its own sake. The best developers we’ve observed switch fluidly between AI assistance and manual coding based on what’s fastest for each task.

The Bigger Picture

AI coding assistants are genuinely useful tools that will become more capable over time. They’re not replacing developers—they’re changing what developers spend their time on.

The developers getting the most value from these tools are those who understand them clearly: powerful for generation and exploration, limited for judgment and context, requiring oversight rather than blind trust. They use AI assistance strategically, on tasks well-suited to its capabilities, while maintaining the engineering judgment that these tools lack.

The hype is real, but it’s hype about the wrong thing. The revolution isn’t that AI will write our code. It’s that the craft of software development is evolving, and the tools we use to practice that craft are becoming more powerful. Understanding those tools—their capabilities and their limitations—is part of the job now.

Start small. Use these assistants for concrete tasks where you can verify the output. Build intuition for where they help and where they hinder. Over time, you’ll develop your own effective patterns for human-AI collaboration. If you’re considering broader AI adoption in your organization, our guide on when AI makes sense can help you identify the right opportunities.

The best developers a year from now won’t be those who adopted AI assistants first. They’ll be those who learned to use them most effectively.

Want to discuss this topic?

We'd love to hear about your specific challenges and how we might help.