<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Mohan Goyal on Medium]]></title>
        <description><![CDATA[Stories by Mohan Goyal on Medium]]></description>
        <link>https://medium.com/@mohanrajgoyal?source=rss-4069a7ffe34c------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*qLPLslBqyK1UB3Pc0rWiXQ.jpeg</url>
            <title>Stories by Mohan Goyal on Medium</title>
            <link>https://medium.com/@mohanrajgoyal?source=rss-4069a7ffe34c------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 14 Nov 2026 17:18:28 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@mohanrajgoyal/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[I replaced my engineering team with Claude. Here’s the real tradeoff]]></title>
            <link>https://medium.com/mogo-mantra/i-replaced-my-engineering-team-with-claude-heres-the-real-tradeoff-332232343eb2?source=rss-4069a7ffe34c------2</link>
            <guid isPermaLink="false">https://medium.com/p/332232343eb2</guid>
            <category><![CDATA[claude]]></category>
            <category><![CDATA[startup]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[productivity]]></category>
            <category><![CDATA[ai]]></category>
            <dc:creator><![CDATA[Mohan Goyal]]></dc:creator>
            <pubDate>Sat, 18 Jul 2026 01:45:36 GMT</pubDate>
            <atom:updated>2026-07-18T02:48:10.342Z</atom:updated>
            <content:encoded><![CDATA[<p>The pitch sounds almost too good: why hire engineers when Claude can write code, review architecture, debug deployments, and document decisions — all night, no equity, no standups?</p><p>I tested it. Sprint 0 of a workflow platform I’m building for accounting firms — a production-grade QA environment, complete with three-account AWS infrastructure, Microsoft Entra ID auth, PostgreSQL, and a full CI/CD pipeline. Solo. With Claude as my only engineering collaborator.</p><p>It worked. But not in the way the pitch implies.</p><p>Here’s the real tradeoff — not the demo version, the production version.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*MA9h_OW9Y_MYLybLYS1CCg.png" /></figure><p><strong>## What you gain</strong></p><p><strong>**You gain capacity you genuinely don’t have alone.**</strong></p><p>There are things Claude is better at than I am. It knows the CDK pattern by pattern. It knows Next.js App Router conventions cold. It knows how Auth.js v5 is configured, what the Prisma v7 migration guide says, and how to structure a Secrets Manager pipeline.</p><p>In a normal team, this knowledge lives across <strong><em>three or four engineers</em></strong> who’ve hit these problems before and remember the solutions. Solo, you’d be spending that time reading documentation. <strong><em>Claude compresses days of research into minutes</em></strong>.</p><p><strong>**You gain a collaborator who shows up fully every time.**</strong></p><p>No context-switching tax, no Monday mornings, no “I’m heads-down on something else.” When I needed to think through the CDK multi-account architecture at midnight, Claude was there. When I needed to write a PR description at 6:00 AM, Claude wrote a first draft in thirty seconds.</p><p>The raw availability is underrated. A lot of solo founder time is lost to the gaps between work — switching cost, re-ramping, figuring out where you left off. An AI that picks up from context in seconds compresses those gaps significantly.</p><p><strong>**You gain a forcing function for clarity.**</strong></p><p>This one surprised me. To direct Claude well, I have to know what I want. Vague instructions produce vague output. When I write “<strong><em>investigate why DATABASE_URL isn’t reaching Lambda and present findings before touching anything</em></strong>,” I’ve already articulated the problem precisely enough that I’ve half-solved it.</p><p>The discipline of directing an AI turns out to be the discipline of thinking clearly. I understand the systems I built better than I would if a team member had just handled them.</p><p><strong>## What you lose</strong></p><p><strong>**You lose the second opinion you didn’t ask for.**</strong></p><p>A good engineer on your team will read your PR and say “wait, why are we doing it this way?” They’ll notice that you’re solving the symptom, not the root cause. They’ll ask a question that reframes the whole problem.</p><p>Claude doesn’t do this unless you ask. It will implement exactly what you describe, correctly, and never question whether you should be doing it at all. It has no stake in the outcome.</p><p>In Sprint 0, I made at least two decisions that a senior engineer would have pushed back on. They weren’t catastrophic — they’re now tech debt tickets. But they went unchallenged because nobody was positioned to challenge them.</p><p><strong>**You lose institutional memory that persists without you.**</strong></p><p>Claude forgets everything between sessions. The context of why we made a decision, what we tried first, what the failure mode was — all of it has to be manually written down, or it disappears.</p><p>In a team, some of this lives in people’s heads without anyone thinking about it. You can ask “hey, why did we do X that way?” and get an answer. With Claude, if it isn’t in a PR comment or a `CLAUDE.md` entry or a GitHub issue, it’s gone.</p><p><strong>The documentation discipline this creates is actually good.</strong> But it’s an effort you bear entirely alone. Every non-obvious decision has to be written down <em>*immediately*</em>, or the next conversation starts from scratch.</p><p><strong>**You lose the ability to parallelize meaningfully.**</strong></p><p>Real teams work on multiple things simultaneously. One engineer on auth, one on the data model, one on infrastructure. The work compounds.</p><p>Solo with Claude, you’re sequential. One problem at a time, one PR at a time. Claude can draft fast, but you’re the bottleneck at every review, every approval, every decision. Sprint 0 took three weeks. With a three-person team, it might have taken one.</p><p>That’s fine if you know it going in. But the “build X in a weekend with AI” framing sets wrong expectations. The AI moves fast. You are still the rate limiter.</p><p><strong>## What you have to compensate for</strong></p><p>Once you know what you lose, you can build systems to partially compensate. None of them are perfect substitutes — they’re workarounds.</p><p><strong>**For the missing second opinion:**</strong> Write a `CLAUDE.md` rule that requires investigation before implementation. This forces the AI to present its reasoning before acting, giving you the chance to be your own second opinion. It’s slower, but it catches a fraction of what a human reviewer would catch.</p><p><strong>**For the missing institutional memory:**</strong> Treat the PR as the team’s shared brain. Every decision, every failed approach, every non-obvious reason goes into the PR description before the merge. Link PRs to issues. The history is searchable. Future-Claude can be briefed from it.</p><p><strong>**For the sequential bottleneck:**</strong> Timebox decisions. The most expensive thing solo is decision loops — going back and forth on an approach instead of picking one, shipping it, and learning. Let the AI make the first call on low-stakes decisions. Spend your review time on the ones that matter.</p><p><strong>## The honest economics</strong></p><p>I spent roughly $100 in Claude usage on Sprint 0. Infrastructure costs are minimal (AWS Free Tier + Neon free tier + GitHub Actions free minutes).</p><p>What I got: the output of a small team, compressed into one sprint, at a fraction of the cost.</p><p>What I paid beyond the Claude bill: every hour the AI saved me, I still spent reviewing, deciding, approving, testing. I spent debugging sessions that a senior AWS engineer would have resolved faster. I spent time writing documentation that would have been distributed across a team.</p><p>The real labor savings are probably 40–60%, not 90%. That’s still enormous. For a solo founder at the beginning of a product, it’s the difference between viable and not viable.</p><p>But be precise about what you’re saving. You’re not replacing engineers. You’re replacing the execution work that engineers do — the code-writing, the boilerplate, the implementation of well-specified decisions. The judgment work is still yours.</p><p>If you don’t have strong enough judgment to review what Claude produces, you’ll ship Claude’s mistakes confidently. The AI isn’t a senior engineer. It’s a highly capable junior who needs a tech lead.</p><p><strong>## What I’d tell a founder starting today</strong></p><p><strong>**Don’t use Claude as a search engine with autocomplete.**</strong> The “paste a problem, get code, move on” workflow produces fast-moving messes. Use it as a collaborator you manage: give context, require it to show its work, review before approving.</p><p><strong>**Build the non-AI parts of your system first.**</strong> CI. PR rules. Documentation conventions. These don’t need AI to set up, and they’re what constrain the AI’s output quality. The AI works inside the system; build the system first.</p><p><strong>**Know which decisions you’re making and which you’re delegating.**</strong> You should be making architecture decisions, security decisions, and any decision that’s hard to reverse. You can delegate implementation, documentation, and boilerplate. The line isn’t always obvious — draw it explicitly.</p><p><strong>**You’re not building faster. You’re building with a smaller team.**</strong> That reframe matters. A small team still needs processes, reviews, and documentation. The difference is you’re the whole team. AI gives you capacity. You supply the judgment.</p><p><strong>## Whether it was worth it</strong></p><p>Unambiguously yes, for where I am.</p><p>I’m building a workflow automation platform for accounting firms. I’m pre-revenue. The market isn’t waiting. I needed to move.</p><p>Sprint 0 is shipped. The QA environment is live. The foundation is solid enough to build on. I couldn’t have done it this fast alone without Claude, and I couldn’t have afforded to do it this fast with a team.</p><p>The tradeoff is real: I gave up the second opinion, the institutional memory that lives in people, the parallelism of a team. I compensated with systems — `CLAUDE.md`, CI, PR discipline, documentation habits — and accepted that I’m still the bottleneck on judgment.</p><p>For a technical founder who can be that tech lead, the math works. Just go in with accurate expectations.</p><p>The AI is not your team. The AI is your capacity multiplier. You still have to be the engineer.</p><p><strong>— -</strong></p><p><em>*I’m Mohan Goyal, founder of MoGo Mantra — an AI &amp; Cloud Native engineering consultancy. I write about building production-grade infrastructure and products as a solo technical founder. Follow along on Medium or connect on LinkedIn.*</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=332232343eb2" width="1" height="1" alt=""><hr><p><a href="https://medium.com/mogo-mantra/i-replaced-my-engineering-team-with-claude-heres-the-real-tradeoff-332232343eb2">I replaced my engineering team with Claude. Here’s the real tradeoff</a> was originally published in <a href="https://medium.com/mogo-mantra">MoGo Mantra</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Why 3 AWS Accounts, Not 1 — The Case for Organizations from Day One]]></title>
            <link>https://medium.com/mogo-mantra/why-3-aws-accounts-not-1-the-case-for-organizations-from-day-one-eba6137d6981?source=rss-4069a7ffe34c------2</link>
            <guid isPermaLink="false">https://medium.com/p/eba6137d6981</guid>
            <category><![CDATA[forward-deployed-engineer]]></category>
            <category><![CDATA[cloud-architecture]]></category>
            <category><![CDATA[aws-cdk]]></category>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[aws]]></category>
            <dc:creator><![CDATA[Mohan Goyal]]></dc:creator>
            <pubDate>Tue, 07 Jul 2026 01:08:40 GMT</pubDate>
            <atom:updated>2026-07-07T01:18:37.714Z</atom:updated>
            <content:encoded><![CDATA[<p>When I started building NIS Workflow OS — a SaaS product for accounting firms — I had a choice most engineers face early on: spin up one AWS account and get moving, or set up a proper multi-account structure from the start.</p><p>I chose three accounts. Here’s why that was the right call, and how I set it up with AWS CDK in under a day.</p><p><strong>The Single-Account Trap</strong></p><p>Most side projects and early-stage startups start with a single AWS account. It feels pragmatic. One login, one bill, one place to look. What’s the problem? The problem shows up the moment you have two things that shouldn’t talk to each other.</p><ul><li>A developer testing a new IAM policy accidentally affects production</li><li>A misconfigured S3 bucket in your dev environment is publicly accessible — and so is everything else in the same account</li><li>You want to give an engineer access to staging but not prod — and you’re writing 40 IAM conditions to try to make that work</li><li>Your AWS bill mixes dev experiments with real customer traffic and you can’t tell what anything costs</li></ul><p>These aren’t theoretical. They happen. And retrofitting account separation into an existing single-account setup is significantly more painful than starting right.</p><p><strong>The Model: Three Accounts</strong></p><p>The structure I landed on follows AWS’s own recommendation for a minimal multi-account Organizations setup:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*L2aK3ipHcw9RifIEBoysYg.png" /></figure><p><strong>Management account</strong> — billing, governance, and org-level controls only. No application workloads run here. Think of it as the control plane.</p><p><strong>Non-prod account </strong>— everything that isn’t live. Feature branches, integration testing, preview deployments. Engineers have more room to experiment here.</p><p><strong>Prod account</strong> — live traffic only. Locked down with SCPs (more on those shortly). Changes go through CI/CD, never manually.</p><p><strong>Why This Pays Off Immediately</strong></p><p>1. Blast radius containment — if something goes wrong in non-prod — a runaway Lambda, an accidentally deleted database, a misconfigured security group — it literally cannot affect prod. Different account, different network, different IAM boundary.</p><p>2. Clean IAM — instead of writing complex permission boundaries to keep devs out of prod resources, you just don’t give them access to the prod account. Simple, auditable, hard to misconfigure.</p><p>3. Cost visibility — AWS Cost Explorer per account. You instantly know what prod infrastructure costs vs. what your CI/CD pipeline burns through on test deployments.</p><p>4. Compliance groundwork — When your first enterprise customer asks “how do you separate prod from non-prod environments?” — you have a real answer, not a policy document with no enforcement.</p><p><strong>What AWS Organizations Adds</strong></p><p>Creating three accounts is just three sign-ups. What makes them work together as a system is <a href="https://docs.aws.amazon.com/organizations/"><em>AWS Organizations</em></a>. Organizations gives you:</p><ul><li>A single payer — all accounts consolidated under one bill</li><li>Organizational Units (OUs) — group accounts into logical units (Non-Prod OU, Prod OU)</li><li>Service Control Policies (SCPs) — guardrails that apply to entire OUs, even overriding account admins</li></ul><p>SCPs are the most powerful piece. I attached an SCP to the Prod OU that explicitly denies:<br>- Deleting or stopping CloudTrail<br>- Leaving the organization<br>- Actions by the root user</p><p>These denials apply to <strong><em>everyone</em></strong> in that account — including admins, including IAM roles with ‘AdministratorAccess’. You simply cannot accidentally disable audit logging in prod, no matter what.</p><pre>{<br> &quot;Effect&quot;: &quot;Deny&quot;,<br> &quot;Action&quot;: [<br> &quot;cloudtrail:DeleteTrail&quot;,<br> &quot;cloudtrail:StopLogging&quot;,<br> &quot;cloudtrail:UpdateTrail&quot;<br> ],<br> &quot;Resource&quot;: &quot;*&quot;<br>}</pre><p><strong>The CDK Setup</strong></p><p>I defined the entire org structure in a single CDK stack using the ‘aws-organizations’ L1 constructs.</p><pre>// infra/lib/organizations-stack.ts<br>export class OrganizationsStack extends cdk.Stack {<br> constructor(scope: Construct, id: string, props: OrganizationsStackProps) {<br> super(scope, id, props);<br>new organizations.CfnPolicy(this, &#39;ProdGuardrails&#39;, {<br> name: &#39;nis-prod-guardrails&#39;,<br> type: &#39;SERVICE_CONTROL_POLICY&#39;,<br> targetIds: [PROD_OU_ID],<br> content: {<br> Version: &#39;2012–10–17&#39;,<br> Statement: [<br> {<br> Sid: &#39;DenyCloudTrailModification&#39;,<br> Effect: &#39;Deny&#39;,<br> Action: [<br> &#39;cloudtrail:DeleteTrail&#39;,<br> &#39;cloudtrail:StopLogging&#39;,<br> &#39;cloudtrail:UpdateTrail&#39;,<br> ],<br> Resource: &#39;*&#39;,<br> },<br> {<br> Sid: &#39;DenyLeaveOrganization&#39;,<br> Effect: &#39;Deny&#39;,<br> Action: &#39;organizations:LeaveOrganization&#39;,<br> Resource: &#39;*&#39;,<br> },<br> {<br> Sid: &#39;DenyRootUser&#39;,<br> Effect: &#39;Deny&#39;,<br> Action: &#39;*&#39;,<br> Resource: &#39;*&#39;,<br> Condition: {<br> StringLike: { &#39;aws:PrincipalArn&#39;: &#39;arn:aws:iam::*:root&#39; },<br> },<br> },<br> ],<br> },<br> });<br> }<br>}</pre><p>One stack, deployed once to the management account. The guardrails apply across every account in the Prod OU immediately.</p><p><strong>One Gotcha Worth Knowing</strong></p><p>SCPs are powerful — powerful enough to block things you didn’t intend. When I later tried to clean up old CloudTrail resources in the prod account via CloudFormation, the SCP blocked CloudFormation’s own execution role from deleting the trail.</p><p>The error looked like this:</p><pre>cdk-hnb659fds-cfn-exec-role-329332896867-us-west-2 is not authorized<br>to perform: cloudtrail:DeleteTrail with an explicit deny in a service<br>control policy: arn:aws:organizations::…policy/p-r0t8ve5t</pre><p>The fix was to temporarily detach the SCP, run the cleanup, then re-attach. Not a design flaw — this is the SCP working exactly as intended. But it’s a good reminder: SCPs deny <strong><em>everyone</em></strong>, so keep that in mind when running infrastructure operations from the management account.</p><p><strong>What’s Next</strong></p><p>The next post in the series will focus on bootstrapping CDK in each account with cross-account trust — so the management account’s CI/CD pipeline can deploy to non-prod and prod without storing long-lived credentials anywhere.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=eba6137d6981" width="1" height="1" alt=""><hr><p><a href="https://medium.com/mogo-mantra/why-3-aws-accounts-not-1-the-case-for-organizations-from-day-one-eba6137d6981">Why 3 AWS Accounts, Not 1 — The Case for Organizations from Day One</a> was originally published in <a href="https://medium.com/mogo-mantra">MoGo Mantra</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>