<?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: Momodu Kamara-Kolleh</title>
    <description>The latest articles on DEV Community by Momodu Kamara-Kolleh (@mkk2026).</description>
    <link>https://dev.to/mkk2026</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%2F4047379%2F956488f8-84d4-4f71-99e2-82f9de3e7367.jpg</url>
      <title>DEV Community: Momodu Kamara-Kolleh</title>
      <link>https://dev.to/mkk2026</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mkk2026"/>
    <language>en</language>
    <item>
      <title>Your first SOC 2: the seven controls a five-person team should fix first</title>
      <dc:creator>Momodu Kamara-Kolleh</dc:creator>
      <pubDate>Thu, 05 Nov 2026 12:46:25 +0000</pubDate>
      <link>https://dev.to/mkk2026/your-first-soc-2-the-seven-controls-a-five-person-team-should-fix-first-14b8</link>
      <guid>https://dev.to/mkk2026/your-first-soc-2-the-seven-controls-a-five-person-team-should-fix-first-14b8</guid>
      <description>&lt;p&gt;Most small teams meet SOC 2 the same way: a bigger customer sends a security questionnaire, and somewhere in it is "Please provide your SOC 2 report." You don't have one, and the frameworks look enormous.&lt;/p&gt;

&lt;p&gt;The good news is that a first Type I mostly comes down to a short list of things auditors look at early. If these are in place and you can show evidence for them, the rest gets much easier.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;MFA everywhere that matters: your identity provider, cloud console, code host and email. Auditors will ask for a screenshot or an export showing it's enforced, not just available.&lt;/li&gt;
&lt;li&gt;Access you can explain. Keep a list of who has access to production and why, and review it on a schedule (quarterly is common). Remove people the day they leave.&lt;/li&gt;
&lt;li&gt;Code changes that get reviewed. Use branch protection on main, require at least one reviewer, and have CI run before merge. The pull request history becomes your evidence.&lt;/li&gt;
&lt;li&gt;Backups you have actually restored. A backup policy is easy; a dated record of a successful test restore is what convinces an auditor.&lt;/li&gt;
&lt;li&gt;Encryption in transit and at rest. Most managed cloud services do this by default, so the work is mostly documenting which settings you rely on.&lt;/li&gt;
&lt;li&gt;A written incident response plan. Keep it short: who gets called, where you talk, how you decide whether to notify customers. Then run one tabletop exercise and write down what happened.&lt;/li&gt;
&lt;li&gt;Vendor review. List the services that touch customer data, and keep their security reports or terms on file.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;None of this needs a big platform. It needs someone to own it, a place to keep the evidence, and a few months of the controls actually running before the audit.&lt;/p&gt;

&lt;p&gt;I'm building Attestlane, SOC 2 readiness software for small B2B teams, because I kept seeing founders stall at this exact point. The free assessment at attestlane.to maps your answers to the criteria and shows which of these gaps you have. It doesn't replace the auditor.&lt;/p&gt;

</description>
      <category>soc2</category>
      <category>security</category>
      <category>startup</category>
      <category>compliance</category>
    </item>
    <item>
      <title>Starting your first SOC 2 in 2027? The criteria change probably doesn't apply to you yet</title>
      <dc:creator>Momodu Kamara-Kolleh</dc:creator>
      <pubDate>Wed, 04 Nov 2026 12:29:06 +0000</pubDate>
      <link>https://dev.to/mkk2026/starting-your-first-soc-2-in-2027-the-criteria-change-probably-doesnt-apply-to-you-yet-3gcp</link>
      <guid>https://dev.to/mkk2026/starting-your-first-soc-2-in-2027-the-criteria-change-probably-doesnt-apply-to-you-yet-3gcp</guid>
      <description>&lt;p&gt;The AICPA has published an exposure draft of the proposed 2027 SOC 2 Trust Services Criteria. If you're a small team planning a first SOC 2, here's what matters and what doesn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's confirmed
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The draft is real. The AICPA published it on Oct 26, 2026 and announced it on Oct 28.&lt;/li&gt;
&lt;li&gt;Comments are open until Jan 15, 2027.&lt;/li&gt;
&lt;li&gt;If approved, it applies to engagements beginning on or after Dec 31, 2027, with early adoption allowed.&lt;/li&gt;
&lt;li&gt;It adds new points of focus on AI: governance, model monitoring, prompt manipulation, data poisoning, transparency of AI-generated outputs, and automated decision-making.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's reported but not yet verified against the draft
&lt;/h2&gt;

