Skip to content
Non-Tech Founders

The Internal Tool Scope Document That Stops AI From Going Off the Rails

The Internal Tool Scope Document That Stops AI From Going Off the Rails Every non-technical founder who has opened Cursor, Lovable, v0, or Replit Agent to build an internal tool has lived the same...

By WitsCode11 min read

Every non-technical founder who has opened Cursor, Lovable, v0, or Replit Agent to build an internal tool has lived the same story. You type a paragraph describing what you need. Thirty seconds later the AI has produced a login screen, a signup screen, a forgot-password flow, a user profile page, a settings tab, an empty notifications icon in the header, and a dashboard with three fake charts. The form you actually wanted is somewhere on screen four, missing the one field that matters.

This is not an AI failure. It is a scope failure. AI coding tools are helpful in exactly the way a brand-new intern is helpful. Give them room to guess what you want and they will guess generously, because guessing less feels like under-delivering. The fix is a scope document short enough to fit on two pages and strict enough that the AI has nothing left to invent.

At WitsCode we will not start building an internal tool for a founder until this document exists, because the hours it saves are the difference between a tool shipped on Tuesday afternoon and a tool still being debugged next Friday. This article is the template we use, section by section, with the reasoning that makes each part load-bearing.

Why AI Tools Over-Build Without a Scope Doc

A large language model generating code behaves like an eager contractor who has been told the budget is infinite. Ask for a form, get a form with validation, accessibility labels, a dark-mode toggle, and a Stripe integration in case you want to charge for submissions later. Each addition is individually defensible. Together they turn a one-hour build into a three-day mess where you cannot tell which feature broke which other feature.

The underlying reason is that AI coding tools infer intent from context, and the context of the word "internal tool" includes every internal tool in the training data. That population includes Salesforce dashboards, Retool admin panels, and Linear clones. Unless your brief explicitly excludes things, the AI will pattern-match to the average of everything it has seen, and the average is far more complex than what you need.

A scope doc solves this by narrowing context to a single job, a single user type, and a single version. It does not describe features. It describes boundaries. Inside the boundaries, the AI is free to be clever. Outside them, it is not allowed to be helpful.

The Five Sections That Matter

The scope doc has exactly five sections. Purpose. Users. Data. Auth. Out-of-scope. More sections than this and founders start padding with feature lists that read like brainstorms. Fewer and the AI lacks enough constraint to stay on the rails.

Purpose is one sentence. Users is at most three user stories. Data is a list of fields and where they live, not a schema. Auth is a single sentence stating the login method for version one. Out-of-scope is a bulleted list of features that are explicitly not part of this build, written in the negative.

The entire document should fit on two pages. If it does not, you are describing version two, or version three, or a product. An internal tool that solves one real problem belongs on two pages. The moment it stretches to four you are designing something that deserves a proper product spec and a longer build, and the scope-doc shortcut stops working.

The Scope-Doc Template

Here is the template, exactly as we give it to founder-builders. Copy this into a Google Doc, fill in the bracketed parts, and hand it to the AI or to your developer.

# Internal Tool Scope: [Tool Name]
Version: 1
Owner: [Your name]
Date: [Today]

## 1. Purpose (one sentence)
This tool exists so that [who] can [do what] without [current painful workaround].

## 2. Users (max three stories)
- As a [role], I can [action] so that [outcome].
- As a [role], I can [action] so that [outcome].
- As a [role], I can [action] so that [outcome].

## 3. Data
Fields captured or displayed:
- [field name], [type, e.g. text, number, date, dropdown]
- [field name], [type]
- [field name], [type]

Where data lives: [Airtable base name / Google Sheet / Postgres table / Supabase project]

## 4. Auth (v1 rule)
Login method: magic link to email only.
Authorised domains: [@yourcompany.com]
No passwords. No 2FA. No social login. No profile page.

## 5. Out-of-scope (scope lock)
The following are explicitly NOT part of v1:
- No email notifications.
- No file uploads.
- No admin role or permissioning.
- No export to CSV.
- No audit log.
- No dark mode.
- No mobile-specific layout.
- No [anything else the AI might helpfully add]

