You’ve got an idea. Maybe it’s a new automation script, a blog post about network monitoring, or a side project to track server uptime. You open your editor, stare at the cursor, and wonder: How do I actually ship this?
Forget “prompt engineering” tutorials and “AI as co-pilot” fluff. After 20+ years building and breaking things in IT, I’ve settled on a workflow that works with real humans, real time, and real limitations. It’s not elegant. It doesn’t require a GPU cluster. It just works—repeatedly.
Here’s how I turn vague ideas into finished work, using AI as a tool—not the driver.
—
Define the output, not the process
Stop thinking in terms of “what AI can do.” Start with: What does finished look like?
Before touching a single model, write down:
- The concrete artifact: A 500-word blog post? A bash script? A Terraform module? A JSON config?
- The minimum viable version: What’s the smallest thing that still delivers value?
- The hard constraints: Time budget? Required tools? Target audience (e.g., “junior sysadmins,” not “developers”)?
I did this last month when I wanted to rewrite a post about log rotation failures. Instead of saying, “Make me a blog post,” I wrote:
> Output: 600-word post. Tone: grumpy but helpful. Target: Linux sysadmins. > Must include: > – Real example: logrotate failing on a 10TB log volume > – Fix: copytruncate vs create tradeoff > – One thing most guides miss (e.g., permission drift on rotated files)
That 60-word spec took 2 minutes. It kept me focused. No wandering into “how transformers work.”
AI is great at filling in blanks—but only if you’ve drawn the frame.
—
Build a lightweight “idea scaffold”
Once you know the output, break it into parts. Not tasks—chunks.
For a technical article, that might mean:
- Hook (real pain point)
- Why it breaks (real-world example)
- One fix that works and why it works
- What breaks next (maintenance reality)
For a script, it’s:
- Inputs (flags, env vars, stdin?)
- Error handling (what happens if
curltimes out?) - Output format (JSON? human-readable? syslog?)
I recently prototyped a monitoring check for TLS cert expiry. Instead of building in one go, I scaffolded:
cert_expiry.sh --host example.com:443→ outputs days until expiry- Then added:
--warn 30 --crit 7flags - Then: JSON output mode for Prometheus
- Then logging and alerting hooks
Each step was a standalone test. No “I’ll refactor later”—that’s how tech debt piles up.
Use AI to flesh out one scaffold slot at a time. Ask it: > “Give me a bash function to parse a TLS cert expiry date from openssl s_client, handling errors if the host is down. Keep it under 15 lines.”
Not: “Write me the whole monitoring script.”
—
Use AI for the “ugly middle,” not the core logic
Here’s where most people fail: they hand AI the entire task and then debug the hallucination.
AI is best for:
- Boilerplate: Config file templates, YAML headers, common error messages
- Examples: “Show me a
systemdunit that restarts a Python service on failure” - Clarity: “Rewrite this sentence to sound less like a textbook”
It’s worst at:
- Novel logic: “Design a self-healing Kubernetes operator”
- Context-aware decisions: “Which monitoring tool fits our legacy SNMP setup?”
- Security-critical code: “Generate a JWT validator” (Spoiler: it will miss edge cases.)
I use AI to write the first draft of documentation, not the spec. For a new Prometheus exporter I built, I asked:
> “Write the README for a disk_usage_exporter in Markdown. Include: > – One-sentence description > – Installation (binaries, no Docker) > – Prometheus scrape config example > – One gotcha (e.g., /proc/mounts vs /etc/mtab)”
It gave me a usable draft—then I spent 20 minutes fixing the Prometheus config (it missed honor_labels: true) and added the gotcha. The AI scaffolded; I owned the details.
—
The maintenance reality: AI-assisted work doesn’t age well
Here’s the part nobody talks about: AI-generated artifacts decay faster—especially code and configs—because they lack the why.
I’ve seen AI-written Ansible playbooks that used become: yes everywhere. They ran fine on the dev box. Then broke in production because sudoers was locked down. Why? The model didn’t learn why become matters—it just copied patterns.
So here’s what I do:
- Always annotate: In code comments, add:
# AI draft. Verified: [date]. Test: [command] - Run the failure test: Before committing, ask: “What breaks if:”
- Network drops mid-run
- Disk fills up
- User runs as non-root
- Version the scaffold: Keep the prompt + output in a
drafts/folder. When you fix it later, you’ll know what AI suggested and why it failed.
I keep a drafts/ folder in every project. Inside:
drafts/
├── cert_expiry_v1.sh # AI draft
├── cert_expiry_v1_prompt.txt
├── cert_expiry_v2.sh # My fix
└── cert_expiry_v2_test.sh # “What breaks?” test
It’s not pretty, but it’s how I sleep at night.
—
What I would do first (if you’re starting today)
Don’t overthink it. Pick one small thing and run the loop.
- Pick a finished artifact (e.g., “a 300-word tip for
tmuxusers”) - Write the spec (1–3 bullet points: tone, key point, audience)
- Ask AI for one part (e.g., “Write a hook that starts with a real frustration”)
- Test the draft: Read it aloud. Does it sound like a human who’s been there?
- Fix it in 5 minutes: Add a concrete example, tweak tone, kill the jargon
That’s it. No fine-tuning. No API keys. Just output.
I did this yesterday: wrote a tip about journalctl --since=today vs --since=yesterday (spoiler: they’re different after midnight). Spec was: > Output: 250 words. Hook: “Why your overnight job didn’t run.”
AI gave me the hook. I added the --since edge case, tested it on a VM, and hit publish.
—
Next steps (and what to avoid)
Do:
- Keep a “draft journal” (prompt + output + fix notes)
- Use AI for drafts, not decisions
- Spend more time testing than prompting
Avoid:
- “Iterative refinement” loops that never ship (AI + endless prompt tweaks = paralysis)
- Trusting generated code without running it in a throwaway environment
- Using AI to replace understanding. If you don’t know why
systemctl restartfails, ask why—don’t just paste the error into ChatGPT.
AI won’t build your work for you. But it will save you 20 minutes on boilerplate—if you keep the steering wheel in your hands.
Finished work isn’t about speed. It’s about shipping something that works, today, and knowing how to keep it working tomorrow.
Go write something. Then fix it. Then write the next thing.