&lt;p&gt;Several firms that have read it say the common criteria drop from 33 to 20 and get renumbered. For example, access control would move to CC5 and change management to CC7, and vendor management would get its own series. Treat the exact numbers as provisional until the final version is out.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it means if you start in 2026 or 2027
&lt;/h2&gt;

&lt;p&gt;Most first Type I engagements starting before Dec 31, 2027 will still be examined against the current criteria. So don't stall your readiness work waiting for the new numbering. The underlying controls (MFA, access reviews, change management, vendor reviews, backups you've actually tested) stay the same. What changes is how they're grouped and labeled.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two practical moves
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Store your evidence by control, not by criterion number. Then remapping later is a relabel, not a rebuild.&lt;/li&gt;
&lt;li&gt;If your product uses AI, start writing down how you govern it now: who can change prompts, how outputs are reviewed, and what data the model sees. That's the area auditors are adding.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I'm building Attestlane, SOC 2 readiness software for small B2B teams, so I've been reading this closely. If you're preparing for a first SOC 2, the free assessment at &lt;a href="https://attestlane.to" rel="noopener noreferrer"&gt;attestlane.to&lt;/a&gt; shows your gaps against today's criteria.&lt;/p&gt;

</description>
      <category>soc2</category>
      <category>security</category>
      <category>startup</category>
      <category>compliance</category>
    </item>
    <item>
      <title>Your compliance tool saying you're "95% ready" is a liability, not a feature</title>
      <dc:creator>Momodu Kamara-Kolleh</dc:creator>
      <pubDate>Wed, 07 Oct 2026 12:10:39 +0000</pubDate>
      <link>https://dev.to/mkk2026/your-compliance-tool-saying-youre-95-ready-is-a-liability-not-a-feature-5b2c</link>
      <guid>https://dev.to/mkk2026/your-compliance-tool-saying-youre-95-ready-is-a-liability-not-a-feature-5b2c</guid>
      <description>&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmlz8y2qytwmo57nz7i1i.jpg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmlz8y2qytwmo57nz7i1i.jpg" alt=" " width="800" height="500"&gt;&lt;/a&gt;I've spent the last stretch building a SOC 2 readiness tool, and the most useful thing I learned has nothing to do with dashboards. It's about a quiet failure mode that kills deals — and why a lot of compliance tools are built to cause it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The failure mode
&lt;/h2&gt;

&lt;p&gt;Picture a seed-stage SaaS. They land a great enterprise lead. The lead's security team sends the inevitable email: &lt;em&gt;"Share your SOC 2 report, or your current readiness status."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The founder opens their shiny compliance tool. It says: &lt;strong&gt;"You're 95% compliant."&lt;/strong&gt; Great. They forward that.&lt;/p&gt;

&lt;p&gt;Then the security team asks one specific question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What's your access-review cadence, and how do you evidence it?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And the answer the founder trusts was &lt;strong&gt;generated, not grounded&lt;/strong&gt;. The model paraphrased a control it half-remembered and invented a definition that's subtly wrong. The reviewer — who reads these every week — catches it in about five seconds.&lt;/p&gt;

&lt;p&gt;Now the founder doesn't look 95% ready. They look like they don't understand their own posture. The deal stalls a quarter. Sometimes it dies.&lt;/p&gt;

&lt;p&gt;That "95%" wasn't a feature. It was a liability dressed up as reassurance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why LLM compliance tools do this
&lt;/h2&gt;

&lt;p&gt;LLMs are fluent and confident, and a compliance control is exactly the kind of precise, citeable text they paraphrase badly. Ask a general model "what does this control require?" and it will happily produce something that &lt;em&gt;sounds&lt;/em&gt; right. Most of the time nobody checks.&lt;/p&gt;

&lt;p&gt;But compliance has an adversarial reader built in: the buyer's security team. Their entire job is to catch the gap between what you claim and what you can evidence. An ungrounded, confident answer is the single easiest thing for them to flag.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix is boring: grounding
&lt;/h2&gt;

&lt;p&gt;The fix isn't a smarter model or a prettier dashboard. It's a rule:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Every answer about a control must quote the real criterion, or say it doesn't have it. Never guess.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Concretely: every AI response is injected with the actual criterion text from the framework files on disk. The model's job is constrained — quote the source, or abstain. If the control isn't in the grounding set, the honest output is "I don't have that control's text," not a confident paraphrase.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;control&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;frameworks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lookup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;control_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;# real text, from disk
&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;control&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;I don&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;t have the criterion for &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;control_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# system prompt: answer ONLY from the provided criterion text;
# if the question goes beyond it, say so explicitly.
&lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;respond&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;question&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;grounding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;control&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It feels almost too simple. But "boring and correct" is exactly what you want in the one place where a confident mistake costs a customer their trust in you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters more than features
&lt;/h2&gt;

&lt;p&gt;Compliance tools love to compete on breadth — more integrations, more frameworks, more automation. Useful, but none of it is the thing a buyer's security team actually tests. What they test is whether your answers hold up under one specific question. An ungrounded tool fails the only exam that matters, no matter how many checkboxes it has.&lt;/p&gt;

&lt;h2&gt;
  
  
  The honest part
&lt;/h2&gt;

&lt;p&gt;A readiness tool is &lt;strong&gt;not&lt;/strong&gt; an audit. It doesn't make you SOC 2 certified — a licensed CPA firm still performs the examination and issues the report. Any tool (mine included) that implies otherwise is doing the same overpromising I just described.&lt;/p&gt;

&lt;p&gt;I'm building this solo, from Freetown, Sierra Leone. It's called Attestlane and it's live if you want to poke at it (use fake company data — don't connect real systems just to test). But I wrote this because the grounding lesson holds whether you use my tool, a competitor's, or a spreadsheet:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If your compliance answers can't cite their source, don't send them to a security team.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you've been through a first SOC 2, I'd genuinely like to hear the part that actually hurt.&lt;/p&gt;

</description>
      <category>soc2</category>
      <category>security</category>
      <category>ai</category>
      <category>startup</category>
    </item>
    <item>
      <title>I built a discovery layer for AI agents because mine kept getting lost</title>
      <dc:creator>Momodu Kamara-Kolleh</dc:creator>
      <pubDate>Sat, 25 Jul 2026 23:54:41 +0000</pubDate>
      <link>https://dev.to/mkk2026/i-built-a-discovery-layer-for-ai-agents-because-mine-kept-getting-lost-5bjo</link>
      <guid>https://dev.to/mkk2026/i-built-a-discovery-layer-for-ai-agents-because-mine-kept-getting-lost-5bjo</guid>
      <description>&lt;p&gt;Everyone's building AI agents right now. Almost nobody's building the boring layer underneath them: how do agents find each other?&lt;/p&gt;

&lt;p&gt;I hit this in my own stack. I run a few MCP servers one for search, one for my database, one exposing my product's API. Their addresses lived in a JSON config I edited by hand. When I added a fourth, the file got messy. When one went down, I found out because something downstream broke and I debugged backwards. There was no single source of truth for what agents existed or whether they were alive.&lt;/p&gt;

&lt;p&gt;MCP gave agents a common language. There's still no discovery layer. That felt like having HTTP without a service registry.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;agentreg&lt;/strong&gt;. It's a self-hosted service registry for agents one Go binary:&lt;/p&gt;

&lt;p&gt;agentctl serve &amp;amp; &lt;br&gt;
agentctl register search-agent -c search -e &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt;&lt;br&gt;
agentctl find search  # discover by capability, not a hardcoded URL&lt;br&gt;
agentctl list         # everything, with live health&lt;/p&gt;

&lt;p&gt;It health-checks every registered agent on a heartbeat, so a dead one shows up as &lt;code&gt;unhealthy&lt;/code&gt; before it takes something down with it. That single feature has already saved me a debugging session.&lt;/p&gt;

&lt;p&gt;A fair question I keep getting: "isn't this just service discovery, like Consul?" Close, but the query is different. Consul answers &lt;em&gt;where is this service?&lt;/em&gt; a host and port. Agents need &lt;em&gt;what can this thing do, is it healthy, and can I trust it?&lt;/em&gt; That's capability-first, and it's why the registry is agent-shaped rather&lt;br&gt;
than micro service-shaped.&lt;/p&gt;

&lt;p&gt;I'm being upfront about the stage: this is v0.1, I built it solo, and it does discovery + health and nothing more yet. No federation, no auth, no trust verification — though the code has a pluggable verifier seam for exactly that later. It's MIT, self-hosted, no cloud, no account.&lt;/p&gt;

&lt;p&gt;Install:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew install mkk2026/tap/agentreg
Repo: https://github.com/mkk2026/agentreg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;If you run more than a couple of MCP servers, I'd genuinely like to know whether this solves a real annoyance for you or whether I'm a year early. The most useful thing you can tell me is whether you're still running it a week after you try it. That's the only feedback that counts.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>devops</category>
      <category>automation</category>
      <category>reviews</category>
    </item>
  </channel>
</rss>
