blog.rust.gay

AI-assisted code review: useful or noise

Where LLM review helps and hurts. This post digs into the topic, drawing on recent discussion from Hacker News, Reddit, and the wider community.

The conversation that prompted this post is linked in the sources. I have tried to capture the substance of the discussion rather than just summarize it, because the comments are usually where the real insight lives.

What happened

Caching is the single biggest cost lever for LLM applications. Prompt caching and response caching can cut bills by an order of magnitude for workloads with repeated prefixes.

Retrieval quality dominates RAG quality. A perfect model with bad retrieval gives bad answers, and a mediocre model with great retrieval gives acceptable ones.

Latency is a feature. Users abandon slow AI features faster than slow traditional ones because the expectation of instant response is higher.

Observability for LLM apps means logging prompts, completions, tool calls, and costs. Without it you are flying blind.

Structured output via JSON schema constraints makes LLMs usable as components in larger systems. Unstructured text is a liability in a pipeline.

Fine-tuning is overused. Most teams should exhaust prompting and RAG before considering a fine-tune, because fine-tuning is expensive to evaluate and hard to iterate on.

Model routing sends simple queries to cheap models and hard ones to expensive models. It is the easiest cost optimization most teams have not done.

Multi-agent systems are promising but add coordination complexity. Start with a single agent and a good tool set before splitting into specialists.

Large language models are best understood as very good pattern matchers with a large but finite context. They are not databases, not search engines, and not oracles, and treating them as any of those leads to predictable failures.

Evaluation is a product, not a test. A good eval suite encodes what your users actually care about and becomes the spec your model is measured against.

The hardest part of building with LLMs is not the model call. It is the evaluation. Without a solid eval suite, you cannot tell whether a change helped or hurt, and you end up shipping on vibes.

Tool use turns a chat model into an agent. The model decides which tool to call, with what arguments, and interprets the result. Getting this loop right is where most of the engineering effort goes.

Retrieval quality dominates RAG quality. A perfect model with bad retrieval gives bad answers, and a mediocre model with great retrieval gives acceptable ones.

Retrieval quality dominates RAG quality. A perfect model with bad retrieval gives bad answers, and a mediocre model with great retrieval gives acceptable ones.

Observability for LLM apps means logging prompts, completions, tool calls, and costs. Without it you are flying blind.

Why it matters

Context windows keep growing, but attention is not free. Stuffing more tokens into the prompt dilutes the signal and increases cost and latency. Retrieval and summarization usually beat brute force.

Tool use turns a chat model into an agent. The model decides which tool to call, with what arguments, and interprets the result. Getting this loop right is where most of the engineering effort goes.

Latency is a feature. Users abandon slow AI features faster than slow traditional ones because the expectation of instant response is higher.

The hardest part of building with LLMs is not the model call. It is the evaluation. Without a solid eval suite, you cannot tell whether a change helped or hurt, and you end up shipping on vibes.

Guardrails are not optional in production. Models will eventually produce something you did not want, and the question is whether your system catches it before the user does.

The hardest part of building with LLMs is not the model call. It is the evaluation. Without a solid eval suite, you cannot tell whether a change helped or hurt, and you end up shipping on vibes.

Structured output via JSON schema constraints makes LLMs usable as components in larger systems. Unstructured text is a liability in a pipeline.

Retrieval quality dominates RAG quality. A perfect model with bad retrieval gives bad answers, and a mediocre model with great retrieval gives acceptable ones.

Latency is a feature. Users abandon slow AI features faster than slow traditional ones because the expectation of instant response is higher.

Model routing sends simple queries to cheap models and hard ones to expensive models. It is the easiest cost optimization most teams have not done.

The hardest part of building with LLMs is not the model call. It is the evaluation. Without a solid eval suite, you cannot tell whether a change helped or hurt, and you end up shipping on vibes.

Fine-tuning is overused. Most teams should exhaust prompting and RAG before considering a fine-tune, because fine-tuning is expensive to evaluate and hard to iterate on.

Prompt engineering is real engineering. The difference between a mediocre and an excellent prompt is often the difference between a demo and a product, and it deserves the same rigor as code.

Latency is a feature. Users abandon slow AI features faster than slow traditional ones because the expectation of instant response is higher.

Context windows keep growing, but attention is not free. Stuffing more tokens into the prompt dilutes the signal and increases cost and latency. Retrieval and summarization usually beat brute force.

Practical takeaways

  • Observability for LLM apps means logging prompts, completions, tool calls, and costs.
  • Large language models are best understood as very good pattern matchers with a large but finite context.
  • Large language models are best understood as very good pattern matchers with a large but finite context.
  • Caching is the single biggest cost lever for LLM applications.
  • Structured output via JSON schema constraints makes LLMs usable as components in larger systems.
  • Large language models are best understood as very good pattern matchers with a large but finite context.
  • Context windows keep growing, but attention is not free.
  • Caching is the single biggest cost lever for LLM applications.
  • Caching is the single biggest cost lever for LLM applications.
  • Guardrails are not optional in production.

Prompt engineering is real engineering. The difference between a mediocre and an excellent prompt is often the difference between a demo and a product, and it deserves the same rigor as code.

Tool use turns a chat model into an agent. The model decides which tool to call, with what arguments, and interprets the result. Getting this loop right is where most of the engineering effort goes.

Multi-agent systems are promising but add coordination complexity. Start with a single agent and a good tool set before splitting into specialists.

Guardrails are not optional in production. Models will eventually produce something you did not want, and the question is whether your system catches it before the user does.

Evaluation is a product, not a test. A good eval suite encodes what your users actually care about and becomes the spec your model is measured against.

Retrieval quality dominates RAG quality. A perfect model with bad retrieval gives bad answers, and a mediocre model with great retrieval gives acceptable ones.

Structured output via JSON schema constraints makes LLMs usable as components in larger systems. Unstructured text is a liability in a pipeline.

Prompt engineering is real engineering. The difference between a mediocre and an excellent prompt is often the difference between a demo and a product, and it deserves the same rigor as code.

Prompt engineering is real engineering. The difference between a mediocre and an excellent prompt is often the difference between a demo and a product, and it deserves the same rigor as code.

Prompt engineering is real engineering. The difference between a mediocre and an excellent prompt is often the difference between a demo and a product, and it deserves the same rigor as code.

The hardest part of building with LLMs is not the model call. It is the evaluation. Without a solid eval suite, you cannot tell whether a change helped or hurt, and you end up shipping on vibes.

Evaluation is a product, not a test. A good eval suite encodes what your users actually care about and becomes the spec your model is measured against.

Model routing sends simple queries to cheap models and hard ones to expensive models. It is the easiest cost optimization most teams have not done.

Guardrails are not optional in production. Models will eventually produce something you did not want, and the question is whether your system catches it before the user does.

Evaluation is a product, not a test. A good eval suite encodes what your users actually care about and becomes the spec your model is measured against.

Retrieval quality dominates RAG quality. A perfect model with bad retrieval gives bad answers, and a mediocre model with great retrieval gives acceptable ones.

Tool use turns a chat model into an agent. The model decides which tool to call, with what arguments, and interprets the result. Getting this loop right is where most of the engineering effort goes.

Fine-tuning is overused. Most teams should exhaust prompting and RAG before considering a fine-tune, because fine-tuning is expensive to evaluate and hard to iterate on.

Observability for LLM apps means logging prompts, completions, tool calls, and costs. Without it you are flying blind.

Evaluation is a product, not a test. A good eval suite encodes what your users actually care about and becomes the spec your model is measured against.

Sources

This post is informed by discussion on github.com and related threads on Hacker News and Reddit. Primary source: https://github.com/features/copilot.

