Wednesday, January 21, 2026
HomeArtificial IntelligenceAI Writes Python Code, However Sustaining It Is Nonetheless Your Job

AI Writes Python Code, However Sustaining It Is Nonetheless Your Job

AI Writes Python Code, However Sustaining It Is Nonetheless Your JobAI Writes Python Code, However Sustaining It Is Nonetheless Your Job
Picture by Writer

 

Introduction

 
AI coding instruments are getting impressively good at writing Python code that works. They will construct complete purposes and implement complicated algorithms in minutes. Nevertheless, the code AI generates is usually a ache to take care of.

In case you are utilizing instruments like Claude Code, GitHub Copilot, or Cursor’s agentic mode, you’ve got in all probability skilled this. The AI helps you ship working code quick, however the price exhibits up later. You may have doubtless refactored a bloated perform simply to grasp the way it works weeks after it was generated.

The issue is not that AI writes dangerous code — although it typically does — it’s that AI optimizes for “working now” and finishing the necessities in your immediate, when you want code that’s readable and maintainable in the long run. This text exhibits you learn how to bridge this hole with a concentrate on Python-specific methods.

 

Avoiding the Clean Canvas Lure

 
The largest mistake builders make is asking AI to begin from scratch. AI brokers work greatest with constraints and pointers.

Earlier than you write your first immediate, arrange the fundamentals of the venture your self. This implies selecting your venture construction — putting in your core libraries and implementing just a few working examples — to set the tone. This might sound counterproductive, nevertheless it helps with getting AI to put in writing code that aligns higher with what you want in your software.

Begin by constructing a few options manually. In case you are constructing an API, implement one full endpoint your self with all of the patterns you need: dependency injection, correct error dealing with, database entry, and validation. This turns into the reference implementation.

Say you write this primary endpoint manually:

from fastapi import APIRouter, Relies upon, HTTPException
from sqlalchemy.orm import Session

router = APIRouter()

# Assume get_db and Person mannequin are outlined elsewhere
async def get_user(user_id: int, db: Session = Relies upon(get_db)):
    consumer = db.question(Person).filter(Person.id == user_id).first()
    if not consumer:
        elevate HTTPException(status_code=404, element="Person not discovered")
    return consumer

 

When AI sees this sample, it understands how we deal with dependencies, how we question databases, and the way we deal with lacking information.

The identical applies to your venture construction. Create your directories, arrange your imports, and configure your testing framework. AI shouldn’t be making these architectural choices.

 

Making Python’s Sort System Do the Heavy Lifting

 
Python’s dynamic typing is versatile, however that flexibility turns into a legal responsibility when AI is writing your code. Make kind hints important guardrails as a substitute of a nice-to-have in your software code.

Strict typing catches AI errors earlier than they attain manufacturing. If you require kind hints on each perform signature and run mypy in strict mode, the AI can not take shortcuts. It can not return ambiguous sorts or settle for parameters that is likely to be strings or is likely to be lists.

Extra importantly, strict sorts pressure higher design. For instance, an AI agent making an attempt to put in writing a perform that accepts information: dict could make many assumptions about what’s in that dictionary. Nevertheless, an AI agent writing a perform that accepts information: UserCreateRequest the place UserCreateRequest is a Pydantic mannequin has precisely one interpretation.

# This constrains AI to put in writing right code
from pydantic import BaseModel, EmailStr

class UserCreateRequest(BaseModel):
    identify: str
    e-mail: EmailStr
    age: int

class UserResponse(BaseModel):
    id: int
    identify: str
    e-mail: EmailStr

def process_user(information: UserCreateRequest) -> UserResponse:
    move

# Moderately than this
def process_user(information: dict) -> dict:
    move

 

Use libraries that implement contracts: SQLAlchemy 2.0 with type-checked fashions and FastAPI with response fashions are glorious selections. These aren’t simply good practices; they’re constraints that maintain AI on monitor.

Set mypy to strict mode and make passing kind checks non-negotiable. When AI generates code that fails kind checking, it is going to iterate till it passes. This automated suggestions loop produces higher code than any quantity of immediate engineering.

 

Creating Documentation to Information AI

 
Most tasks have documentation that builders ignore. For AI brokers, you want documentation they really use — like a README.md file with pointers. This implies a single file with clear, particular guidelines.

Create a CLAUDE.md or AGENTS.md file at your venture root. Don’t make it too lengthy. Concentrate on what is exclusive about your venture reasonably than normal Python greatest practices.

Your AI pointers ought to specify:

  • Venture construction and the place several types of code belong
  • Which libraries to make use of for frequent duties
  • Particular patterns to observe (level to instance recordsdata)
  • Specific forbidden patterns
  • Testing necessities

Right here is an instance AGENTS.md file:

# Venture Tips

## Construction
/src/api - FastAPI routers
/src/providers - enterprise logic
/src/fashions - SQLAlchemy fashions
/src/schemas - Pydantic fashions

## Patterns
- All providers inherit from BaseService (see src/providers/base.py)
- All database entry goes by repository sample (see src/repositories/)
- Use dependency injection for all exterior dependencies

## Requirements
- Sort hints on all capabilities
- Docstrings utilizing Google type
- Capabilities underneath 50 strains
- Run `mypy --strict` and `ruff verify` earlier than committing

## By no means
- No naked besides clauses
- No kind: ignore feedback
- No mutable default arguments
- No world state

 

The secret is being particular. Don’t merely say “observe greatest practices.” Level to the precise file that demonstrates the sample. Don’t solely say “deal with errors correctly;” present the error dealing with sample you need.

 