Two pages. Five sections. The rest of this article explains why each one is written the way it is.

The purpose sentence is a forcing function. Founders tend to write purpose as a paragraph because a paragraph feels safer. A paragraph hedges. A sentence commits. The act of compressing the purpose to one sentence is where most of the thinking happens, and most founders discover during this compression that they have been describing two tools, not one.

The template forces a specific shape. Who uses it. What they do. What painful thing they stop doing. If you cannot name the painful workaround, the tool probably does not need to exist yet, because nobody is suffering enough to use whatever you build.

A good purpose sentence reads like this. "This tool exists so that our three-person ops team can log customer refund requests without copy-pasting between Intercom and the finance spreadsheet." A bad one reads like this. "This tool exists to improve our refund workflow and give visibility to stakeholders." The first excludes a hundred possible features. The second invites every feature an AI has ever seen on a dashboard.

When the AI reads the good version it knows it is building a form and a list, probably writing to a spreadsheet. When it reads the bad version it builds a Retool clone.

The Three-User-Story Limit and the Data Fields

The user story section is capped at three. This is the most resisted part of the template, because founders always have four, or seven. The cap is not about what the tool could do. It is about what version one will do. Beyond three stories the AI begins to infer that this is a multi-role product and starts building role switchers, permission checks, and settings pages to manage the roles it invented.

Three stories also keeps the interface honest. Three actions fit on one screen without tabs. Once you have four or five, the AI reaches for a sidebar, and a sidebar is the visual signal that you are no longer building a tool. You are building an app. Apps take weeks. Tools take hours.

Write the stories in the classic format. As a role, I can do a thing, so that an outcome happens. The outcome clause is the load-bearing part. It is what tells the AI which version of the action to build. "As an ops lead, I can mark a refund as approved, so that finance can process it in their weekly batch" is a very different tool from "As an ops lead, I can mark a refund as approved, so that the customer is emailed immediately." The first needs a status field. The second needs an email provider and a template system you did not ask for.

If the outcome requires infrastructure you do not want in v1, rewrite the story until the outcome is achievable with what you already have.

Non-technical founders should never write database schemas. Schemas are an AI trap. The moment you describe tables and foreign keys, the AI builds a normalised relational model with join tables, and you end up with a tool that requires a database migration to add a dropdown option.

Instead, list the fields you actually need on the screen. Name and type, nothing else. If a field is a dropdown, list the options. If a field is optional, say so. Say where the data lives in plain English. Airtable, a Google Sheet, a Supabase project, a Postgres database your developer already set up. The AI will handle the connection. What it cannot handle is guessing what you meant by "user record."

Five to eight fields is the sweet spot for a v1 internal tool. More than ten and the form becomes the kind of thing people avoid filling in, which defeats the purpose of the tool. If you have twelve fields you want to capture, the scope doc is telling you to build two tools, or to accept that half the fields are wishlist, not requirement.

Auth is where AI tools burn the most unnecessary hours. A full auth system has login, signup, forgot password, reset password, email verification, session management, profile settings, password change, 2FA setup, 2FA verification, social login buttons, and a terms-of-service checkbox. Each one has edge cases. Together they are a week of work and the reason most AI-built internal tools feel unfinished.

The v1 rule is magic-link-only. The user types their email, receives a link, clicks it, is logged in. No password exists to forget. No reset flow is needed. No profile page is needed because there is nothing to edit. Restrict authorised domains to your company email and you also get access control for free, without building a roles system.

Magic links are one Supabase config toggle, one Clerk setting, or fifteen lines of code if you are rolling your own. Stating this rule explicitly in the scope doc removes roughly a third of what the AI would otherwise build. When you need more, you can add it in v2. Most founder-built internal tools never need more.

The scope doc line reads: "Login method: magic link to email only. No passwords. No 2FA. No social login. No profile page." Those four negatives do more work than any positive specification could.

The Out-of-Scope Section Is the Scope-Lock

