<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Syed Ibrahim</title>
    <description>The latest articles on DEV Community by Syed Ibrahim (@syed11).</description>
    <link>https://dev.to/syed11</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3803808%2F50471324-3099-4572-bd07-3d5560280700.png</url>
      <title>DEV Community: Syed Ibrahim</title>
      <link>https://dev.to/syed11</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/syed11"/>
    <language>en</language>
    <item>
      <title>Why Not Every AI Application Needs Vector Embeddings</title>
      <dc:creator>Syed Ibrahim</dc:creator>
      <pubDate>Wed, 15 Jul 2026 13:43:40 +0000</pubDate>
      <link>https://dev.to/syed11/why-not-every-ai-application-needs-vector-embeddings-417</link>
      <guid>https://dev.to/syed11/why-not-every-ai-application-needs-vector-embeddings-417</guid>
      <description>&lt;p&gt;&lt;em&gt;How building an AI chapter generator taught me to stop reaching for a vector database first.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When I started building my AI chapter generator, I spent hours researching vector databases. I was convinced I needed one.&lt;/p&gt;

&lt;p&gt;I didn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  The idea
&lt;/h2&gt;

&lt;p&gt;The project was simple on paper. A user uploads a long lecture video, the app transcribes it, figures out where the instructor moves from one topic to the next, and spits out timestamped chapters.&lt;/p&gt;

&lt;p&gt;Before I'd written a single line of the actual feature, my brain had already decided what the architecture should look like. Long text plus AI app equals: chunk it, embed it, store it, retrieve it. That's just the shape everyone's trained to see these days.&lt;/p&gt;

&lt;p&gt;So that's the road I went down. I spent an evening comparing Pinecone, Chroma and FAISS. I read through chunking strategies, fixed size chunks, overlapping windows, semantic chunking, all of it. I had a RAG pipeline half sketched out in my notes app.&lt;/p&gt;

&lt;p&gt;Then I stopped and asked myself something a lot more basic:&lt;/p&gt;

&lt;p&gt;What problem am I actually trying to solve?&lt;/p&gt;

&lt;p&gt;I didn't have a good answer. So I backed up and started over.&lt;/p&gt;

&lt;h2&gt;
  
  
  What embeddings actually do
&lt;/h2&gt;

&lt;p&gt;If you're newer to this stuff, here's the plain version.&lt;/p&gt;

&lt;p&gt;An embedding turns a piece of text into a list of numbers that captures what it means. Text with similar meaning ends up with similar numbers. That's really the whole trick behind it. It turns "how similar are these two ideas" into "how close are these two points," which is something a computer can check almost instantly, even across millions of documents.&lt;/p&gt;

&lt;p&gt;That's a genuinely useful trick, but notice what it's actually for. It's for finding things. If you've got 10,000 support articles and someone asks a question, you can't just feed all 10,000 into the model every time. It wouldn't fit, and even if it somehow did, it'd be painfully slow. Embeddings let you narrow that pile down to the handful of articles that are actually relevant, and only those get handed to the model.&lt;/p&gt;

&lt;p&gt;That narrowing down is retrieval. And retrieval turns out to be a different job than reasoning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Retrieval vs reasoning
&lt;/h2&gt;

&lt;p&gt;This is the part that took me a minute to actually get, and I think it's the bit most people gloss over.&lt;/p&gt;

&lt;p&gt;Embeddings solve retrieval. They're good at finding a needle in a haystack you can't fully read.&lt;/p&gt;

&lt;p&gt;LLMs handle reasoning. They think through whatever's in front of them.&lt;/p&gt;

&lt;p&gt;RAG is called Retrieval Augmented Generation because retrieval is just a preprocessing step that decides what the model gets to look at. It doesn't make the model reason any better once it's looking at the right thing. It just makes sure it's looking at the right thing in the first place.&lt;/p&gt;

&lt;p&gt;Which leads to an obvious question. What if the model already has the right thing?&lt;/p&gt;

&lt;p&gt;That was basically my situation. The whole transcript was already right there. Nothing was buried somewhere I needed to dig it out of. There was nothing to find. Just something to work through, in order.&lt;/p&gt;

&lt;h2&gt;
  
  
  But don't long transcripts still need chunking?
&lt;/h2&gt;

&lt;p&gt;Yes, and this tripped me up for a bit, so it's worth spelling out.&lt;/p&gt;

&lt;p&gt;A one hour lecture transcript is way too long to comfortably send in one model call. So you still have to split it up somehow. That part's unavoidable.&lt;/p&gt;

&lt;p&gt;But there are two different reasons you'd chunk something, and I'd been mushing them together in my head without realizing it.&lt;/p&gt;

&lt;p&gt;Chunking for retrieval splits text so you can search it. Each chunk gets embedded and scored against a query, and only the best matches get used.&lt;/p&gt;

&lt;p&gt;Chunking for context just splits text because of size limits. Every chunk still gets used, in order, nothing gets filtered out.&lt;/p&gt;

&lt;p&gt;I needed the second kind. Not "which piece is most relevant," but "here's the whole thing in pieces, go through all of it, in order." That doesn't need embeddings. It just needs a loop.&lt;/p&gt;

&lt;h2&gt;
  
  
  The moment it clicked
&lt;/h2&gt;

&lt;p&gt;Once I'd separated retrieval from reasoning in my head, and chunking to search from chunking to fit, things got a lot clearer fast.&lt;/p&gt;

&lt;p&gt;I asked myself how a person would do this task. Not an AI, an actual human sitting there watching the lecture.&lt;/p&gt;

&lt;p&gt;They wouldn't be scanning through looking for the paragraph most "similar" to some query, because there's no query. Nobody's asking a question. They'd just watch it from start to finish and notice, naturally, when the instructor wrapped up one idea and moved on to the next.&lt;/p&gt;

&lt;p&gt;That's when it actually clicked. Chapter generation is about sequence, not similarity.&lt;/p&gt;

&lt;p&gt;Embeddings answer "where in this pile does something like X show up." My problem was "where does this one, ordered thing change." Those aren't the same problem wearing different clothes. They're genuinely different problems, and no clever chunking-for-retrieval trick was going to fix that, because retrieval was never actually the job.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I thought I needed
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Transcript
   │
   ▼
Chunk for retrieval
   │
   ▼
Embed each chunk ──► Vector database
   │                         │
   │      (similarity search)│
   ▼                         ▼
        Query-relevant chunks
                │
                ▼
              LLM
                │
                ▼
            Chapters
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  What I actually built
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Transcript
   │
   ▼
Chunk sequentially (for size, not search)
   │
   ▼
LLM reads each chunk in order,
carrying forward a rolling summary
   │
   ▼
Flag topic transitions
   │
   ▼
Merge + align to natural pauses
   │
   ▼
Chapters
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same input, same output, half the pipeline.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I actually built
&lt;/h2&gt;

&lt;p&gt;Here's the workflow, roughly:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Transcribe the video.&lt;/li&gt;
&lt;li&gt;Split the transcript into sequential chunks of a few minutes each, keeping order and timestamps intact.&lt;/li&gt;
&lt;li&gt;Feed each chunk to the model along with a short rolling summary of everything before it, and ask it to flag where the topic shifts.&lt;/li&gt;
&lt;li&gt;Merge the transitions that land close together, and snap each boundary to the nearest natural pause so a chapter doesn't start mid sentence.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Step 3 is really the whole trick. Each chunk carries context forward from the ones before it. The model isn't staring at six disconnected fragments trying to guess how they relate, it's walking through the lecture the way a person would, carrying the thread as it goes. That continuity is what actually lets it notice "okay, this is where the topic changed." It's also exactly what a similarity search would throw away, since similarity search treats every chunk as its own isolated thing to be scored.&lt;/p&gt;

&lt;p&gt;No vector database, no embedding calls, no retrieval step.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real reason I dropped embeddings
&lt;/h2&gt;

&lt;p&gt;I could frame this as a story about cost or speed. Fewer moving parts, lower latency, no vector DB bill. Those were real benefits and I did get them. But that's not actually why I made the change, and leading with that would kind of miss the point.&lt;/p&gt;

&lt;p&gt;The real reason is simpler. Embeddings would have solved a problem I didn't have. My bottleneck was never "how do I find the relevant part of this transcript," because the whole transcript was the relevant part. Bolting retrieval on top wouldn't have made the output better, it would've just added machinery answering a question nobody was asking, while the actual question, where does the topic change, stayed exactly as unsolved as before.&lt;/p&gt;