Writing Prompts That Level to Examples

 
Generic prompts produce generic code. Particular prompts that reference your present codebase produce extra maintainable code.

As a substitute of asking AI to “add authentication,” stroll it by the implementation with references to your patterns. Right here is an instance of such a immediate that factors to examples:

Implement JWT authentication in src/providers/auth_service.py. Observe the identical construction as UserService in src/providers/user_service.py. Use bcrypt for password hashing (already in necessities.txt).
Add authentication dependency in src/api/dependencies.py following the sample of get_db.
Create Pydantic schemas in src/schemas/auth.py much like consumer.py.
Add pytest checks in checks/test_auth_service.py utilizing fixtures from conftest.py.

 

Discover how each instruction factors to an present file or sample. You aren’t asking AI to construct out an structure; you might be asking it to use what it is advisable to a brand new characteristic.

When the AI generates code, evaluate it towards your patterns. Does it use the identical dependency injection method? Does it observe the identical error dealing with? Does it arrange imports the identical manner? If not, level out the discrepancy and ask it to align with the present sample.

 

Planning Earlier than Implementing

 
AI brokers can transfer quick, which may often make them much less helpful if pace comes on the expense of construction. Use plan mode or ask for an implementation plan earlier than any code will get written.

A planning step forces the AI to assume by dependencies and construction. It additionally offers you an opportunity to catch architectural issues — similar to round dependencies or redundant providers — earlier than they’re applied.

Ask for a plan that specifies:

  • Which recordsdata might be created or modified
  • What dependencies exist between parts
  • Which present patterns might be adopted
  • What checks are wanted

Evaluate this plan such as you would evaluate a design doc. Test that the AI understands your venture construction. Confirm it’s utilizing the fitting libraries and make sure it isn’t reinventing one thing that already exists.

If the plan seems good, let the AI execute it. If not, right the plan earlier than any code will get written. It’s simpler to repair a nasty plan than to repair dangerous code.

 

Asking AI to Write Checks That Really Take a look at

 
AI is nice and tremendous quick at writing checks. Nevertheless, AI shouldn’t be environment friendly at writing helpful checks except you might be particular about what “helpful” means.

Default AI check conduct is to check the glad path and nothing else. You get checks that confirm the code works when all the pieces goes proper, which is strictly when you don’t want checks.

Specify your testing necessities explicitly. For each characteristic, require:

  • Joyful path check
  • Validation error checks to verify what occurs with invalid enter
  • Edge case checks for empty values, None, boundary situations, and extra
  • Error dealing with checks for database failures, exterior service failures, and the like

Level AI to your present check recordsdata as examples. When you’ve got good check patterns already, AI will write helpful checks, too. In the event you do not need good checks but, write just a few your self first.

 

Validating Output Systematically

 
After AI generates code, don’t simply verify if it runs. Run it by a guidelines.

Your validation guidelines ought to embody questions like the next:

  • Does it move mypy strict mode
  • Does it observe patterns from present code
  • Are all capabilities underneath 50 strains
  • Do checks cowl edge circumstances and errors
  • Are there kind hints on all capabilities
  • Does it use the required libraries accurately

Automate what you possibly can. Arrange pre-commit hooks that run mypy, Ruff, and pytest. If AI-generated code fails these checks, it doesn’t get dedicated.

For what you can’t automate, you’ll spot frequent anti-patterns after reviewing sufficient AI code — similar to capabilities that do an excessive amount of, error dealing with that swallows exceptions, or validation logic blended with enterprise logic.

 

Implementing a Sensible Workflow

 
Allow us to now put collectively all the pieces we’ve got mentioned to date.

You begin a brand new venture. You spend time establishing the construction, selecting and putting in libraries, and writing a few instance options. You create CLAUDE.md together with your pointers and write particular Pydantic fashions.

Now you ask AI to implement a brand new characteristic. You write an in depth immediate pointing to your examples. AI generates a plan. You evaluate and approve it. AI writes the code. You run kind checking and checks. Every little thing passes. You evaluate the code towards your patterns. It matches. You commit.

Complete time from immediate to commit could solely be round quarter-hour for a characteristic that will have taken you an hour to put in writing manually. However extra importantly, the code you get is less complicated to take care of — it follows the patterns you established.

The following characteristic goes sooner as a result of AI has extra examples to be taught from. The code turns into extra constant over time as a result of each new characteristic reinforces the present patterns.

 

Wrapping Up

 
With AI coding instruments proving tremendous helpful, your job as a developer or an information skilled is altering. You at the moment are spending much less time writing code and extra time on:

  • Designing techniques and selecting architectures
  • Creating reference implementations of patterns
  • Writing constraints and pointers
  • Reviewing AI output and sustaining the standard bar

The talent that issues most shouldn’t be writing code sooner. Moderately, it’s designing techniques that constrain AI to put in writing maintainable code. It’s understanding which practices scale and which create technical debt. I hope you discovered this text useful even when you don’t use Python as your programming language of selection. Tell us what else you assume we will do to maintain AI-generated Python code maintainable. Preserve exploring!
 
 

Bala Priya C is a developer and technical author from India. She likes working on the intersection of math, programming, information science, and content material creation. Her areas of curiosity and experience embody DevOps, information science, and pure language processing. She enjoys studying, writing, coding, and low! Presently, she’s engaged on studying and sharing her data with the developer group by authoring tutorials, how-to guides, opinion items, and extra. Bala additionally creates partaking useful resource overviews and coding tutorials.


RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments