The most useful Python discussion this week is not “should developers use AI tools?” We have covered that. The better question is what happens when AI tools start generating working code that slowly damages the structure of a growing Python backend.
That is the real issue.
AI can make a greenfield project feel incredibly fast at the start. It can generate routes, schemas, models, tests, and helper functions in seconds. But once the codebase grows, the risk changes. The problem is no longer whether the code runs. The problem is whether it belongs where it was put.
For Python teams using FastAPI, Pydantic, SQLAlchemy, async database sessions, and service layers, this matters a lot.
The strongest Python engineers in 2026 will not just be the ones who can generate code quickly. They will be the ones who can keep architecture intact while moving quickly.
What architecture drift looks like
Architecture drift is what happens when a codebase slowly moves away from the structure the team intended.
It usually does not happen in one dramatic moment. That would be too convenient, and software prefers to ruin your life gradually.
It happens through small shortcuts:
business logic starts appearing inside route handlers
Pydantic schemas become mixed with domain logic
SQLAlchemy models start leaking into response objects
async database sessions get passed through too many layers
helper functions become dumping grounds
duplicated validation logic appears in multiple files
tests only check happy paths
generated code follows the nearest visible pattern, even if it is the wrong one
each PR technically works, but the system becomes harder to reason about
This is especially common when AI tools are used without strong boundaries. The output can be functional, but structurally wrong.
Why this matters for Python hiring
A lot of Python hiring still tests whether someone can build a feature.
That is fine, but it is incomplete.
The better hiring signal is whether someone can build a feature without weakening the codebase.
For a Senior, Lead, or Product Engineer, the question is not only:
“Can you ship this?”
It is:
“Can you ship this in a way the next engineer can understand, test, modify, and safely extend?”
That is the real skill.
The FastAPI example
FastAPI makes it very easy to build quickly. That is one of its strengths.
But the same speed can lead to messy boundaries if the team is not careful.
A weak structure might look like this:
route handler receives request
route handler validates extra logic
route handler opens database session
route handler queries SQLAlchemy models
route handler applies business rules
route handler formats response
route handler handles errors
route handler quietly becomes a 200-line beast
It works. Briefly. Then someone adds one more branch. Then another. Then a flag. Then a second database call. Then a background job. Then everyone pretends not to notice the file has become a crime scene with syntax highlighting.
A cleaner structure:
route handler handles HTTP concerns
Pydantic schemas handle request and response shape
service layer handles business logic
repository or data-access layer handles persistence
domain rules live outside API framework code
tests cover service behaviour separately from route behaviour
async database sessions are managed consistently
errors are mapped cleanly at the boundary
This is not about over-engineering. It is about protecting the codebase from becoming harder to change every week.
How to stop architecture drift
Here is a practical checklist for Python teams using AI-assisted development.
1) Keep route handlers thin
Route handlers should not contain deep business logic.
They should mostly:
accept input
call the right service
return a response
map errors to HTTP responses
If your route handler has multiple branches, complex calculations, and repeated database logic, it is probably doing too much.
2) Separate API schemas from domain models
Pydantic schemas are excellent for request and response validation. That does not mean they should become your entire business domain.
A useful boundary:
Pydantic models for API input and output
SQLAlchemy models for persistence
domain/service objects for business decisions
This avoids tying your core logic too tightly to whichever API shape you happen to expose today.
3) Hide database access behind clear functions or repositories
You do not always need a heavy repository pattern. Please, nobody form a committee.
But you do need consistency.
For example:
do not scatter raw queries everywhere
keep session handling predictable
avoid mixing transaction control across random modules
define where database reads and writes are allowed to happen
make retry and rollback behaviour explicit
This matters even more with async SQLAlchemy, where messy session handling can create subtle bugs.
4) Use AI for local changes, not architectural decisions
AI tools are very useful for:
drafting test cases
generating boilerplate
explaining unfamiliar code
suggesting refactors
writing migration checklists
creating small implementation options
But do not let AI decide your architecture by accident.
A better prompt is not:
“Add this feature.”
A better prompt is:
“Add this feature using the existing architecture. Keep route handlers thin. Put business logic in the service layer. Do not access the database outside the repository functions. Follow the pattern in these files. Keep the diff small.”
That is not “prompt engineering.” That is telling the machine not to redecorate your house with a hammer.
5) Add architecture rules to your repo
If your team uses AI tools, your repo should include rules for them.
Add a section to your README, CONTRIBUTING.md, or an AI instructions file covering:
where routes live
where schemas live
where business logic lives
how database access works
how tests should be structured
naming conventions
what should not be generated
maximum expected PR size
review expectations
AI tools follow visible patterns. If your rules are not visible, you are relying on luck. Bold strategy. Frequently rubbish.
6) Review structure, not just correctness
A PR can pass tests and still make the codebase worse.
Reviewers should ask:
does this logic belong here?
is the diff small enough to review properly?
are we duplicating a pattern?
are schemas, models, and services separated?
is database access consistent?
would this still be easy to change in 6 months?
has the AI copied a nearby bad pattern?
This is where senior engineers create leverage.
What candidates should do with this
If you are a Python developer interviewing right now, talk about architecture boundaries.
Do not just say:
“I use FastAPI, Pydantic, and SQLAlchemy.”
Say:
“I keep route handlers thin, put business logic into services, separate Pydantic schemas from persistence models, and keep database access consistent. When I use AI tools, I keep diffs small and give the tool clear architectural constraints.”
That is much stronger.
You can also build a portfolio project that proves this.
A good project:
FastAPI
Postgres
SQLAlchemy
Pydantic
async database sessions
service layer
background job or scheduled task
tests at route and service level
Docker
CI
README explaining architecture decisions
Add a README section called:
“How I kept the architecture clean”
Include:
why routes are thin
where business logic lives
how schemas and models are separated
how database sessions are managed
how AI tools were used
what you manually reviewed
what you would improve next
That is much better than another basic CRUD app.
What hiring managers should test
If you want to hire strong Python engineers, give them a small messy FastAPI example and ask them to review it.
The task:
“You inherit this endpoint. It works, but it mixes request handling, validation, business rules, and database access. Talk me through how you would restructure it.”
Score candidates on:
whether they spot boundary issues
whether they keep the solution simple
whether they understand service layers
whether they separate schemas from persistence
whether they mention tests
whether they think about async session handling
whether they avoid over-engineering
This is a much better signal than asking someone to recite framework trivia like we are all trapped inside a cursed coding bootcamp.
The hiring signal this week
The strongest Python engineers are not just fast.
They are fast and disciplined.
They can use AI tools without letting the architecture drift. They know where logic belongs. They keep code reviewable. They write tests around business behaviour. They understand that “it works” is not the same as “it is maintainable.”
For Python hiring in 2026, that is becoming a serious differentiator.
Quick Python watch
A few useful updates from the last 7 days:
FastAPI 0.139.0 was released on 1 July, adding support for dependencies in
app.frontend(), including use cases like automatic cookie authentication for frontend routesFastAPI 0.138.2 also landed on 29 June, with refactors around
app.frontend()uv recently hardened tar handling in package sources, meaning malformed or ambiguous source distributions may now be rejected where they were previously accepted
The practical takeaway: modern Python tooling is still moving quickly, but speed only helps if teams keep architecture, dependency hygiene, and security boundaries intact.
Job of the week
Full Stack AI Product Engineer
AI FinTech | Central London | Y Combinator-backed | £100k to £200k base + equity
A central London AI FinTech company backed by Y Combinator is hiring a Full Stack AI Product Engineer.
This is a high-ownership product engineering role for someone who wants to build AI-native financial products in a fast-moving startup environment.
They are looking for someone who can work across frontend, backend, product, and AI workflows, using AI tools to increase output without dropping engineering quality.
Package and setup
£100k to £200k base
Equity
5 days per week in office in central London
Y Combinator-backed AI FinTech company
Fast-moving Series A environment
High-ownership engineering culture
What they need
Strong full stack engineering experience
Product-minded approach to building
Ability to work closely with users and founders
Strong frontend and backend fundamentals
Comfortable using AI tools to elevate output
High agency, speed, and ownership
Interest in AI, FinTech, automation, and financial workflows
This is a strong opportunity for someone who wants to build at the centre of AI and finance, move quickly, and have real ownership in a company with serious early backing.
Outro
The best Python teams are not just asking whether AI can help engineers move faster. They are asking whether AI can help without damaging the shape of the codebase.
That is the difference.
Speed matters, but structure compounds. A messy feature is not a win if it slows every future feature down.
Open question for debate: what matters more in a senior Python engineer today, raw speed or the ability to protect architecture as the codebase grows?
Hiring? Contact
Josh Smith
LinkedIn: https://www.linkedin.com/in/python-recruitment/
Email: [email protected]
Phone: 01727 225 552