This is the section most templates get wrong. Other scope documents treat out-of-scope as a polite disclaimer at the end, a place to note what will be addressed "in a future phase." That framing invites the AI to build a stub, a placeholder, a commented-out route. The section then functions as a feature wishlist rather than a boundary.

In this template, out-of-scope is the scope-lock. It is a list of features that are explicitly forbidden in version one, written in the negative. "No email notifications in v1." "No file uploads." "No admin role." "No CSV export." The negation is deliberate. "No" is a word the AI can parse. "Later" is a word the AI ignores.

Write out-of-scope after you have written the rest of the doc. Read through the other four sections and imagine what a helpful intern would add. Notifications for when a record is created. A way to upload a PDF alongside the form. A button to export everything. An audit log. A dark-mode toggle. A setting to change the timezone. Write each of these as a "No" line.

The list should be six to ten items. If you cannot think of six things to exclude, you have not thought hard enough about what a keen builder would bolt on. Common items we include by default in every WitsCode scope doc: no notifications, no file uploads, no permissioning, no export, no audit log, no theming, no mobile layout, no integrations beyond the one data source listed in section three.

When the AI reads this section it knows the walls of the room. Everything inside the walls is fair game. Everything outside is off-limits. The AI stops inventing, and you get the tool you described instead of the tool it thought you should want.

How to Use This Doc With Cursor, Lovable, or a Freelancer

Once the doc is written, the workflow is short. Open your AI coding tool. Paste the entire scope doc as the first message. Add one sentence at the end: "Build v1 of this tool exactly as specified. Do not add features from the out-of-scope list." Then hit send.

Do not describe features in conversation. If the AI asks a clarifying question, answer it by pointing back to the doc. If the answer is not in the doc, update the doc, then repeat the answer. Treating the doc as the source of truth, rather than the chat history, keeps every subsequent prompt grounded in the same constraints.

If you are handing the build to a freelancer instead of an AI, the rule is identical. The doc is the contract. Features not listed are not part of the scope. Features in out-of-scope are not part of the scope even if the freelancer offers to throw them in. Scope creep from a generous freelancer is the human version of AI over-building, and the same document solves both.

Common Mistakes Founders Make Filling This Out

The three mistakes that kill the doc before it helps anyone. First, writing purpose as a vision statement. If the purpose sentence contains the words "platform," "ecosystem," or "empower," delete it and start over. Internal tools do not have visions. They have jobs.

Second, treating user stories as a feature list in disguise. "As a user, I can see a dashboard" is not a user story, it is a screen name. A real story describes an action and an outcome, and the action has to be specific enough that you can tell whether the built version does it.

Third, leaving out-of-scope empty or filling it with vague categories like "advanced features." Vague exclusions are invitations. Specific exclusions are locks. Name the features by the names the AI would call them, because the AI is reading this doc to decide what not to build.

If the doc takes you more than an hour to fill out, you are designing instead of scoping. Stop, pick the smallest possible version of the tool that solves the one job in the purpose sentence, and let everything else become v2.

There is a benefit to this document that is not about AI at all. A founder who can write a two-page scope doc for an internal tool has, in the process, made five hard decisions. Who it is for. What job it does. What data matters. How people get in. What is not part of it. Those decisions are the difference between a founder who ships and a founder who keeps rewriting the brief.

We built the WitsCode scope-doc for founder-builders because we kept seeing smart operators stuck at the same step. Not stuck on code. Stuck on committing to a version. The doc is the commitment device. The AI tool is just the thing that executes once the commitment is made.

If you want the editable version of this template with the prompts we pair it with for Cursor and Lovable, reach out and we will send it over. Fill it in, hand it to the AI, and watch the tool get built in the afternoon instead of the quarter.

Get weekly field notes.

Practical writing on shipping products, straight to your inbox. No spam.

Need help with this?

Custom Web Applications

We design and build web apps, MVPs, and SaaS products. Talk to us about what you are working on.

Talk to us

Want to discuss non-tech founders for your business?

Start a project and we'll talk through where you are, what's working, and the highest-leverage moves for the next 90 days.