{"id":4677,"date":"2025-07-23T15:56:55","date_gmt":"2025-07-23T15:56:55","guid":{"rendered":"https:\/\/www.aviator.co\/blog\/?p=4677"},"modified":"2025-10-09T13:04:02","modified_gmt":"2025-10-09T13:04:02","slug":"ai-developer-experience","status":"publish","type":"post","link":"https:\/\/www.aviator.co\/blog\/ai-developer-experience\/","title":{"rendered":"AI is Eating Developer Experience"},"content":{"rendered":"<figure class=\"wp-block-post-featured-image\"><img fetchpriority=\"high\" decoding=\"async\" width=\"2240\" height=\"1260\" src=\"https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2025\/07\/ai-developer-experience.png\" class=\"attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"AI Developer Experience\" style=\"object-fit:cover;\" srcset=\"https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2025\/07\/ai-developer-experience.png 2240w, https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2025\/07\/ai-developer-experience-300x169.png 300w, https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2025\/07\/ai-developer-experience-1024x576.png 1024w, https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2025\/07\/ai-developer-experience-768x432.png 768w, https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2025\/07\/ai-developer-experience-1536x864.png 1536w, https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2025\/07\/ai-developer-experience-2048x1152.png 2048w\" sizes=\"(max-width: 2240px) 100vw, 2240px\" \/><\/figure>\n\n\n<p>AI taking over writing code from developers is not making developers redundant, but it is fundamentally changing&nbsp;what it means to be a software developer.<\/p>\n\n\n\n<p>In the pre-AI era, the developer experience was about&nbsp;<a href=\"https:\/\/www.aviator.co\/blog\/platform-engineering-wont-save-you\/\" target=\"_blank\" rel=\"noopener\" title=\"\">polishing the tools<\/a>&nbsp;and&nbsp;<a href=\"https:\/\/www.aviator.co\/blog\/the-anti-developer-productivity-metrics\/\" target=\"_blank\" rel=\"noopener\" title=\"\">improving the workflows<\/a>. Developers got better IDEs, slick keyboard shortcuts, pretty dashboards, easy-to-use CLIs, self-service developer portals, smoother onboarding, and intuitive task management processes and tools.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Rise of AI Experience<\/h2>\n\n\n\n<p>The real DevEx problems \u2014 <a href=\"https:\/\/docs.aviator.co\/mergequeue\/concepts\/managing-flaky-tests-in-mergequeue\" target=\"_blank\" rel=\"noopener\" title=\"\">flaky tests<\/a>, tech debt, inconsistent environments, and stale documentation \u2014 are still around and will remain important, but the approach will become <strong>AI experience (AI-X)<\/strong>.<\/p>\n\n\n\n<p><strong>AI-X means focusing on:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Defining detailed business requirements.<\/li>\n\n\n\n<li>Designing modular and scalable architecture.<\/li>\n\n\n\n<li>Creating AI-friendly documentation.<\/li>\n\n\n\n<li>Using two-tier code reviews.<\/li>\n\n\n\n<li>Teaching AI constraints using pre-merge quality gates (e.g., linters and tests).<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2025\/07\/DevEx-AIX-table-1024x576.png\" alt=\"\" class=\"wp-image-4679\" srcset=\"https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2025\/07\/DevEx-AIX-table-1024x576.png 1024w, https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2025\/07\/DevEx-AIX-table-300x169.png 300w, https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2025\/07\/DevEx-AIX-table-768x432.png 768w, https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2025\/07\/DevEx-AIX-table-1536x864.png 1536w, https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2025\/07\/DevEx-AIX-table-2048x1152.png 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Defining Detailed Business Requirements<\/h2>\n\n\n\n<p>Now that writing code is no longer an edge, software engineers must have strong product thinking skills and deeply understand business problems. They have to clearly define features, explain them in plain English and break them down into small steps.<\/p>\n\n\n\n<p>With AI code generation, your requirements literally become prompts that determine the output. Vague requirements will produce vague code (not unlike&nbsp;<a href=\"https:\/\/en.wikipedia.org\/wiki\/Garbage_in,_garbage_out\" target=\"_blank\" rel=\"noopener\" title=\"\">garbage in, garbage out<\/a>).<\/p>\n\n\n\n<p>The context window is one of AI\u2019s biggest limitations. While that will improve over time, today, there\u2019s no way to provide an AI system with all possible business contexts. It is your responsibility to provide the \u201cappropriate context\u201d for any work.<\/p>\n\n\n\n<p>Unlike human developers who might express uncertainty (\u201cI think you want X, but let me confirm\u201d), AI models tend to be people pleasers and present every solution as definitive. They don\u2019t question enough and are overconfident about building anything without having enough context.<\/p>\n\n\n\n<p><strong>Example:<\/strong>&nbsp;Specify \u201cimplement user permissions,\u201d and AI might generate a role-based access control (RBAC) system with admin\/user roles. It won\u2019t ask whether you need fine-grained permissions, temporary access controls, or integration with existing identity providers. The generated code looks professional and complete, masking the fact that it solves the wrong problem.<\/p>\n\n\n\n<p>Effective AI requirements include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Specific input\/output formats and data types.<\/li>\n\n\n\n<li>Explicit business rules and edge cases.<\/li>\n\n\n\n<li>Integration constraints and existing system dependencies.<\/li>\n\n\n\n<li>Performance requirements and expected scale.<\/li>\n\n\n\n<li>Error handling and validation rules.<\/li>\n\n\n\n<li>Security and compliance requirements.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2025\/07\/AI-developers-meme-1024x576.png\" alt=\"\" class=\"wp-image-4680\" srcset=\"https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2025\/07\/AI-developers-meme-1024x576.png 1024w, https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2025\/07\/AI-developers-meme-300x169.png 300w, https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2025\/07\/AI-developers-meme-768x432.png 768w, https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2025\/07\/AI-developers-meme-1536x864.png 1536w, https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2025\/07\/AI-developers-meme-2048x1152.png 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Designing Modular and Scalable Architecture<\/h2>\n\n\n\n<p>AI is great at greenfield projects, but enterprise tech projects usually don\u2019t work that way. Most software engineering involves incremental improvements, which require understanding the dependencies and impact of a code change on other parts of the code. In a way, AI is good with localized changes but may not understand global architectures well.<\/p>\n\n\n\n<p>Therefore, developers must design an architecture that is modular, scalable, and makes such issues easily visible.<\/p>\n\n\n\n<p><strong>Example:<\/strong>&nbsp;It\u2019s important to have a clearly defined API spec and dependencies so that when a backward-incompatible change is made, all dependent services are also updated correctly.<\/p>\n\n\n\n<p>AI is also not great at making strategic trade-offs: performance vs. maintainability, consistency vs. availability, security vs. usability. Since AI tools don\u2019t understand business priorities, making the architectural trade-offs requires human judgment.<\/p>\n\n\n\n<p><strong>Example:<\/strong>&nbsp;AI generates a microservices architecture because you mentioned \u201cscalability\u201d in your requirements. But your team has three developers, limited DevOps expertise and moderate traffic. A well-designed monolith would be far more appropriate, but AI defaults to the pattern it sees most in training data, not what\u2019s right for your situation.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How To Design a Better Architecture for AI<\/h3>\n\n\n\n<p><strong>Define the constraints:<\/strong>&nbsp;AI needs explicit constraints to generate appropriate code. Architects define the technical standards, patterns, and boundaries that guide AI code generation.<\/p>\n\n\n\n<p><strong>Example:<\/strong>&nbsp;An architect establishes that all services must expose health-check endpoints, use structured logging, implement circuit breakers for external dependencies, and follow specific naming conventions. These constraints guide AI to generate code that fits the overall system design.<\/p>\n\n\n\n<p><strong>Create the integration layer:<\/strong>&nbsp;While AI can generate individual services, architects can design how those services communicate, share data, and coordinate behavior.<\/p>\n\n\n\n<p><strong>Example:<\/strong>&nbsp;An architect designs an event-driven architecture with specific message schemas and choreography patterns. AI then generates services that properly emit and consume events according to the established patterns.<\/p>\n\n\n\n<p><strong>Plan for evolution:<\/strong>&nbsp;AI generates code for current requirements without considering future needs. Architects think about how systems will change over time and design for extensibility.<\/p>\n\n\n\n<p><strong>Example:<\/strong>&nbsp;An architect designs a plugin architecture that allows new AI-generated components to be added without modifying core systems. The architectural framework enables rapid, AI-driven development while maintaining system coherence.<\/p>\n\n\n\n<p><strong>Ensure operational excellence:<\/strong>&nbsp;Architects design systems that can be monitored, debugged and maintained in production. They establish the observability, deployment and operational patterns that AI-generated code must follow.<\/p>\n\n\n\n<p>AI can still act as a sounding board to suggest ideas and explore various architectural strategies, but it eventually requires human judgment.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Creating AI-Friendly Documentation<\/h2>\n\n\n\n<p>Up-to-date documentation helps AI agents get the needed context to make accurate and efficient changes. The most common way an AI agent consumes documentation is via&nbsp;vector search, a method for retrieving information from a database based on semantic similarity.<\/p>\n\n\n\n<p>Vector search can be used as part of an internal AI workflow or as a&nbsp;Model Context Protocol (MCP)&nbsp;server to provide context to the large language model (LLM). In either case, the documentation has to be AI-friendly.<\/p>\n\n\n\n<p>To do so, create&nbsp;<strong>structured, context-rich documentation<\/strong>&nbsp;that goes beyond code comments to provide AI tools with the business logic, architectural constraints, and operational knowledge needed to generate appropriate code.<\/p>\n\n\n\n<p><strong>Key principle:<\/strong>&nbsp;Document the \u201cwhy\u201d and business context, not just the technical \u201chow.\u201d<\/p>\n\n\n\n<p><strong>Feature specification example:<\/strong>&nbsp;Instead of: \u201cBuild user authentication,\u201d document: \u201cUser authentication must support SSO for enterprise customers, require 2FA for admin roles, allow social login for consumer users, and maintain session state across mobile\/web platforms. Failed login attempts trigger progressive delays (1s, 5s, 30s) and lock accounts after 5 failures.\u201d<\/p>\n\n\n\n<p><strong>Architecture decision record example:<\/strong>&nbsp;Instead of: \u201cWe use microservices,\u201d document: \u201cADR-012: Choose microservices for order processing because we need independent scaling of inventory checks (high CPU) vs. payment processing (high I\/O), different teams own different services and we require fault isolation, so payment failures don\u2019t break inventory updates.\u201d<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"> Using Two-Tier Code Reviews<\/h2>\n\n\n\n<p>With AI generating so much code, developers will spend the majority of their time on&nbsp;<a href=\"https:\/\/www.aviator.co\/flexreview\" target=\"_blank\" rel=\"noopener\" title=\"\">code reviews<\/a>.<\/p>\n\n\n\n<p>Reviews must happen in two tiers:<\/p>\n\n\n\n<p><strong>The first review<\/strong>&nbsp;is a real-time review that happens as the \u201cauthor\u201d uses an AI tool in the IDE. During this review, the developer critically assesses what the AI suggests before accepting it. AI output can be deceptively confident and consistent in style, making it easy to overlook hidden assumptions or incorrect logic. Without careful, line-by-line scrutiny, developers risk shipping bugs or vulnerabilities that are harder to spot later.<\/p>\n\n\n\n<p>We need better workflows and tools to help developers handle this step effectively. For example, IDEs could highlight assumptions or prompt the developer to verify them. AI can assist by explaining its reasoning or flagging edge cases, but it\u2019s far from foolproof.<\/p>\n\n\n\n<p><strong>The second review<\/strong>&nbsp;is similar to the traditional code review done by a peer. Even with AI in the loop, human oversight remains critical. Peer reviews catch broader architectural issues, misunderstandings of business logic, and integration risks that AI might miss entirely.<\/p>\n\n\n\n<p>Code review is also the team\u2019s record-keeping function, ensuring shared understanding within the team, consistent standards, and knowledge transfer. In fact, as AI generates more boilerplate or routine code, human reviewers will need to focus more on design, correctness, and maintainability.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Teaching AI Constraints Using Pre-Merge Quality Gates<\/h2>\n\n\n\n<p>Transform linters, formatters, and testing frameworks from simple validators into contextual guides that teach AI about your system\u2019s patterns, constraints, and business logic.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Enhanced Linters<\/h3>\n\n\n\n<p>Create linting rules that enforce your specific design patterns and business constraints.<\/p>\n\n\n\n<p><strong>Example:<\/strong>&nbsp;A custom ESLint rule flags when new API endpoints don\u2019t include rate-limiting middleware, teaching AI that all endpoints need this protection.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Contextual Formatters<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Pattern-aware formatting:<\/strong>&nbsp;Configure formatters to enforce architectural consistency beyond just syntax.<\/li>\n\n\n\n<li><strong>Documentation integration:<\/strong>&nbsp;Format code to highlight documented patterns and relationships.<\/li>\n<\/ul>\n\n\n\n<p><strong>Example:<\/strong>&nbsp;A prettier configuration that enforces consistent import ordering (domain \u2192 infrastructure \u2192 external), so AI can learn your layered architecture from the code structure.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Intelligent Tests<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Behavior-driven test names:<\/strong>&nbsp;Write test descriptions that explain business scenarios, not just technical assertions.<\/li>\n\n\n\n<li><strong>Constraint documentation:<\/strong>&nbsp;Use tests to document business rules and edge cases that AI should understand.<\/li>\n<\/ul>\n\n\n\n<p><strong>Example 1: Business-aware test:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>test('premium_users_bypass_rate_limiting_but_still_get_logged_for_monitoring', () =&gt; {\n\/\/ Test teaches AI about user tiers AND monitoring requirements\n});<\/code><\/pre>\n\n\n\n<p><strong>Example 2: Architectural constraint test:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>test('all_external_api_calls_must_include_circuit_breaker_pattern', () =&gt; {\n  \/\/ Test enforces and teaches AI about resilience patterns\n});<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">AI-X: Shorten the Loop Without Losing Safety<\/h2>\n\n\n\n<p>The AI-X approach transforms your development tools into AI training systems that continuously reinforce your architectural decisions, business rules and quality standards. Developer experience was about \u201cmaking developers happy,\u201d while AI experience is about \u201cshortening the loop without loss of safety.\u201d<\/p>\n\n\n\n<p>AI will become more capable of handling mundane tasks like&nbsp;<a href=\"https:\/\/www.aviator.co\/blog\/solving-the-nasty-code-migration-problem-with-assisted-ai-agents\/\" target=\"_blank\" rel=\"noopener\" title=\"\">code migrations<\/a>&nbsp;and improving test coverage, but it will continue to need developers for better architecture designs and decision-making.<\/p>\n\n\n\n<p>This means building systems that tightly couple changes to feedback, making rollback paths and continuous integration and delivery core to developers\u2019 workflow, and designing for low-friction, high-trust automation.<\/p>\n\n\n\n<!-- Hardcoded CTA for Podcast signup -->\n<div style=\"position: relative; display: flex; align-items: center; background: #FFD966; padding: 20px 30px; border-radius: 10px; margin: 40px 0; justify-content: space-between; flex-wrap: wrap; overflow: hidden; max-width: 860px; box-shadow: 0px 4px 10px rgba(0,0,0,0.1);\">\n    <div style=\"flex: 1; z-index: 2; max-width: 500px;\">\n        <h2 style=\"margin: 0; color: #0C344B; font-size: 20px; font-weight: 600;\">DevEx Insights You Don&#8217;t Want to Miss<\/h2>\n        <p style=\"color: #333; font-size: 13px; margin-bottom: 15px;\">Get curated bi-weekly insights on developer experience, the evolution of platform engineering, and the role of AI in development from 400+ engineering leaders.<\/p>\n        <form id=\"hubspot-form\" action=\"https:\/\/forms.hubspot.com\/uploads\/form\/v2\/40144919\/c798e807-1c39-4d01-926c-7cbe462172ad\" method=\"POST\" style=\"display: flex; gap: 6px; align-items: center; max-width: 400px;\">\n            <input type=\"hidden\" name=\"hs_context\" value='{\"hutk\": \"{{contact.hs_context}}\"}'>\n            <input type=\"text\" name=\"First name\" placeholder=\"First name\" required style=\"padding: 8px; border: 1px solid #ccc; border-radius: 5px; width: 130px; font-size: 13px; background: white;\">\n            <input type=\"email\" name=\"email\" placeholder=\"Email\" required style=\"padding: 8px; border: 1px solid #ccc; border-radius: 5px; width: 333px; font-size: 13px; background: white;\">\n            <button type=\"Sign up\" id=\"submit-btn\" style=\"background: #5A87F0; color: white; border: none; padding: 8px 15px; border-radius: 5px; cursor: pointer; font-size: 13px; font-weight: 600; display: flex; align-items: center; justify-content: center; min-width: 75px;\">Sign up<\/button>\n        <\/form>\n        <p id=\"success-message\" style=\"display: none; color: #0C344B; font-size: 14px; font-weight: 400; margin-top: 10px;\">You&#8217;re in!<\/p>\n    <\/div>\n    <div style=\"position: absolute; top: 0; right: 0; width: 100%; height: 100%; background: linear-gradient(to bottom left, white 15%, #FFD966 45%); z-index: 1; pointer-events: none; clip-path: polygon(60% 0%, 100% 0%, 100% 100%, 70% 100%);\"><\/div>\n    <div style=\"max-width: 220px; z-index: 2; position: absolute; right: 10px; bottom: -25px;\">\n        <img decoding=\"async\" src=\"https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2025\/03\/aviator-hangar-dx-plane-logo-illustration-clear-min.png\" alt=\"Aviator Hangar DX Plane Illustration Logo\" style=\"max-width: 100%; height: auto; transform: scale(1.05);\">\n    <\/div>\n<\/div>\n\n<script>\n  document.getElementById(\"hubspot-form\").addEventListener(\"submit\", function(event) {\n    event.preventDefault(); \/\/ Prevent default submission behavior\n    \n    var form = this;\n    var formData = new FormData(form);\n    \n    fetch(form.action, {\n      method: \"POST\",\n      body: formData,\n      headers: {\n        \"Accept\": \"application\/json\"\n      }\n    }).then(response => {\n      if (response.ok) {\n        document.getElementById(\"submit-btn\").style.display = \"none\";\n        document.getElementById(\"success-message\").style.display = \"block\";\n      }\n    }).catch(error => console.error(\"Error:\", error));\n  });\n<\/script>\n\n\n\n<p><em>This article was originally published on <a href=\"https:\/\/thenewstack.io\/how-to-think-about-devex-when-ai-writes-the-code\/\" target=\"_blank\" rel=\"noopener\" title=\"\">The New Stack<\/a>.<\/em><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Developer experience was about making developers happy. AI experience is about shortening the loop without loss of safety.<\/p>\n","protected":false},"author":18,"featured_media":4678,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[54],"tags":[],"class_list":["post-4677","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-developer-experience"],"blocksy_meta":[],"acf":[],"aioseo_notices":[],"jetpack_featured_media_url":"https:\/\/www.aviator.co\/blog\/wp-content\/uploads\/2025\/07\/ai-developer-experience.png","post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/posts\/4677","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/users\/18"}],"replies":[{"embeddable":true,"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/comments?post=4677"}],"version-history":[{"count":4,"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/posts\/4677\/revisions"}],"predecessor-version":[{"id":5020,"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/posts\/4677\/revisions\/5020"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/media\/4678"}],"wp:attachment":[{"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/media?parent=4677"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/categories?post=4677"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.aviator.co\/blog\/wp-json\/wp\/v2\/tags?post=4677"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}