The Developer Playbook
Using Gemini Code Assist occasionally and using it well are different skills. This lesson distills the habits, workflows, and mindset that separate developers who get consistent value from AI from those who get occasional value from it.
The Trust-But-Verify Mindset
The core professional habit with any AI coding assistant is trust-but-verify: accept suggestions readily for low-stakes, high-legibility code, and read carefully before accepting for anything that involves logic, security, or external system behavior. The mistake most developers make in the first weeks of using AI assistance is applying the same level of scrutiny to everything (too slow) or too little scrutiny to everything (introduces bugs).
A maturity model for how that calibration develops:
| Stage | Behavior | The problem |
|---|---|---|
| Skeptic | Reads every completion carefully, rarely accepts | Not capturing speed gains from boilerplate and pattern code |
| Over-truster | Accepts most completions quickly, reads rarely | Merges subtle bugs; loses confidence in the tool after a bad incident |
| Calibrated | Accepts boilerplate on sight, reads logic/security code carefully, has a verification checklist for generated tests | None - this is the target |
Getting to calibrated takes deliberate practice. The fastest path is to keep a log for two weeks of every AI-generated suggestion you accepted that later caused a bug. The pattern in that log tells you exactly where your verification threshold needs to go up.
Daily Workflow Integration
Developers who get the most from Gemini Code Assist treat it as part of the coding loop rather than an occasional shortcut. A concrete daily pattern that works:
- Start a new function with a comment. Before writing the signature, write a one-line comment describing what the function should do and any constraints. This is your intent specification - it improves completion quality and doubles as documentation.
- Use completions for pattern code; switch to chat for design questions. If you are writing a standard pattern (an HTTP handler, a database model, a test fixture), completions are fast and reliable. If you are deciding how to structure something, open the chat panel and think through it with the model first.
- Run /explain before modifying unfamiliar code. Before changing a function you did not write, select it and run /explain. The 30-second explanation prevents the 30-minute debugging session that follows a change made without understanding the invariants.
- Use /fix as a starting point, not a final answer. When you get a compiler error or test failure, paste the error and ask for a fix. Use the model's output as a hypothesis, not a solution - verify that the fix actually addresses the root cause, not just the symptom.
- Run a pre-PR self-review before every push. Five minutes with the diff view and a few chat prompts catches the issues that make human reviewers' comments longer than they need to be.
Prompting Habits That Compound Over Time
A few prompting habits that individually produce small gains but compound into significant productivity over weeks:
- Name what you do not want. "Refactor this - do not change the public interface" produces a tighter output than "Refactor this" alone. The model avoids the most common mistake before it makes it.
- Include the error message, not just a description of it. "I'm getting a type error" is less useful than pasting the stack trace. Concrete error text is the fastest path to a useful fix.
- Ask for an explanation before a fix. "Explain why this is failing, then suggest a fix" produces better answers than "fix this." Understanding the diagnosis lets you evaluate whether the fix is correct.
- Re-use successful prompt structures. When a prompt produces exactly the right output, save it as a template. Most codebases have a small set of recurring tasks (add an endpoint, add a migration, add a test) that accept the same prompt shape every time.
What Not to Delegate to AI
Knowing what to keep in your own hands is as important as knowing what to hand off. These tasks consistently produce worse outcomes when delegated to AI assistance than when done with full human judgment:
- Security-critical logic. Authentication, authorization, cryptographic key handling, and input validation on public endpoints should be written deliberately, with reference to the relevant standards and reviewed by a human with security expertise. AI completions for security code can look correct while containing subtle flaws - a missing check, a bypassable condition, an unsafe default. This is the one category where "write by hand and review carefully" beats "generate and verify."
- Architecture decisions. "How should we structure this service?" is a question for experienced engineers who understand your system's history, constraints, and growth trajectory. The model's architectural suggestions are reasonable for generic cases - and wrong when your situation is not generic.
- Business logic that encodes rules only your team understands. The model does not know your regulatory requirements, your contractual obligations, or the edge case that caused the incident three years ago. Code that encodes those rules needs to be written by someone who knows them.
- Production incident diagnosis. During an active incident, the time pressure and stakes make it tempting to ask for a fix immediately. In practice, AI-generated fixes during incidents tend to patch symptoms rather than root causes. Use the model to look up API documentation or explain unfamiliar code you are reading - not to generate the fix you are about to deploy.
Keeping Your Own Skills Sharp
A risk that gets less attention than it deserves: relying on AI completions for code you should be able to write yourself eventually atrophies the underlying skill. This matters because the model is wrong often enough that you need the skill to catch the errors - and because the model is unavailable sometimes (network issues, rate limits, Enterprise license lapses).
Practical ways to stay sharp while using AI assistance heavily:
- Write the first attempt yourself before checking if the completion matches what you would have written. When they differ, understand why.
- On at least one task per week, write the code entirely without AI assistance. This surfaces which skills have gotten rusty.
- When accepting a multi-line completion, write a one-sentence explanation of what it does in a comment or in your head. If you cannot, you do not understand it well enough to own it.
Team Adoption: What Works and What Does Not
For teams rolling out Code Assist, a few patterns consistently work better than others:
- Show, do not tell. A 15-minute demo where someone uses Code Assist to solve a real problem from the current sprint converts skeptics faster than any slides. Pick a task the audience finds tedious - test generation or documentation writing works well.
- Start with low-risk, high-volume tasks. Docstrings, test boilerplate, and changelog drafts are good first use cases. They save time immediately, they are easy to verify, and a mistake is low-cost. This builds confidence before tackling the higher-stakes uses.
- Share prompts that work. A team prompt library (a shared doc, a wiki page, a code snippet collection) that captures the prompts that produced good outputs shortens the learning curve for new adopters significantly.
- Mandating adoption without giving developers time to calibrate. Forced use before calibration drives the "generate and accept without reading" anti-pattern.
- Treating AI-generated code differently in code review. The same standards apply - if a human reviewer would flag it, they flag it whether AI wrote it or a person did.
Your End-of-Course Checklist
After completing this course, you should be able to:
- ✅ Explain how Gemini Code Assist differs from Gemini (the model), Gemini CLI, and Google AI Studio
- ✅ Install and configure Code Assist in VS Code or JetBrains with a .geminiignore file for your project
- ✅ Use @workspace and @file context anchors to get precise chat responses instead of generic ones
- ✅ Apply the CRAT framework (Context, Requirements, Avoid, Test case) to prompts that need specific code changes
- ✅ Run a pre-PR self-review using the chat panel to catch mechanical issues before human review
- ✅ Generate and verify unit tests, knowing how to check that tests catch bugs rather than just passing
- ✅ Describe the Enterprise-only features your organization would need for a regulated deployment
- ✅ Identify the code categories (security, architecture, business logic) that require human judgment over AI delegation
Ready to Go Deeper?
Live instructor-led courses from our partners. Affiliate disclosure.