I use large language models heavily. For this site, for the browser extension in the next chapter, and for nearly all of the development work in the chapters after that. If that bothers you, this is the place to stop reading, and I won’t be offended.
Every commit in the student information system’s repository ends with a line crediting the model as a co-author. That’s not a formality. The model writes a great deal of the code, and a fair amount of the first drafts of the words, including these ones. It also did a lot of the reading: the research in Chapter 2 meant going through more than 1,600 pages of user guides and the transcripts of a couple of dozen recorded training sessions, and I wasn’t going to do that alone in an evening.
What that means
I decide what gets built and how. I set the rules the model works under, I read what it produces, I push back, and I throw a lot of it away. When something is wrong in here, it’s my mistake, not the model’s. It’s a tool, and I’m the one holding it.
It also means the pace you’ll see in Chapter 3 isn’t the pace of one person typing. It’s one person directing something that types very fast, and that pace says as much about the tools as about me. It’s also very much a part-time project: evenings, early mornings, and whatever’s left over after my actual job and my family.
What it doesn’t mean
No language model touches student data. The system has a rule, written down where the model has to read it before it does anything: no third-party services in the data path. No analytics, no hosted error tracking, and no calls to an LLM with anyone’s information in them. It has to run, entirely, from a container on a school district’s own server.
And there is no real student data anywhere in this project. Every name, address, phone number and mark in every screenshot here is fictional. The phone numbers all start with 555 for a reason.
On the word “AI”
I call them LLMs, because that’s what they are. “Artificial intelligence” is a marketing umbrella that covers everything from a spam filter to a science-fiction villain, and using it for a large language model mostly serves to make the model sound like more, or less, than it is. A large language model is a specific thing with specific strengths and specific, sometimes spectacular, failure modes. Naming it precisely makes it easier to think about clearly.
Yes, I know this makes me pedantic. It also makes me correct.