(https://alexhwoods.com/dont-let-ai-write-for-you/) Don't Let AI Write For You (/_astro/_slug_.Bz7ufUMy.css) (/) Alex Woods (/about) About (Open search (cmd/ctrl+k)) (Search) () ESC (/dont-let-ai-write-for-you) 2026.03 Don't Let AI Write For You (/go-does-not-allow-truthiness) 2025.10 Go does not allow truthiness (/tightening-constraints-in-postgres) 2025.10 Tightening Constraints in Postgres (/domains-in-postgres) 2025.10 Domains in Postgres (/exclusion-constraints-in-postgres) 2024.10 Unique and Exclusion Constraints in Postgres (/types-from-tables-in-plpgsql) 2024.09 Types From Tables in PL/pgSQL (/dynamic-commands-in-plpgsql) 2024.09 Dynamic Commands in PL/pgSQL (/trigger-execution-order-in-postgres) 2024.09 Trigger Execution Order in Postgres (/inserting-data-in-postgres) 2024.09 Inserting Data in Postgres (/statement-triggers-in-postgres) 2024.09 Statement Triggers in Postgres (/avoiding-unnecessarily-running-triggers-in-postgres) 2024.08 Avoiding Unnecessarily Running Triggers in Postgres (/simple-semaphore-with-a-buffered-channel-in-go) 2024.05 Simple Semaphore With a Buffered Channel in Go (/wc-clone) 2024.05 wc clone (/two-approaches-to-building-a-chat-server) 2024.04 Two Approaches To Building A Chat Server (/building-my-own-git) 2024.04 Building My Own Git (/rust-format-strings) 2022.10 Format Strings in Rust (/genqlient) 2022.08 Genqlient (/structural-vs-nominal-type-systems) 2022.06 Structural vs. Nominal Type Systems (/is-this-thing-on) 2022.01 🎙️, 🎙️ - Is this thing on? (/cloud-kms-gcp) 2021.10 Evaluating GCP's Cloud Key Management Service (/invert-a-binary-tree) 2021.07 Invert a Binary Tree (/i-made-a-dumb-linux-mistake) 2021.07 I made a dumb linux mistake (/what-happens-when-you-go-to-this-site-dns) 2021.07 What happens when you go to this site? (/running-containers-on-aws) 2021.07 Running Containers on AWS (/exploring-kubernetes-ingress) 2021.07 Exploring Kubernetes Ingress (/how-to-revert-a-merge-commit) 2021.07 How To Revert a Merge Commit (/how-to-reverse-a-linkedlist) 2021.07 How To Reverse a LinkedList (/everything-useful-i-know-about-kubectl) 2021.06 Everything Useful I Know About kubectl (/what-is-a-vpn) 2021.05 What is a VPN? (/lua-libraries-in-istios-envoyfilter) 2021.04 Lua Libraries in Istio's EnvoyFilter (/pulumi-vs-terraform) 2021.02 Pulumi vs Terraform (/notes-on-jan-4th-slack-outage) 2021.01 Notes on Jan 4th, 2021 Slack Outage (/socket-hang-up) 2021.01 Socket Hang Ups (/consistent-hashing) 2020.09 Consistent Hashing (/why-service-mesh) 2020.09 Why spend innovation tokens on a service mesh? (/overlays-over-templating) 2020.07 Overlays over templating (/bigtable-intro) 2020.05 Intro to Bigtable (/joining-streams) 2020.03 Deep Dive into Joining in Kafka Streams (/sensible-schema-evolution) 2020.03 Sensible Schema Evolution (/landing-a-message) 2020.02 Landing a message from Kafka (/git-home) 2020.02 Git home (/scope-functions) 2020.02 Choosing the right scope function in Kotlin (/inline-functions) 2020.01 Inline Functions (/reverse-integer) 2020.01 Kotlin Algorithm Challenge #3 (/cdc) 2020.01 Change Data Capture (/data-classes) 2020.01 What do data classes give you in Kotlin? (/kafka-hello-world) 2020.01 Kafka Hello World (/longest-substring) 2020.01 Kotlin Algorithm Challenge #2 (/kotlin-lambda-syntax) 2020.01 Kotlin's Lambda Syntax (/add-two-numbers) 2019.12 Kotlin Algorithm Challenge #1 (/exactly-once) 2019.11 Exactly Once (/introduction-to-celery) 2019.10 Introduction To Celery (/event-loop-polling) 2019.08 How the Node.js Event Loop Polls (/async-io) 2019.07 Asynchronous I/O (/generators-in-javascript) 2019.07 Generators in JavaScript (/classes-in-javascript) 2019.07 Classes in JavaScript (/modules-in-nodejs) 2019.06 Modules in Node.js (/data-structures-and-database-indexes) 2019.06 Data Structures and Database Indexes (/http-persistent-connections) 2019.06 HTTP Persistent Connections (/gits-dag) 2019.06 Git's DAG (/gradle-is-a-dag) 2019.05 Gradle is a DAG (/topological-ordering) 2019.05 What is a topological ordering? (/dag) 2019.05 What is a DAG? (/dijkstras-algorithm-in-kotlin) 2019.04 Dijkstra’s Algorithm in Kotlin (/how-similar-is-the-execution-of-java-and-javascript) 2019.04 How similar is the execution of Java and JavaScript? (/introduction-to-monte-carlo-methods) 2015.07 Introduction to Monte Carlo Methods Don't Let AI Write For You Mar 8, 2026 When you write a document or essay, you are posing a question and then answering it. For example, a PRD answers the question, “What should we build?” A technical spec answers, “How should we build it?” Sometimes the question is more difficult to answer—“What are we even trying to accomplish?” And with every attempt at answering, you reflect on whether you’re asking the right question. But now, of course, we have LLMs. I’m seeing an increasing amount of LLM-generated documents, articles, and essays. I want to caution against this. Each LLM-generated document is a missed opportunity to think and build trust. Thinking The goal of writing is not to have written. It is to have increased your understanding, and then the understanding of those around you. When you are tasked to write something, your job is to go into the murkiness and come out of it with structure and understanding. (https://essay.app/guide/) To conquer the unknown . The second order goal of writing is to become more capable. It is like working out. Every time you do a rep on the boundary of what you can do, you get stronger. It is uncomfortable and effortful. Letting an LLM write for you is like paying somebody to work out for you. Building Trust There are social effects to LLM-generated writing too. When I send somebody a document that whiffs of LLM, I’m only demonstrating that the LLM produced something approximating what others want to hear. I’m not showing that I contended with the ideas. It undermines my credibility as a person who could lead whatever initiative comes out of this document. That’s unfortunate. I could have used this opportunity to establish credibility. LLM-generated writing undermines the authenticity of not just one’s writing but of the thinking behind it as well. If the prose is automatically generated, might the ideas be too? ((https://rfd.shared.oxide.computer/rfd/0576#_llms_as_writers) Using LLMs at Oxide: LLMs as Writers ) How LLMs can be used in the writing process LLMs are useful for research and checking your work. They can also work well for quickly recording information or transcribing text (neither of which are what I mean by “writing”, as in “writing an essay”). They are particularly good at generating ideas. They thrive in this use case because if they generate 10 things and only one is useful, no harm is done. You can take what is useful and leave the rest behind. These LLMs will increase efficiency in delivering software. But in order to make the most of them, we need a simultaneous rise in our level of thoughtfulness.