Build an Internal Tool Without Bugging Engineering
You can build a working internal tool in a single afternoon without filing an engineering ticket, using AI as your implementation partner from blank page to deployed URL.
Key Takeaways
- Comprehensive strategies proven to work at top companies
- Actionable tips you can implement immediately
- Expert insights from industry professionals
The Engineering Queue Problem
There is a category of internal tool that every team needs but never quite gets built: the CSV processor that formats reports the way the finance team wants them, the intake form that routes requests to the right person, the dashboard that pulls together numbers from two different sources. These tools are too small to prioritize in the engineering backlog and too important to keep doing manually. They sit in a limbo where the workaround persists for months or years.
AI changes this. The barrier to building a simple internal tool is now well within the reach of anyone who can describe what they want in plain English and is willing to iterate on a working prototype. You do not need to be a developer. You need to be clear about the problem and comfortable clicking through a few test cases.
What You Can Build Without Engineering
The most accessible category is text transformation tools: paste in raw content and get formatted output. A meeting transcript formatter, a job description cleaner, a proposal structure generator, a data normalization script. These take one focused hour to build and test.
The next category is lightweight form-to-output tools: a user fills in a structured form and gets a generated document back. An RFP response template, a brief generator, a performance review draft. These take two to three hours and require a little more iteration.
The more ambitious category is data processing pipelines: a script that reads a CSV, processes each row through an AI step, and outputs a new CSV. A lead enrichment tool, a content categorization script, a document classifier. These are also buildable without engineering support, and the code examples in this post will get you started.
Prompt
"I want to build an internal tool that does the following: [describe the input, the transformation or decision, and the desired output]. Write a complete Python script that does this using the Anthropic API. Include clear comments and a short README at the top explaining how to run it."
The Build Pattern
The pattern that works consistently is: describe, generate, test with real data, iterate. Start by writing a one-paragraph plain English description of what your tool does, what goes in, and what comes out. Paste that into Claude with a request to generate a complete script. Run the script on three or four real examples from your actual workflow. Note what works and what does not. Feed the failures back to Claude with specific corrections. Most tools reach a usable state within two to three iteration rounds.
For deployment, a Python script that runs locally is often all you need. If you want to share it with your team, Streamlit turns a Python script into a browser-based UI in under an hour. If you need it to run on a schedule, a simple cron job handles that. Engineering involvement is optional at every stage.
import anthropic
import csv
import sys
# Internal tool: classify and enrich a CSV of support tickets
# Usage: python enrich_tickets.py tickets.csv output.csv
client = anthropic.Anthropic()
def classify_ticket(subject, body):
response = client.messages.create(
model="claude-opus-4-5",
max_tokens=256,
messages=[{
"role": "user",
"content": (
"Subject: " + subject + "
"
"Body: " + body + "
"
"Classify this support ticket. Return JSON with keys: "
"category, priority (low/medium/high), and one_line_summary."
)
}]
)
return response.content[0].text
def process_csv(input_file, output_file):
with open(input_file) as f_in, open(output_file, "w", newline="") as f_out:
reader = csv.DictReader(f_in)
fieldnames = reader.fieldnames + ["ai_classification"]
writer = csv.DictWriter(f_out, fieldnames=fieldnames)
writer.writeheader()
for row in reader:
row["ai_classification"] = classify_ticket(
row.get("subject", ""),
row.get("body", "")
)
writer.writerow(row)
process_csv(sys.argv[1], sys.argv[2])
Prompt
"The script you wrote works for most cases but fails when [describe the failure]. Here are two examples of inputs that produce wrong outputs: [paste examples]. Fix the script so it handles these cases correctly, and explain what you changed and why."
Want to build this live with Aki?
Join a Lightning Lesson and go deeper on this topic. Browse upcoming sessions →
Aki Wijesundara
Expert team of AI professionals and career advisors with experience at top tech companies. We've helped 500+ students land internships at Google, Meta, OpenAI, and other leading AI companies.
Ready to Launch Your AI Career?
Join our comprehensive program and get personalized guidance from industry experts who've been where you want to go.
Table of Contents
Share Article
Get Weekly AI Career Tips
Join 5,000+ professionals getting actionable career advice in their inbox.
No spam. Unsubscribe anytime.