&lt;p&gt;Cost and latency got better as a side effect of cutting something unnecessary. They weren't the reason it was unnecessary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Embeddings are still great, when you actually need retrieval
&lt;/h2&gt;

&lt;p&gt;None of this is an argument against embeddings. I still use them all the time, just for a different kind of problem.&lt;/p&gt;

&lt;p&gt;Say you're building a support bot on top of 10,000 help articles. Someone asks a question and there's no way to hand the model all 10,000 articles at once, it needs to find the handful that are actually relevant first. That's exactly the retrieval problem embeddings were built for, and it's a great use of a vector database there.&lt;/p&gt;

&lt;p&gt;The difference between that and my chapter generator isn't the amount of text involved, both had plenty. The difference is whether the model needs to search across a bunch of separate things, or read through one thing it already has in full.&lt;/p&gt;

&lt;p&gt;Needs retrieval: company docs, big knowledge bases, research paper libraries, product manuals, support article collections, long chat history archives.&lt;/p&gt;

&lt;p&gt;Doesn't need retrieval: summarizing a single document, translating text, classifying content, pulling structured data out of one file, reviewing a single codebase, generating chapters from one transcript.&lt;/p&gt;

&lt;p&gt;If the model already has everything it needs sitting in front of it, embeddings don't help it reason better. There's nothing to find, so there's nothing for retrieval to speed up.&lt;/p&gt;

&lt;h2&gt;
  
  
  A question worth stealing
&lt;/h2&gt;

&lt;p&gt;Before I add a vector database to anything now, I ask myself one thing, and it's worth stealing if you don't already ask it:&lt;/p&gt;

&lt;p&gt;Does my AI need to find information, or does it already have it?&lt;/p&gt;

&lt;p&gt;If it already has everything, embeddings won't make the answer any sharper. They'll just add cost, latency, and one more system that can quietly break on you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;I almost built a whole retrieval pipeline for a problem that had nothing to retrieve, just because that's the default move everyone reaches for. The real lesson here wasn't about embeddings specifically. It was about catching myself solving the problem the tutorials describe instead of the one actually sitting in front of me.&lt;/p&gt;

&lt;p&gt;The best architecture isn't the one with the most pieces. It's the one that solves the actual problem with the least stuff bolted on.&lt;/p&gt;

&lt;h2&gt;
  
  
  See it in action
&lt;/h2&gt;

&lt;p&gt;The ideas in this article weren't just theoretical—they came from building a real application.&lt;/p&gt;

&lt;p&gt;If you'd like to try it yourself, here's the live demo:&lt;br&gt;
&lt;strong&gt;&lt;a href="https://trywaypoint.streamlit.app/" rel="noopener noreferrer"&gt;https://trywaypoint.streamlit.app/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>database</category>
      <category>rag</category>
    </item>
    <item>
      <title>OpenSpec: The Missing Layer Between You and Your AI Coding Assistant</title>
      <dc:creator>Syed Ibrahim</dc:creator>
      <pubDate>Mon, 15 Jun 2026 13:14:35 +0000</pubDate>
      <link>https://dev.to/syed11/openspec-the-missing-layer-between-you-and-your-ai-coding-assistant-2a71</link>
      <guid>https://dev.to/syed11/openspec-the-missing-layer-between-you-and-your-ai-coding-assistant-2a71</guid>
      <description>&lt;p&gt;If you have spent any time doing AI-assisted development or vibe coding, you already know the problem.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You open a new chat.&lt;/li&gt;
&lt;li&gt;Start building something.&lt;/li&gt;
&lt;li&gt;The AI just runs with it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No alignment, no scope, no shared understanding of what you are actually trying to do.&lt;/p&gt;

&lt;p&gt;That works fine for small throwaway tasks. But when you are working on a real codebase, things go sideways fast.&lt;/p&gt;

&lt;p&gt;The AI makes assumptions. Scope creeps. You end up with code that technically works but does not match what you had in mind.&lt;/p&gt;

&lt;p&gt;OpenSpec fixes this by introducing one simple idea&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;agree on what you are building before any code gets written.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It gives you and your AI coding assistant a lightweight structure to follow for every change you make. Before implementation starts, you define the intent, the scope, and the approach. The AI reads that and works within those boundaries instead of guessing.&lt;/p&gt;

&lt;p&gt;The result is more predictable output, less back and forth, and something that matters a lot in fast-paced development ~ the reasoning behind your decisions is actually preserved instead of disappearing into chat history.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is OpenSpec?
&lt;/h2&gt;

&lt;p&gt;OpenSpec is a spec-driven development framework. It sits between you and your AI coding assistant as a lightweight planning layer.&lt;/p&gt;

&lt;p&gt;The idea is simple. Before your AI writes a single line of code, you and the AI agree on a spec. What you are building, why you are building it, how you are going to build it, and what is out of scope. Everything is written down and locked in before implementation starts.&lt;/p&gt;

&lt;p&gt;It works with the tools you already use ~ Claude Code, Cursor, Codex, Copilot, Antigravity and more. No API keys, no complex setup. Your specs live right inside your repository as markdown files.&lt;/p&gt;

&lt;p&gt;Every change you make in OpenSpec goes through four artifacts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Proposal&lt;/strong&gt; ~ the why. What you want to build and why it matters&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Specs&lt;/strong&gt; ~ the what. The requirements and expected behavior&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design&lt;/strong&gt; ~ the how. The technical approach and decisions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tasks&lt;/strong&gt; ~ the steps. Broken down implementation plan&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Installation and Setup
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;p&gt;Node.js 20.19.0 or higher&lt;/p&gt;

&lt;h3&gt;
  
  
  Install
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @fission-ai/openspec@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Initialize
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; &amp;lt;your-project&amp;gt;
openspec init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh3jlix3tip4lhrkkluu3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh3jlix3tip4lhrkkluu3.png" alt="Terminal screenshot of openspec init welcome screen"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once initialized, it will ask you to select which AI tools you want to set up. OpenSpec supports 28 tools including Claude Code, Cursor, Codex, Copilot and more. Use Space to toggle and Enter to confirm.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbl2ezmxf6lhb02okkpz6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbl2ezmxf6lhb02okkpz6.png" alt="Terminal screenshot of openspec tool selection"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After selecting your tools, OpenSpec sets everything up automatically ~ agent skills, slash commands, and config files for each tool you selected.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbecmswgh7yrs78p912p6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbecmswgh7yrs78p912p6.png" alt="Terminal screenshot of openspec setup complete"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once setup is complete, restart your IDE for the slash commands to take effect. Then you are ready to start your first change with &lt;code&gt;/opsx:propose &amp;lt;what-you-want-to-build&amp;gt;&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Four Artifacts
&lt;/h2&gt;

&lt;p&gt;Every change in OpenSpec progresses through four artifacts.&lt;/p&gt;

&lt;p&gt;Each artifact builds on the previous one, ensuring implementation starts only after the change is fully understood.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Proposal
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The Why&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The proposal captures the intent behind the change.&lt;/p&gt;

&lt;p&gt;Questions answered here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why are we doing this?&lt;/li&gt;
&lt;li&gt;What problem are we solving?&lt;/li&gt;
&lt;li&gt;What value does this provide?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where intent gets locked in.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Specs
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The What&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Specs define the requirements and expected behavior.&lt;/p&gt;

&lt;p&gt;Questions answered here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What should happen?&lt;/li&gt;
&lt;li&gt;What should the system do?&lt;/li&gt;
&lt;li&gt;How should it behave?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These become the source of truth during implementation.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Design
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The How&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Design documents describe the technical approach.&lt;/p&gt;

&lt;p&gt;Questions answered here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which architecture should we use?&lt;/li&gt;
&lt;li&gt;What tradeoffs are involved?&lt;/li&gt;
&lt;li&gt;What technical decisions need to be made?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This phase often prevents expensive mistakes before they reach production.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Tasks
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The Steps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tasks break the implementation into manageable pieces.&lt;/p&gt;

&lt;p&gt;Questions answered here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What needs to be done?&lt;/li&gt;
&lt;li&gt;In what order?&lt;/li&gt;
&lt;li&gt;How do we know we're finished?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This becomes the execution plan for both humans and AI agents.&lt;/p&gt;




&lt;h2&gt;
  
  
  Your First Change
&lt;/h2&gt;

&lt;p&gt;Let's walk through a real example. We are going to add a new User Profile API endpoint using OpenSpec from start to finish.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Start the Change
&lt;/h3&gt;

&lt;p&gt;Run the propose command in your AI coding assistant:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/opsx:propose "add-user-profile-api-endpoint"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your AI will generate all four artifact files automatically:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Created openspec/changes/add-user-profile-api-endpoint/
✓ proposal.md — why we're doing this, what's changing
✓ specs/       — requirements and scenarios
✓ design.md    — technical approach
✓ tasks.md     — implementation checklist
Ready for implementation!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is what each artifact looks like:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;proposal.md&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Proposal: Add User Profile API Endpoint&lt;/span&gt;

&lt;span class="gu"&gt;## Intent&lt;/span&gt;
Users need a way to retrieve and update their profile information
through a dedicated API endpoint.

&lt;span class="gu"&gt;## Scope&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; GET /api/users/:id endpoint
&lt;span class="p"&gt;-&lt;/span&gt; PUT /api/users/:id endpoint
&lt;span class="p"&gt;-&lt;/span&gt; Input validation and error handling

&lt;span class="gu"&gt;## Approach&lt;/span&gt;
Use existing REST conventions with JWT authentication middleware.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;specs/api/spec.md&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Delta for API&lt;/span&gt;

&lt;span class="gu"&gt;## ADDED Requirements&lt;/span&gt;

&lt;span class="gu"&gt;### Requirement: User Profile Retrieval&lt;/span&gt;
The system MUST expose a GET endpoint to retrieve user profile data.

&lt;span class="gu"&gt;#### Scenario: Fetch profile&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; GIVEN an authenticated user
&lt;span class="p"&gt;-&lt;/span&gt; WHEN GET /api/users/:id is called
&lt;span class="p"&gt;-&lt;/span&gt; THEN the user profile is returned
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;design.md&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Design: Add User Profile API Endpoint&lt;/span&gt;

&lt;span class="gu"&gt;## Approach&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Use Express router for route handling
&lt;span class="p"&gt;-&lt;/span&gt; JWT middleware for authentication
&lt;span class="p"&gt;-&lt;/span&gt; Joi for input validation
&lt;span class="p"&gt;-&lt;/span&gt; Return 404 if user not found
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;tasks.md&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Tasks&lt;/span&gt;

&lt;span class="gu"&gt;## 1. Route Setup&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; [ ] 1.1 Create user profile route file
&lt;span class="p"&gt;-&lt;/span&gt; [ ] 1.2 Register route in main router

&lt;span class="gu"&gt;## 2. Handlers&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; [ ] 2.1 Implement GET /api/users/:id handler
&lt;span class="p"&gt;-&lt;/span&gt; [ ] 2.2 Implement PUT /api/users/:id handler

&lt;span class="gu"&gt;## 3. Validation and Error Handling&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; [ ] 3.1 Add input validation
&lt;span class="p"&gt;-&lt;/span&gt; [ ] 3.2 Add error handling middleware
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Step 2: Implement
&lt;/h3&gt;

&lt;p&gt;Once you are happy with all the artifacts, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/opsx:apply
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your AI now works through the tasks one by one following the spec exactly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Working through tasks...
✓ 1.1 Created user profile route file
✓ 1.2 Registered route in main router
✓ 2.1 Implemented GET /api/users/:id handler
✓ 2.2 Implemented PUT /api/users/:id handler
✓ 3.1 Added input validation
✓ 3.2 Added error handling middleware
All tasks complete!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No guessing, no assumptions, no scope creep. Your AI follows the spec and nothing else.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 3: Archive
&lt;/h3&gt;

&lt;p&gt;Once everything is verified, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/opsx:archive
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This closes the change completely. It merges your delta specs into the main specs folder and moves the change to the archive permanently.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Archiving add-user-profile-api-endpoint...
✓ Merged specs into openspec/specs/api/spec.md
✓ Moved to openspec/changes/archive/2025-01-24-add-user-profile-api-endpoint/
Done! Ready for the next feature.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The reasoning behind every decision is now preserved in your repository forever. Next time anyone touches this code ~ including an AI agent ~ the why is already there.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tips from Real Usage
&lt;/h2&gt;

&lt;p&gt;After using OpenSpec for a few months in fast paced AI driven development, here are a few things I have learned.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Always review the proposal before moving on&lt;/strong&gt;&lt;br&gt;
The proposal is where intent gets locked in. If something is off there, it carries through to every other artifact. Spend an extra minute here and save yourself a lot of back and forth later.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Be specific with your scope&lt;/strong&gt;&lt;br&gt;
The more specific you are about what is out of scope, the better your AI performs. Writing "out of scope: custom error pages" is more useful than leaving it vague. AI agents take boundaries seriously when they are written down.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do not skip the design artifact&lt;/strong&gt;&lt;br&gt;
It is tempting to jump straight to implementation. But the design phase is where you catch bad technical decisions before they become bad code. Many times the design phase alone has saved me from going down the wrong path.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use it on existing codebases&lt;/strong&gt;&lt;br&gt;
OpenSpec is brownfield first. You do not need a fresh project to get value from it. Drop it into an existing codebase and start using it for your next change. The value shows up immediately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your specs are living documentation&lt;/strong&gt;&lt;br&gt;
Every time you archive a change, your specs folder gets more complete. Over time it becomes a genuine source of truth for how your system works and why decisions were made. That is valuable for your whole team, not just for AI agents.&lt;/p&gt;


&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;AI coding assistants are powerful. But power without direction is just noise.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;OpenSpec is not about slowing down. It is about making sure that when you move fast, you are moving in the right direction. In vibe coding and fast paced AI driven development, the biggest risk is not writing bad code. It is building the wrong thing confidently.&lt;/p&gt;

&lt;p&gt;After using OpenSpec for a few months, the biggest shift I noticed was not in the code quality. It was in how much context was being preserved. The why behind decisions no longer lives in chat history or someone's head. It lives in the repository, right next to the code it describes.&lt;/p&gt;

&lt;p&gt;If you are doing any kind of AI assisted development and you are not using a spec driven approach, give OpenSpec a try. It takes five minutes to set up and the value shows up on your very first change.&lt;/p&gt;

&lt;p&gt;Start with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/opsx:propose "your-first-change"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And see what happens.&lt;/p&gt;

</description>
      <category>vibecoding</category>
      <category>aiassisteddevelopment</category>
      <category>developertools</category>
      <category>ai</category>
    </item>
    <item>
      <title>Google Just Made AI Memory Official at Cloud NEXT '26 - And It Made Me Uncomfortable :(</title>
      <dc:creator>Syed Ibrahim</dc:creator>
      <pubDate>Sun, 26 Apr 2026 11:39:11 +0000</pubDate>
      <link>https://dev.to/syed11/google-just-made-ai-memory-official-at-cloud-next-26-and-it-made-me-uncomfortable--452d</link>
      <guid>https://dev.to/syed11/google-just-made-ai-memory-official-at-cloud-next-26-and-it-made-me-uncomfortable--452d</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/google-cloud-next-2026-04-22"&gt;Google Cloud NEXT Writing Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I'll be honest. I didn't sit through the full Google Cloud NEXT '26 keynotes. I caught the highlights in between work. That's my level of "following the news."&lt;/p&gt;

&lt;p&gt;But one announcement stopped me: &lt;strong&gt;Agent Memory Bank&lt;/strong&gt;, now generally available inside the Gemini Enterprise Agent Platform.&lt;/p&gt;

&lt;p&gt;Here's what it does in plain English: your AI agent can now remember things across conversations. Not just inside one session, but across sessions. It dynamically builds memory from past interactions, stores it, and pulls it back when relevant. Using Memory Profiles, agents can recall high-accuracy details with low latency so they don't lose context. (&lt;a href="https://cloud.google.com/blog/topics/google-cloud-next/google-cloud-next-2026-wrap-up" rel="noopener noreferrer"&gt;Google Cloud&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Sounds great on paper. But it made me think about something that happened to me recently.&lt;/p&gt;

&lt;h2&gt;
  
  
  I Already Experienced AI Memory. Without Asking for It.
&lt;/h2&gt;

&lt;p&gt;A few weeks ago I was trying to fix a Decoder init failure on specific Snapdragon/MediaTek chipset phones. It was showing up in Sentry on our Android player SDK, ExoPlayer related. So I was using an AI tool to work through it, asking questions, going back and forth.&lt;/p&gt;

&lt;p&gt;At some point I closed that chat and started a completely new one. Different day, different question. But somewhere in that new conversation the AI referenced something specific from the ExoPlayer session. Something I hadn't brought up at all.&lt;/p&gt;

&lt;p&gt;So I asked: "are you reading my previous chats?"&lt;/p&gt;

&lt;p&gt;It said no.&lt;/p&gt;

&lt;p&gt;I gave it the exact context it had referenced. Still denied it.&lt;/p&gt;

&lt;p&gt;That's the part that didn't sit right with me. Not that it remembered. That it remembered and then said it didn't. If a system can recall something it claims it cannot access, and then confidently insists otherwise, that's not just a bug. That's a trust problem. Because now I'm sitting there wondering what else it knows that it's not telling me. And the easy fallback is always "AI can make mistakes" which okay, sure, but that line is doing a lot of heavy lifting. It quietly removes accountability. The system moves on. I'm left holding the confusion.&lt;/p&gt;

&lt;h2&gt;
  
  
  Now Google Is Making Memory an Official Feature
&lt;/h2&gt;

&lt;p&gt;Agent Engine Sessions and Memory Bank, which give agents persistent context across interactions, are now generally available. (&lt;a href="https://thenextweb.com/news/google-cloud-next-ai-agents-agentic-era" rel="noopener noreferrer"&gt;The Next Web&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;In some ways that's actually more honest. At least now it's documented, intentional, and in an API you can actually inspect.&lt;/p&gt;

&lt;p&gt;The idea makes sense for what I build. I work on Django-based AI SaaS. Right now every session resets. Users repeat themselves. Agents forget context. Google showed a demo where a customer moves from text chat to a phone call and the agent seamlessly remembers exactly where they left off. (&lt;a href="https://cloud.google.com/blog/topics/google-cloud-next/next26-day-1-recap" rel="noopener noreferrer"&gt;Google Cloud&lt;/a&gt;) That kind of continuity is genuinely useful.&lt;/p&gt;

&lt;p&gt;Think of it like a &lt;code&gt;user_preferences&lt;/code&gt; table in Django, except Google manages the entire memory layer for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  But My Trust Questions Remain
&lt;/h2&gt;

&lt;p&gt;If unofficial memory already existed and got denied, what happens with the official version?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What exactly gets stored, and for how long?&lt;/li&gt;
&lt;li&gt;Can my users actually delete their memory and trust it's gone?&lt;/li&gt;
&lt;li&gt;How do I explain this to users in India who are already cautious about data privacy?&lt;/li&gt;
&lt;li&gt;And most practically, where is the clean &lt;code&gt;pip install&lt;/code&gt; Django walkthrough?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The codelab demo showed Memory Bank costing less than $5 (&lt;a href="https://codelabs.developers.google.com/next26/dev-keynote/enhancing-agents-with-memory?hl=en" rel="noopener noreferrer"&gt;Google Codelabs&lt;/a&gt;), which is a good sign. But I need to see full production pricing before I build anything serious on top of it.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Prediction
&lt;/h2&gt;

&lt;p&gt;Persistent agent memory is the right direction. Google's pitch is a unified stack: chips designed for models, models grounded in your data, agents built with those models, all secured by the infrastructure. (&lt;a href="https://cloud.google.com/blog/topics/google-cloud-next/welcome-to-google-cloud-next26" rel="noopener noreferrer"&gt;Google Cloud&lt;/a&gt;) If that holds up, it could genuinely be the default for AI SaaS in 12 months.&lt;/p&gt;

&lt;p&gt;But the trust layer has to come with the feature. Users need to know what's remembered, what's stored, and what "delete" actually means.&lt;/p&gt;

&lt;p&gt;Google has a real chance to set that standard properly with Agent Memory Bank, especially because the unofficial version already exists and nobody is really talking about it clearly.&lt;/p&gt;

&lt;p&gt;Make it transparent, Google. The feature is good. The trust needs to catch up.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>cloudnextchallenge</category>
      <category>googlecloud</category>
      <category>vertexai</category>
    </item>
  </channel>
</rss>
