{"id":5123,"date":"2026-10-25T23:32:33","date_gmt":"2026-10-25T22:32:33","guid":{"rendered":"https:\/\/gokhan-gokalp.com\/?p=5123"},"modified":"2026-10-25T23:36:12","modified_gmt":"2026-10-25T22:36:12","slug":"keeping-specs-and-shared-understanding-aligned-at-ai-speed","status":"publish","type":"post","link":"https:\/\/gokhan-gokalp.com\/tr\/keeping-specs-and-shared-understanding-aligned-at-ai-speed\/","title":{"rendered":"Keeping Specs and Shared Understanding Aligned at AI Speed"},"content":{"rendered":"\r\n<p class=\"wp-block-paragraph\" data-lfile-container=\"085e23cd-6eb7-45e9-8845-9afd88500a96\" data-pm-slice=\"1 1 []\">With <strong>AI-assisted engineering<\/strong>, we engineers are moving faster and changes are getting shipped faster. This is also true for my own daily work. But I must say, the work surrounding those changes doesn&#8217;t really get smaller. Part of it simply moves somewhere else.. I have always believed that complexity never goes away, it just moves to a different place&#8230; Because of this speed, we can end up with more pull requests <strong>waiting for review<\/strong>, changes that take <strong>longer to understand<\/strong> and a domain that keeps evolving faster than <strong>we can keep up with<\/strong>.<\/p>\r\n<p data-lfile-container=\"085e23cd-6eb7-45e9-8845-9afd88500a96\" data-pm-slice=\"1 1 []\">I think this also raises a question that many organizations will have to answer sooner or later. How do engineers stay up to date when things change this frequently?<\/p>\r\n<p data-lfile-container=\"085e23cd-6eb7-45e9-8845-9afd88500a96\" data-pm-slice=\"1 1 []\">In this article, I want to share a small practice I am trying to follow, at least for myself and my team, to keep our <em>OpenSpec<\/em> specifications up to date as a source of truth and help the team <strong>absorb changes<\/strong> without having to read every merged <em>PR<\/em>.<\/p>\r\n<h1 id=\"where-the-sdd-article-left-off\" data-lfile-container=\"085e23cd-6eb7-45e9-8845-9afd88500a96\" data-pm-slice=\"1 1 []\">Where the SDD Article Left Off<\/h1>\r\n<p data-lfile-container=\"085e23cd-6eb7-45e9-8845-9afd88500a96\" data-pm-slice=\"1 1 []\">In my <em><a href=\"https:\/\/gokhan-gokalp.com\/from-ai-conversations-to-durable-engineering-what-spec-driven-development-changed-in-my-workflow\/\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">previous article<\/a><\/em>, I shared how <strong>Spec-Driven Development<\/strong> (SDD) with <em>OpenSpec<\/em> changed my workflow and how the specifications started becoming the shared context for both engineers and agents. Once a change is archived, its delta becomes part of the main specs. So at least in theory, the specs always describe what the system does and developers can keep their eyes on them to stay up to date.<\/p>\r\n<p data-lfile-container=\"085e23cd-6eb7-45e9-8845-9afd88500a96\" data-pm-slice=\"1 1 []\">In practice, not every change goes through the <em>SDD<\/em> ritual. As I also mentioned in that article, a tiny and obvious fix doesn&#8217;t need a proposal, a design and tasks. Hotfixes are done under time pressure. Sometimes an agent implements something slightly differently than the spec and the review doesn&#8217;t catch it.<\/p>\r\n<p data-lfile-container=\"085e23cd-6eb7-45e9-8845-9afd88500a96\" data-pm-slice=\"1 1 []\">Each of these is fine on its own. But over time, the specs start describing a system that doesn&#8217;t fully exist anymore.<\/p>\r\n<p data-lfile-container=\"085e23cd-6eb7-45e9-8845-9afd88500a96\" data-pm-slice=\"1 1 []\">I think this matters more in the <em>AI<\/em> era for a couple of reasons. The team relies on these specs to <strong>understand the domain<\/strong> and the agents rely on them too. In my case, I also have reusable agent skills that use the accepted specs as their reference context when they help other teams build on top of the platform. So a stale spec doesn&#8217;t only <strong>mislead a developer<\/strong>, it also <strong>misleads every agent<\/strong> built on top of it.<\/p>\r\n<p data-lfile-container=\"085e23cd-6eb7-45e9-8845-9afd88500a96\" data-pm-slice=\"1 1 []\">And this goes beyond the specs. When code <strong>changes faster than people&#8217;s mental models<\/strong>, teams slowly lose track of what the system actually does. Nobody notices it on a single <em>PR<\/em>, it just builds up over time as a gap in the team&#8217;s <strong>shared understanding<\/strong>.<\/p>\r\n<h1 id=\"admission-and-reconciliation\" data-lfile-container=\"085e23cd-6eb7-45e9-8845-9afd88500a96\" data-pm-slice=\"1 1 []\">Keeping Specs in Sync at the PR<\/h1>\r\n<p data-lfile-container=\"085e23cd-6eb7-45e9-8845-9afd88500a96\" data-pm-slice=\"1 1 []\">In my experience, the main mechanism should be a <strong>domain guardrail check<\/strong> on every <em>PR<\/em>. It is backed by the archived specs, so it knows what each capability is supposed to do. When a change touches a capability that has a spec, the agent checks whether the change affects the behavior described in that spec and whether a spec delta comes with it. If not, it comments on the <em>PR<\/em> with the evidence, which requirement is affected and why. What actually blocks the merge stays a clear, deterministic rule.<\/p>\r\n<div>\r\n<div>This also touches the other aspect I mentioned. Since a spec delta has to come with the change, the reviewers who are already in the <em>PR<\/em> read the intended behavior change in plain words, not only in the code. But I would say, that visibility is limited to the people involved in the PR.\u00a0The rest of the team still never sees it.<\/div>\r\n<\/div>\r\n<div>\r\n<div>\u00a0<\/div>\r\n<div>\r\n<div>\r\n<div>This is where I think an additional mechanism might help, although it is still more of a hypothesis than something I have experienced. Change digests are a familiar practice, so I think a weekly one for behavior changes could work. Instead of expecting everyone to track updates as they happen, a short summary built from the specs archived that week could be posted in the team&#8217;s channel, explaining what changed and, more importantly, what the system does differently as a result.<\/div>\r\n<br \/>\r\n<div>Because the specs remain the source of truth, people wouldn&#8217;t have to wait for those updates either. If a question comes up, they could go straight to the spec or ask an agent that relies on the same specifications. The digest simply makes those changes easier to <strong>discover<\/strong>.<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div>\u00a0<\/div>\r\n<div><em><a href=\"https:\/\/margaretstorey.com\/blog\/2026\/02\/09\/cognitive-debt\/\" target=\"_blank\" rel=\"noopener\">Margaret Storey<\/a><\/em> describes this broader challenge as <strong>cognitive debt<\/strong>. The code can stay clean and the builds can stay green, while the team&#8217;s shared understanding of the system quietly fades. Keeping specifications synchronized with implementation becomes more than a documentation exercise. It becomes a way of preserving organizational knowledge.<\/div>\r\n<div>\r\n<div>\r\n<div><br \/>\r\n<div>That said, a digest can&#8217;t replace real understanding, and self-service only works when the underlying specs are accurate. That&#8217;s exactly why I think the <em>PR<\/em> check is so important.<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<h1 data-lfile-container=\"085e23cd-6eb7-45e9-8845-9afd88500a96\" data-pm-slice=\"1 1 []\">\u00a0<\/h1>\r\n<h1 data-lfile-container=\"085e23cd-6eb7-45e9-8845-9afd88500a96\" data-pm-slice=\"1 1 []\">So, Let&#8217;s Build a Small <em>PoC<\/em><\/h1>\r\n<p data-lfile-container=\"085e23cd-6eb7-45e9-8845-9afd88500a96\" data-pm-slice=\"1 1 []\">To keep things simple, the <em>PoC<\/em> is a <em>GitHub Actions<\/em> workflow that runs on every <em>PR<\/em> in a single repository. I also didn&#8217;t want to build a new sample project just for this, so I will reuse the product search agent from my <em><a href=\"https:\/\/gokhan-gokalp.com\/building-an-ai-agent-in-net-deterministic-routing-and-intelligent-search-with-microsoft-agent-framework\" target=\"_blank\" rel=\"noopener\">previous article<\/a><\/em>, where I built a <em>PoC<\/em> with <em>Microsoft Agent Framework<\/em>.<\/p>\r\n<div>\r\n<div>The domain guardrail check needs something to compare the code with, so to demonstrate the idea, I placed a baseline <em>OpenSpec<\/em> spec in that <em><a href=\"https:\/\/github.com\/GokGokalp\/ai-agent-implementation-in-dotnet\/blob\/main\/openspec\/specs\/product-search\/spec.md\" target=\"_blank\" rel=\"noopener\">repository<\/a><\/em>. It describes the current business behavior of the search agent, like how it searches the catalog and how many products it returns.<\/div>\r\n<\/div>\r\n<div>\r\n<div>\u00a0<\/div>\r\n<div>For the model, I am using<em> GPT-6 Luna<\/em> hosted on <em><strong>Microsoft Foundry<\/strong><\/em>. A smaller reasoning model is enough for this job, since the task is quite narrow. The model only sees the <em>PR<\/em> diff and the handful of specs relevant to it, then evaluates whether the change still agrees with them. That also lets the check run efficiently on every <em>PR<\/em>.<\/div>\r\n<\/div>\r\n<div>\r\n<div>\u00a0<\/div>\r\n<div>The workflow authenticates with <em>GitHub OIDC<\/em> through a federated credential in <em>Microsoft Entra ID<\/em> and calls the model through<em> Azure API Management<\/em> as an <strong><em>AI gateway<\/em><\/strong> which gives me a single place for authentication and token limits. I won&#8217;t go into the details of this setup here. Instead, I included the whole setup as <em>Bicep<\/em> templates in the <em><a href=\"https:\/\/github.com\/GokGokalp\/ai-agent-implementation-in-dotnet\/tree\/main\/Infrastructure\" target=\"_blank\" rel=\"noopener\">Infrastructure<\/a><\/em> folder of the same repository, so you can run and experiment with it locally.<\/div>\r\n<\/div>\r\n<div>\u00a0<\/div>\r\n<div>\r\n<div>\r\n<div>Now that we have the idea and the setup, let&#8217;s see what actually happens when a <em>PR<\/em> is opened. I tried to keep the design simple. It is basically three steps: <strong>collect the facts<\/strong>, <strong>let the model judge<\/strong>, then <strong>verify the result and decide<\/strong>.<\/div>\r\n<\/div>\r\n<\/div>\r\n<div>\u00a0<\/div>\r\n<div><a href=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2026\/10\/how-the-check-works.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-5132 lazyload\" data-src=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2026\/10\/how-the-check-works.png\" alt=\"\" width=\"1372\" height=\"276\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2026\/10\/how-the-check-works.png 1372w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2026\/10\/how-the-check-works-300x60.png 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2026\/10\/how-the-check-works-1024x206.png 1024w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2026\/10\/how-the-check-works-768x154.png 768w\" data-sizes=\"(max-width: 1372px) 100vw, 1372px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1372px; --smush-placeholder-aspect-ratio: 1372\/276;\" \/><\/a><\/div>\r\n<div>\r\n<div>\r\n<div>Let&#8217;s have a look at what the <em><a href=\"https:\/\/github.com\/GokGokalp\/ai-agent-implementation-in-dotnet\/blob\/main\/.github\/workflows\/spec-guardrail.yml\" target=\"_blank\" rel=\"noopener\">workflow<\/a><\/em> looks like.<\/div>\r\n<\/div>\r\n<div>\r\n<pre>name: spec-guardrail\r\n\r\non:\r\n  pull_request:\r\n    types: [opened, synchronize, reopened, labeled, unlabeled]\r\n    paths: [\"Program.cs\", \"Executors\/**\", \"Tools\/**\", \"Prompts\/**\", \"Models\/**\", \"Data\/**\"]\r\n\r\npermissions:\r\n  id-token: write\r\n  contents: read\r\n  pull-requests: write\r\n  statuses: write\r\n\r\njobs:\r\n  check:\r\n    runs-on: ubuntu-latest\r\n    steps:\r\n      - uses: actions\/checkout@v7\r\n        with:\r\n          ref: ${{ github.event.pull_request.head.sha }}\r\n          fetch-depth: 0\r\n\r\n      - uses: azure\/login@v3\r\n        with:\r\n          client-id: ${{ vars.AZURE_CLIENT_ID }}\r\n          tenant-id: ${{ vars.AZURE_TENANT_ID }}\r\n          allow-no-subscriptions: true\r\n\r\n      - name: Get a token for the AI gateway\r\n        env:\r\n          APIM_AUDIENCE: ${{ vars.APIM_AUDIENCE }}\r\n        run: |\r\n          TOKEN=$(az account get-access-token --resource \"$APIM_AUDIENCE\" --query accessToken -o tsv)\r\n          echo \"::add-mask::$TOKEN\"\r\n          echo \"APIM_TOKEN=$TOKEN\" &gt;&gt; \"$GITHUB_ENV\"\r\n\r\n      - name: Run the domain guardrail check\r\n        run: python3 .github\/spec-guardrail\/check.py\r\n        env:\r\n          BASE_SHA: ${{ github.event.pull_request.base.sha }}\r\n          HEAD_SHA: ${{ github.event.pull_request.head.sha }}\r\n          PR_NUMBER: ${{ github.event.pull_request.number }}\r\n          REPO: ${{ github.repository }}\r\n          GH_TOKEN: ${{ github.token }}\r\n          APIM_ENDPOINT: ${{ vars.APIM_ENDPOINT }}\r\n          MODEL: ${{ vars.SPEC_GUARDRAIL_MODEL || 'gpt-6-luna' }}\r\n          SRC_PATHS: \"Program.cs Executors Tools Prompts Models Data\"<\/pre>\r\n<\/div>\r\n<\/div>\r\n<div>\r\n<div>\r\n<div>\r\n<div>The workflow only runs when a <em>PR<\/em> touches the paths where behavior lives. The &#8220;<em>labeled<\/em>&#8221; and &#8220;<em>unlabeled<\/em>&#8221; types make the check run again when the override label changes, which we will get to later.<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<div>\u00a0<\/div>\r\n<div>\r\n<div>\r\n<div>The job checks out the <em>PR<\/em>, signs in with the federated identity from the infrastructure part, gets a token for the <em>AI<\/em> gateway and runs a small Python <em><a href=\"https:\/\/github.com\/GokGokalp\/ai-agent-implementation-in-dotnet\/blob\/main\/.github\/spec-guardrail\/check.py\" target=\"_blank\" rel=\"noopener\">script<\/a><\/em>, where I simply encoded the logic of the domain guardrail check.<\/div>\r\n<\/div>\r\n<\/div>\r\n<div>\r\n<div>\u00a0<\/div>\r\n<div>The script does a few things in order. It diffs the base and head commits for the watched paths and looks for a spec delta in the <em>PR<\/em>. It then asks the model, through the <em>AI<\/em> gateway, whether the change still agrees with the relevant specs. To do that, it uses two small prompts stored in the prompts <em><a href=\"https:\/\/github.com\/GokGokalp\/ai-agent-implementation-in-dotnet\/tree\/main\/.github\/spec-guardrail\/prompts\" target=\"_blank\" rel=\"noopener\">folder<\/a><\/em>: one to identify the relevant specs and another to compare the code against them. The model can only return one of four outcomes: <em>nothing changed<\/em>, <em>the code contradicts a requirement<\/em>, <em>it introduces behavior not covered by a spec<\/em>, or <em>it cannot determine the impact<\/em>.<\/div>\r\n<\/div>\r\n<div>\r\n<div>\r\n<div>\u00a0<\/div>\r\n<div>It then verifies that every finding comes with evidence from the diff and turns the verdict into a commit status and a <em>PR<\/em> comment. <strong>The model never becomes the source of truth.<\/strong> The specs remain the source of truth, while the model acts as an automated reviewer that helps enforce them.<\/div>\r\n<\/div>\r\n<div>\u00a0<\/div>\r\n<div>I won&#8217;t spend much time on the implementation details here. The script is intentionally small and straightforward, and you can find the full source in the repository.<\/div>\r\n<div>\u00a0<\/div>\r\n<div>So, let&#8217;s have a look at the workflow in action.<\/div>\r\n<\/div>\r\n<div>\u00a0<\/div>\r\n<div>\r\n<div>\r\n<h1>Seeing It In Action<\/h1>\r\n<\/div>\r\n<\/div>\r\n<div>\u00a0<\/div>\r\n<div>\r\n<div>I prepared two <em>PRs<\/em>. The first one is a plain refactor. I only renamed a variable and didn&#8217;t touch any spec. Nothing observable changes, so the check passes and leaves a short comment saying &#8220;<em>Spec guardrail check passed.<\/em>&#8221; I wanted a comment even on a pass, so the team can see that the check actually ran and why it passed.<\/div>\r\n<div><a href=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2026\/10\/domain-guardrail-check-1.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-5135 lazyload\" data-src=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2026\/10\/domain-guardrail-check-1.jpg\" alt=\"\" width=\"1112\" height=\"792\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2026\/10\/domain-guardrail-check-1.jpg 1112w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2026\/10\/domain-guardrail-check-1-300x214.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2026\/10\/domain-guardrail-check-1-1024x729.jpg 1024w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2026\/10\/domain-guardrail-check-1-768x547.jpg 768w\" data-sizes=\"(max-width: 1112px) 100vw, 1112px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1112px; --smush-placeholder-aspect-ratio: 1112\/792;\" \/><\/a><\/div>\r\n<\/div>\r\n<div>\r\n<div>\r\n<div>The second one changes behavior. I changed the number of products the search returns, from &#8220;<em>Size = 5<\/em>&#8221; to &#8220;<em>Size = 10<\/em>&#8220;. The baseline spec has a requirement called &#8220;<em>Bounded search results<\/em>&#8220;, which says each search returns &#8220;<em>at most 5\u00a0products<\/em>&#8220;. As we can see, the status fails. It points to the requirement, quotes the changed line from the diff, and explains why the implementation no longer matches the spec.<\/div>\r\n<\/div>\r\n<\/div>\r\n<div><a href=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2026\/10\/domain-guardrail-check-2.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-5136 lazyload\" data-src=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2026\/10\/domain-guardrail-check-2.jpg\" alt=\"\" width=\"1102\" height=\"1077\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2026\/10\/domain-guardrail-check-2.jpg 1102w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2026\/10\/domain-guardrail-check-2-300x293.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2026\/10\/domain-guardrail-check-2-1024x1001.jpg 1024w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2026\/10\/domain-guardrail-check-2-768x751.jpg 768w\" data-sizes=\"(max-width: 1102px) 100vw, 1102px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1102px; --smush-placeholder-aspect-ratio: 1102\/1077;\" \/><\/a><\/div>\r\n<div>\r\n<div>\r\n<div>At this point, the author has a clear choice. If the new limit is intended, they add a spec delta through the usual <em>SDD<\/em> flow, and the check then judges the code against that delta. If it was a mistake, they fix the code. If reviewers believe the finding is incorrect, they can explicitly override it with the label.<\/div>\r\n<\/div>\r\n<\/div>\r\n<div>\u00a0<\/div>\r\n<div>\r\n<div>\r\n<h1>Wrapping Up<\/h1>\r\n<\/div>\r\n<div>\r\n<div>\u00a0<\/div>\r\n<div>Going back to the question I started with, how do engineers stay up to date when things change this frequently? To be honest, I am still figuring that out myself. As <em>AI<\/em> continues to accelerate implementation, keeping up with the resulting changes increasingly feels like a team problem rather than an individual one. Reading every <em>PR<\/em> may be possible today, but it doesn&#8217;t feel like a strategy that scales.<\/div>\r\n<\/div>\r\n<\/div>\r\n<div>\u00a0<\/div>\r\n<div>What seems more sustainable is investing in mechanisms that preserve shared understanding. In my case, that starts with treating specs as a living source of truth and using automation to help keep them aligned with the code.<\/div>\r\n<div>\u00a0<\/div>\r\n<div>Of course, the check has its limits. It only sees the diff of the watched paths and the specs that are relevant to it, and the model can be wrong, so reviewers are still very much needed. But keeping specs aligned with implementation feels like a good place to start.<\/div>\r\n<div>\u00a0<\/div>\r\n<div>Source code: <em><a href=\"https:\/\/github.com\/GokGokalp\/ai-agent-implementation-in-dotnet\">GokGokalp\/ai-agent-implementation-in-dotnet: Sample AI Agent implementation with Microsoft Agent Framework<\/a><\/em><\/div>\r\n<div>\r\n<div>\u00a0<\/div>\r\n<\/div>\r\n<div>\r\n<div>\r\n<h2>References<\/h2>\r\n<blockquote>\r\n<div><em>https:\/\/www.thoughtworks.com\/radar\/techniques\/codebase-cognitive-debt<\/em><\/div>\r\n<div><em>https:\/\/margaretstorey.com\/blog\/2026\/02\/09\/cognitive-debt\/<\/em><\/div>\r\n<\/blockquote>\r\n<\/div>\r\n<\/div>\r\n","protected":false},"excerpt":{"rendered":"<p>With AI-assisted engineering, we engineers are moving faster and changes are getting shipped faster. This is also true for my own daily work. But I must say, the work surrounding those changes doesn&#8217;t really get smaller. Part of it simply moves somewhere else.. I have&#8230;<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"https:\/\/gokhan-gokalp.com\/tr\/keeping-specs-and-shared-understanding-aligned-at-ai-speed\/\">Devam\u0131n\u0131 okuyun<span class=\"screen-reader-text\">Keeping Specs and Shared Understanding Aligned at AI Speed<\/span><\/a><\/div>\n","protected":false},"author":1,"featured_media":5140,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[732,68,418],"tags":[764,749,763,765,760,761,766,768,767,756,754,762,755],"class_list":["post-5123","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai-agents","category-architectural","category-azure","tag-agentic-engineering","tag-ai","tag-ai-assisted-development","tag-ai-sdlc","tag-ai-speed","tag-cognitive-debt","tag-domain-guardrail","tag-github-workflows","tag-microsoft-foundry","tag-openspec","tag-sdd","tag-shared-understanding","tag-spec-driven-development","entry"],"translation":{"provider":"WPGlobus","version":"3.0.2","language":"tr","enabled_languages":["en","tr"],"languages":{"en":{"title":true,"content":true,"excerpt":false},"tr":{"title":false,"content":false,"excerpt":false}}},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Keeping Specs and Shared Understanding Aligned at AI Speed - G\u00f6khan G\u00f6kalp<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/gokhan-gokalp.com\/keeping-specs-and-shared-understanding-aligned-at-ai-speed\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Keeping Specs and Shared Understanding Aligned at AI Speed - G\u00f6khan G\u00f6kalp\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gokhan-gokalp.com\/keeping-specs-and-shared-understanding-aligned-at-ai-speed\/\" \/>\n<meta property=\"og:site_name\" content=\"G\u00f6khan G\u00f6kalp\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-25T22:32:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-25T22:36:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2026\/10\/specdrivendevelopment-cognitive-debt-gokhan-gokalp.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"675\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"G\u00f6khan G\u00f6kalp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"G\u00f6khan G\u00f6kalp\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/keeping-specs-and-shared-understanding-aligned-at-ai-speed\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/keeping-specs-and-shared-understanding-aligned-at-ai-speed\\\/\"},\"author\":{\"name\":\"G\u00f6khan G\u00f6kalp\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\"},\"headline\":\"Keeping Specs and Shared Understanding Aligned at AI Speed\",\"datePublished\":\"2026-10-25T22:32:33+00:00\",\"dateModified\":\"2026-10-25T22:36:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/keeping-specs-and-shared-understanding-aligned-at-ai-speed\\\/\"},\"wordCount\":1769,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\"},\"image\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/keeping-specs-and-shared-understanding-aligned-at-ai-speed\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/specdrivendevelopment-cognitive-debt-gokhan-gokalp.jpg\",\"keywords\":[\"agentic engineering\",\"ai\",\"ai assisted development\",\"ai sdlc\",\"ai speed\",\"cognitive debt\",\"domain guardrail\",\"github workflows\",\"microsoft foundry\",\"openspec\",\"sdd\",\"shared understanding\",\"spec driven development\"],\"articleSection\":[\"AI Agents\",\"Architectural\",\"Azure\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/gokhan-gokalp.com\\\/keeping-specs-and-shared-understanding-aligned-at-ai-speed\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/keeping-specs-and-shared-understanding-aligned-at-ai-speed\\\/\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/keeping-specs-and-shared-understanding-aligned-at-ai-speed\\\/\",\"name\":\"Keeping Specs and Shared Understanding Aligned at AI Speed - G\u00f6khan G\u00f6kalp\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/keeping-specs-and-shared-understanding-aligned-at-ai-speed\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/keeping-specs-and-shared-understanding-aligned-at-ai-speed\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/specdrivendevelopment-cognitive-debt-gokhan-gokalp.jpg\",\"datePublished\":\"2026-10-25T22:32:33+00:00\",\"dateModified\":\"2026-10-25T22:36:12+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/keeping-specs-and-shared-understanding-aligned-at-ai-speed\\\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/gokhan-gokalp.com\\\/keeping-specs-and-shared-understanding-aligned-at-ai-speed\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/keeping-specs-and-shared-understanding-aligned-at-ai-speed\\\/#primaryimage\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/specdrivendevelopment-cognitive-debt-gokhan-gokalp.jpg\",\"contentUrl\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/specdrivendevelopment-cognitive-debt-gokhan-gokalp.jpg\",\"width\":1200,\"height\":675},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/keeping-specs-and-shared-understanding-aligned-at-ai-speed\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/gokhan-gokalp.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Keeping Specs and Shared Understanding Aligned at AI Speed\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#website\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/\",\"name\":\"G\u00f6khan G\u00f6kalp\",\"description\":\"C# &amp; Python lover\",\"publisher\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/gokhan-gokalp.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\",\"name\":\"G\u00f6khan G\u00f6kalp\",\"pronouns\":\"he\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1792502697\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1792502697\",\"contentUrl\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1792502697\",\"caption\":\"G\u00f6khan G\u00f6kalp\"},\"logo\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1792502697\"},\"sameAs\":[\"https:\\\/\\\/gokhan-gokalp.com\"],\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/tr\\\/author\\\/gok-gokalp\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Keeping Specs and Shared Understanding Aligned at AI Speed - G\u00f6khan G\u00f6kalp","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/gokhan-gokalp.com\/keeping-specs-and-shared-understanding-aligned-at-ai-speed\/","og_locale":"tr_TR","og_type":"article","og_title":"Keeping Specs and Shared Understanding Aligned at AI Speed - G\u00f6khan G\u00f6kalp","og_url":"https:\/\/gokhan-gokalp.com\/keeping-specs-and-shared-understanding-aligned-at-ai-speed\/","og_site_name":"G\u00f6khan G\u00f6kalp","article_published_time":"2026-10-25T22:32:33+00:00","article_modified_time":"2026-10-25T22:36:12+00:00","og_image":[{"width":1200,"height":675,"url":"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2026\/10\/specdrivendevelopment-cognitive-debt-gokhan-gokalp.jpg","type":"image\/jpeg"}],"author":"G\u00f6khan G\u00f6kalp","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"G\u00f6khan G\u00f6kalp","Tahmini okuma s\u00fcresi":"9 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/gokhan-gokalp.com\/keeping-specs-and-shared-understanding-aligned-at-ai-speed\/#article","isPartOf":{"@id":"https:\/\/gokhan-gokalp.com\/keeping-specs-and-shared-understanding-aligned-at-ai-speed\/"},"author":{"name":"G\u00f6khan G\u00f6kalp","@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe"},"headline":"Keeping Specs and Shared Understanding Aligned at AI Speed","datePublished":"2026-10-25T22:32:33+00:00","dateModified":"2026-10-25T22:36:12+00:00","mainEntityOfPage":{"@id":"https:\/\/gokhan-gokalp.com\/keeping-specs-and-shared-understanding-aligned-at-ai-speed\/"},"wordCount":1769,"commentCount":0,"publisher":{"@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe"},"image":{"@id":"https:\/\/gokhan-gokalp.com\/keeping-specs-and-shared-understanding-aligned-at-ai-speed\/#primaryimage"},"thumbnailUrl":"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2026\/10\/specdrivendevelopment-cognitive-debt-gokhan-gokalp.jpg","keywords":["agentic engineering","ai","ai assisted development","ai sdlc","ai speed","cognitive debt","domain guardrail","github workflows","microsoft foundry","openspec","sdd","shared understanding","spec driven development"],"articleSection":["AI Agents","Architectural","Azure"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/gokhan-gokalp.com\/keeping-specs-and-shared-understanding-aligned-at-ai-speed\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/gokhan-gokalp.com\/keeping-specs-and-shared-understanding-aligned-at-ai-speed\/","url":"https:\/\/gokhan-gokalp.com\/keeping-specs-and-shared-understanding-aligned-at-ai-speed\/","name":"Keeping Specs and Shared Understanding Aligned at AI Speed - G\u00f6khan G\u00f6kalp","isPartOf":{"@id":"https:\/\/gokhan-gokalp.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/gokhan-gokalp.com\/keeping-specs-and-shared-understanding-aligned-at-ai-speed\/#primaryimage"},"image":{"@id":"https:\/\/gokhan-gokalp.com\/keeping-specs-and-shared-understanding-aligned-at-ai-speed\/#primaryimage"},"thumbnailUrl":"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2026\/10\/specdrivendevelopment-cognitive-debt-gokhan-gokalp.jpg","datePublished":"2026-10-25T22:32:33+00:00","dateModified":"2026-10-25T22:36:12+00:00","breadcrumb":{"@id":"https:\/\/gokhan-gokalp.com\/keeping-specs-and-shared-understanding-aligned-at-ai-speed\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gokhan-gokalp.com\/keeping-specs-and-shared-understanding-aligned-at-ai-speed\/"]}]},{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/gokhan-gokalp.com\/keeping-specs-and-shared-understanding-aligned-at-ai-speed\/#primaryimage","url":"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2026\/10\/specdrivendevelopment-cognitive-debt-gokhan-gokalp.jpg","contentUrl":"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2026\/10\/specdrivendevelopment-cognitive-debt-gokhan-gokalp.jpg","width":1200,"height":675},{"@type":"BreadcrumbList","@id":"https:\/\/gokhan-gokalp.com\/keeping-specs-and-shared-understanding-aligned-at-ai-speed\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/gokhan-gokalp.com\/"},{"@type":"ListItem","position":2,"name":"Keeping Specs and Shared Understanding Aligned at AI Speed"}]},{"@type":"WebSite","@id":"https:\/\/gokhan-gokalp.com\/#website","url":"https:\/\/gokhan-gokalp.com\/","name":"G\u00f6khan G\u00f6kalp","description":"C# &amp; Python lover","publisher":{"@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/gokhan-gokalp.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe","name":"G\u00f6khan G\u00f6kalp","pronouns":"he","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1792502697","url":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1792502697","contentUrl":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1792502697","caption":"G\u00f6khan G\u00f6kalp"},"logo":{"@id":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1792502697"},"sameAs":["https:\/\/gokhan-gokalp.com"],"url":"https:\/\/gokhan-gokalp.com\/tr\/author\/gok-gokalp\/"}]}},"_links":{"self":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts\/5123","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/comments?post=5123"}],"version-history":[{"count":13,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts\/5123\/revisions"}],"predecessor-version":[{"id":5141,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts\/5123\/revisions\/5141"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/media\/5140"}],"wp:attachment":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/media?parent=5123"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/categories?post=5123"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/tags?post=5123"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}