This blog post draws inspiration from guidelines found in AI coding setups like OpenAI Codex, Claude Code, and Cursor, though with different naming conventions. Readers are encouraged to consult official documentation for their preferred technology.
AI-assisted coding represents a fundamental paradigm shift. As developers, we must adapt our craft accordingly, embracing new priorities and workflows.
We now have access to an inexpensive crowd of talented junior engineers—AI agents—which means we should focus more on engineering and less on coding. We bear responsibility for helping these juniors succeed. This post outlines how to adapt your process to this new development landscape and “normalize” your repositories.
These AI junior engineers are surprisingly conventional, preferring well-established concepts and programming languages. They excel with Python more than Ruby or Rust.
Working with strict linting preferences and type systems is highly beneficial. Fortunately, the software engineering landscape hasn’t changed radically for popular applications like web apps. However, exercise extra caution when selecting a tech stack that incorporates cutting-edge technologies.
In this future, technical debt will manifest as incoherent projects. Code style should remain consistent throughout the repository and align with documentation. Architecture should follow uniform principles, as AIs benefit significantly from clean abstraction layers.
Most importantly, document the structures that create coherence.
Every project setup is inherently opinionated. In this new world, great software engineers should be acutely aware of their opinions.
Consider generating a template project and collecting your wisdom/opinions throughout your career.
Every repository needs a well-structured entry point document (typically in the root directory) that includes:
For monorepos, implement a hierarchical documentation approach:
Leverage Model Context Provision (MCP) integrations for each helpful technology to give the LLM proper context.
Since Git provides a text-based chronology of your repository, maintain a clean Git history with tags, meaningful commit descriptions, and ideally references to implemented tickets with excerpts. This approach greatly assists LLMs as they can seamlessly interpret this information.
Document when to run tests after implementing a feature. Document running migration auto-generate scripts and reviewing them after database changes.
Provide AI agents with clear process preferences about your expected working style, such as:
Improving our ability to control AI Agents will lead us toward clearly defining how we want architectures modeled.
This will create a state where common problems and paradigms are easily implemented with our preferred tools: databases, vector search, settings, CQRS/event stores, APIs, frontends, and user/app logic. The developer of tomorrow will be less a coder and more an architect, guiding AI to implement their vision efficiently and cohesively.