Fine-tuning is overused. Most teams should exhaust prompting and RAG before considering a fine-tune, because fine-tuning is expensive to evaluate and hard to iterate on.

Observability for LLM apps means logging prompts, completions, tool calls, and costs. Without it you are flying blind.

Large language models are best understood as very good pattern matchers with a large but finite context. They are not databases, not search engines, and not oracles, and treating them as any of those leads to predictable failures.

Prompt engineering is real engineering. The difference between a mediocre and an excellent prompt is often the difference between a demo and a product, and it deserves the same rigor as code.

Latency is a feature. Users abandon slow AI features faster than slow traditional ones because the expectation of instant response is higher.

Model routing sends simple queries to cheap models and hard ones to expensive models. It is the easiest cost optimization most teams have not done.

Latency is a feature. Users abandon slow AI features faster than slow traditional ones because the expectation of instant response is higher.

Evaluation is a product, not a test. A good eval suite encodes what your users actually care about and becomes the spec your model is measured against.

Structured output via JSON schema constraints makes LLMs usable as components in larger systems. Unstructured text is a liability in a pipeline.

Latency is a feature. Users abandon slow AI features faster than slow traditional ones because the expectation of instant response is higher.

Prompt engineering is real engineering. The difference between a mediocre and an excellent prompt is often the difference between a demo and a product, and it deserves the same rigor as code.

Evaluation is a product, not a test. A good eval suite encodes what your users actually care about and becomes the spec your model is measured against.

Guardrails are not optional in production. Models will eventually produce something you did not want, and the question is whether your system catches it before the user does.

The hardest part of building with LLMs is not the model call. It is the evaluation. Without a solid eval suite, you cannot tell whether a change helped or hurt, and you end up shipping on vibes.

The hardest part of building with LLMs is not the model call. It is the evaluation. Without a solid eval suite, you cannot tell whether a change helped or hurt, and you end up shipping on vibes.

The hardest part of building with LLMs is not the model call. It is the evaluation. Without a solid eval suite, you cannot tell whether a change helped or hurt, and you end up shipping on vibes.

Prompt engineering is real engineering. The difference between a mediocre and an excellent prompt is often the difference between a demo and a product, and it deserves the same rigor as code.

Context windows keep growing, but attention is not free. Stuffing more tokens into the prompt dilutes the signal and increases cost and latency. Retrieval and summarization usually beat brute force.

Prompt engineering is real engineering. The difference between a mediocre and an excellent prompt is often the difference between a demo and a product, and it deserves the same rigor as code.

Prompt engineering is real engineering. The difference between a mediocre and an excellent prompt is often the difference between a demo and a product, and it deserves the same rigor as code.

Guardrails are not optional in production. Models will eventually produce something you did not want, and the question is whether your system catches it before the user does.

Prompt engineering is real engineering. The difference between a mediocre and an excellent prompt is often the difference between a demo and a product, and it deserves the same rigor as code.

Observability for LLM apps means logging prompts, completions, tool calls, and costs. Without it you are flying blind.

Tool use turns a chat model into an agent. The model decides which tool to call, with what arguments, and interprets the result. Getting this loop right is where most of the engineering effort goes.

Observability for LLM apps means logging prompts, completions, tool calls, and costs. Without it you are flying blind.

Multi-agent systems are promising but add coordination complexity. Start with a single agent and a good tool set before splitting into specialists.

Caching is the single biggest cost lever for LLM applications. Prompt caching and response caching can cut bills by an order of magnitude for workloads with repeated prefixes.

Structured output via JSON schema constraints makes LLMs usable as components in larger systems. Unstructured text is a liability in a pipeline.

Fine-tuning is overused. Most teams should exhaust prompting and RAG before considering a fine-tune, because fine-tuning is expensive to evaluate and hard to iterate on.

Structured output via JSON schema constraints makes LLMs usable as components in larger systems. Unstructured text is a liability in a pipeline.

Tool use turns a chat model into an agent. The model decides which tool to call, with what arguments, and interprets the result. Getting this loop right is where most of the engineering effort goes.

Model routing sends simple queries to cheap models and hard ones to expensive models. It is the easiest cost optimization most teams have not done.

Context windows keep growing, but attention is not free. Stuffing more tokens into the prompt dilutes the signal and increases cost and latency. Retrieval and summarization usually beat brute force.

The hardest part of building with LLMs is not the model call. It is the evaluation. Without a solid eval suite, you cannot tell whether a change helped or hurt, and you end up shipping on vibes.

Model routing sends simple queries to cheap models and hard ones to expensive models. It is the easiest cost optimization most teams have not done.

Model routing sends simple queries to cheap models and hard ones to expensive models. It is the easiest cost optimization most teams have not done.

Caching is the single biggest cost lever for LLM applications. Prompt caching and response caching can cut bills by an order of magnitude for workloads with repeated prefixes.

Prompt engineering is real engineering. The difference between a mediocre and an excellent prompt is often the difference between a demo and a product, and it deserves the same rigor as code.

Retrieval quality dominates RAG quality. A perfect model with bad retrieval gives bad answers, and a mediocre model with great retrieval gives acceptable ones.

The hardest part of building with LLMs is not the model call. It is the evaluation. Without a solid eval suite, you cannot tell whether a change helped or hurt, and you end up shipping on vibes.

Multi-agent systems are promising but add coordination complexity. Start with a single agent and a good tool set before splitting into specialists.

Context windows keep growing, but attention is not free. Stuffing more tokens into the prompt dilutes the signal and increases cost and latency. Retrieval and summarization usually beat brute force.

Large language models are best understood as very good pattern matchers with a large but finite context. They are not databases, not search engines, and not oracles, and treating them as any of those leads to predictable failures.

Evaluation is a product, not a test. A good eval suite encodes what your users actually care about and becomes the spec your model is measured against.

Model routing sends simple queries to cheap models and hard ones to expensive models. It is the easiest cost optimization most teams have not done.

Large language models are best understood as very good pattern matchers with a large but finite context. They are not databases, not search engines, and not oracles, and treating them as any of those leads to predictable failures.

Caching is the single biggest cost lever for LLM applications. Prompt caching and response caching can cut bills by an order of magnitude for workloads with repeated prefixes.

Tool use turns a chat model into an agent. The model decides which tool to call, with what arguments, and interprets the result. Getting this loop right is where most of the engineering effort goes.

Guardrails are not optional in production. Models will eventually produce something you did not want, and the question is whether your system catches it before the user does.

Guardrails are not optional in production. Models will eventually produce something you did not want, and the question is whether your system catches it before the user does.

Caching is the single biggest cost lever for LLM applications. Prompt caching and response caching can cut bills by an order of magnitude for workloads with repeated prefixes.

Model routing sends simple queries to cheap models and hard ones to expensive models. It is the easiest cost optimization most teams have not done.

Structured output via JSON schema constraints makes LLMs usable as components in larger systems. Unstructured text is a liability in a pipeline.

Guardrails are not optional in production. Models will eventually produce something you did not want, and the question is whether your system catches it before the user does.

Guardrails are not optional in production. Models will eventually produce something you did not want, and the question is whether your system catches it before the user does.

Guardrails are not optional in production. Models will eventually produce something you did not want, and the question is whether your system catches it before the user does.

Model routing sends simple queries to cheap models and hard ones to expensive models. It is the easiest cost optimization most teams have not done.

Caching is the single biggest cost lever for LLM applications. Prompt caching and response caching can cut bills by an order of magnitude for workloads with repeated prefixes.

Multi-agent systems are promising but add coordination complexity. Start with a single agent and a good tool set before splitting into specialists.

The hardest part of building with LLMs is not the model call. It is the evaluation. Without a solid eval suite, you cannot tell whether a change helped or hurt, and you end up shipping on vibes.


โ† back to posts


โ† back to posts