I have decided to disable comments on the blog. There's too much machine-generated noise. Every moderation request I get is a distraction. If you want to talk about my writings, feel free to reach out. I'm always glad to discuss these ideas, but the ROI on comment moderation is not good enough for my time.
Monday, November 2, 2026
Thursday, October 29, 2026
Only better is better
I found myself improvising a turn of phrase this semester that I quite like. I was trying to explain to my CS222 students that it doesn't matter how many user stories they complete but rather that they complete well the ones they attempt. That is,
More is not better. Only better is better.
This feels countercultural in formal education, where students sense that they get more points for more work. The popularity of AI-assisted programming actually gives me a good hook here to explain my meaning: generative AI can output more, so clearly that's not what we need students to be able to do. What we humans need to do is double down on understanding what "better" means.
I found this pithy phrase useful in my game programming class as well. As I wrote about earlier, I have provided students with a style guide that they are expected to follow. To enforce this, the grading scheme requires one to follow the style guide in order to earn higher than a D grade. In plain English, to violate the formal style guide is to do poor work. I fear many of my students haven't caught the meaning of this, and I suspect it is because of the institutional collapsing of "F" and "D," the systemic failure to account for successful but poor quality work.
Friday, September 25, 2026
Back Home Again in Indiana
On Wednesday, I stayed on campus later than usual so that I could attend a public presentation by Ben Vu, a successful and inspirational Ball State alumnus. It was a good opportunity for me to stop by the library to pick up some early sword and sorcery books that I learned about in my new copy of XNOO #1. As usual, I took the stairs.
The stairwells of Bracken Library are grey and stuffy. They are purely utilitarian, devoid of any attempt at beauty. Every time I take the stairs, I reflect on the many times I have encouraged my students to use those barren walls for guerilla artwork—who would even know?
Two books in hand, descending the stairs from the fourth floor, I was in high spirits, and so I began humming to myself. The acoustics astonished me. The slightest note rang grandly. The boxy stairwell is truly an echo chamber. A song spun up in my head, a somber ballad about a man singing alone in a stairwell. But I did not open my lips. I hummed my invented melody ever so softly, lest… lest what, exactly? I did not want to disturb any other evening stairwalker, even knowing there would be none. I think, mostly, I was afraid that someone would find me singing in the stairwell. My recent reading of Plutarch’s How to Resist Pressure came to mind, and I passed through the doors to the ground floor with a sincere sense of dysopia.
Bracken Library recently installed self-checkout kiosks, but I handed my books to the lone librarian. I see him there regularly, and he is quick to join in friendly smalltalk. He agreed that sometime one needs early 20th century fantasy stories to balance out “work” readings.
Walking back to the Robert Bell Building, I tried to remember the last time I encountered anyone making music on campus besides at School of Music events. The day I was attacked by an enraged Canada goose last year, I sought solace under a tree where an undergraduate was plucking on his acoustic guitar. He had acknowledged, without emotion, that this particular goose attacked everyone who approached the pedestrian bridge. From where he sat, he could simply watch it happen. The fact that he asked if I was okay makes me think he was a detached creative type and not a schadenfreude junkie.
Besides that, I cannot remember encountering anyone making music together outside of rehearsals and concerts. Everyone has headphones or earbuds now—everyone is consuming music all the time. When I ask my students to go 24 hours without a screen, one of the first things they comment upon is the lack of prerecorded music. I don't remember anyone mentioning filling the void with sounds of their own.
Just over a hundred years ago, my great grandfather—my namesake—helped found a social club specifically for singing. Well, probably for drinking and singing, but definitely for singing. Legend has it that they founded the club after showing up tipsy for the Christmas Midnight Mass choir and being reprimanded by the pastor.
The world needs more drinking and singing.
All roads lead me back to G. K. Chesterton, who is at once my inspiration and my foil. There are days when this melancholic can almost understand his joy. Chesterton’s The Flying Inn is a veritable paean to the collective delight from which song spontaneously springs. Let me sit with him and Belloc and enjoy laughter and red wine.
Walking to Wednesday night's presentation, I noticed that there are no pianos between Robert Bell and the Ball Communications Building. I suppose one should not expect there to be any pianos. But if there were a piano, it would mean something. It would be a sign. It would be an invitation.
“Back Home Again In Indiana” was written in 1917 by James Hanley and Ballard MacDonald. I have been playing it on piano out of The Real Book Volume II. The Real Book has no lyrics, so I looked for a lead sheet with lyrics online. The search is representative of the state of things: despite the song’s being in the public domain, there are no free folios, but many people sell you one. Undeterred, I found my mup user guide and made my own song sheet.
Yesterday morning, I carried my spare six-string to the office and printed out twenty copies of the song. I distributed the song sheets at the beginning of each of my three classes, informing the students that we were going to start with a sing-along. And then we sang. Most were sotto voce, but a few really got into it, not because they were talented singers but because they were having a good time.
I forgot to ask for the song sheets back after the second class, and several students kept their copies. Good. It was easy enough to print some more, and I used that opportunity to bring my guitar into the main office. I told the staff there that I was starting each class with a sing-along, and I asked if they would like to do one as well.
“Yes.” Kim said.
“Then here’s your song sheet,” I replied, handing one over.
“Wait, now?”
“Yes.”
The department chair came out of her office, and we sang the song once through. There was a new student employee in the office yesterday. She pointed out that this was not in the job description.
Only one student asked why we sang. I told her it was because culture is not someone else. We are the culture. We make the culture. We make it the way we want it to be. We are the dreamers of dreams.
Friday, September 4, 2026
Fixing the student progress report system
It turns out that the approach I described in an earlier post simply does not work. I didn’t mention in that post that I developed it with the help of an interaction with ChatGPT. Turns out, trusting ChatGPT led me astray: it is technically impossible to use Google Sheets and Apps Script in the way I thought I could. Mea culpa.
Today, I stood up a new solution. Now, each student gets a UUID which is sent as a custom parameter to my script, and this returns for them a view of their row of the grading sheet. This variation was also developed in concert with ChatGPT, but one major difference is that this one verifiably works. The AI interaction was helpful in quickly identifying how to use Apps Script to generate UUIds and read http parameters.
In this post, I am going to try to reconstruct the steps I followed to get all the pieces working. It assumes I already have a grading spreadsheet set up that has all the students’ university emails in it.
- Create a function in the Apps Script to generate a UUID. It looks
like this:
function UUID() { return Utilities.getUuid(); } - In the sheet, call this function for each student to give each a UUID. Then, copy and paste those values back in as plain text values.
- Create another column to construct the URL from that UUID. For example, have the stub URL in a cell, then concatenate “&code=” with the UUID after it.
- Export the sheet in
.xlsx. - From Word, start a new document, then from the “Mailings” menu, start a new mail merge. Note that this cannot be done in Office online: it requires running Word locally.
- Use “Select Recipients” to link the Excel file as a data source.
- Type the message, using the “Insert Merge Field” tool to put the student’s URL in place. “Preview results” is a toggle button (surprise!) that can be used to check that it is merging as expected.
- Choose “Finish and Merge” to generate all the emails, which will not actually send yet.
- Open Outlook, which will step through and send each email.
Incidentally, this is my first blog post that I have written in
Markdown and then turned into HTML with pandoc ( pandoc post.md -o post.html). It has worked great and is a
much better writing experience for this kind of post.
Friday, July 31, 2026
Notes from Spring 2026 CS390 "Final Exam" meeting
Back in April, I mentioned that the "final exam" for my game preproduction class was primarily a discussion. Cleaning up my office, I found my voluminous notes from that meeting. The four questions I asked of the students were, in order, the following:
- What do you think is missing from your preproduction work?
- What is something you know now about preproduction that was unclear before?
- What advice would you give yourself or to someone starting preproduction?
- What questions do you have?
- Think of game design as gift-giving, not as tinkering
- Fast prototypes to articulate ideas are good
- Don't spend too long trying to solve a problem
- Take prototyping and playtesting seriously—don't make something just to have it
- Set deadlines, use a calendar
- Write game ideas down
- Take feedback and write it down
- Prototype instead of just thinking it will be fun
- Mess it up
- Don't be afraid to fail
- Learn your scope (explore, but know strengths) and know when to move on
Sunday, July 19, 2026
Some ways to get a McGuffin from the Goblin King
Cleaning my office this morning, I came across some design notes that struck me as too interesting to throw directly into the recycling bin. I don't quite remember the context, but I must have been thinking about Apocalypse World style "moves" (in-game action types) and generative storytelling. It's probably from when I first learned about Viv, which I still have yet to play with. The paper itself contains a list of the moves that will be included in the third edition of Apocalypse World, a few notes about what it would mean to randomize locations and their denizens, and then an exploration of the different ways one could get a McGuffin from a Goblin King. These are what I came up with as possible stories:
- Find him, kill him, take it
- Find him, convince him to give it to you
- Find him, steal it, escape
- Find someone else, convince them to steal it
- Find him, threaten him, he attacks (jump to another case)
- Find him, threaten him, he gives it
- Find him, beat him up, demand he gives it, get it
- Find him, offer something else in trade, trade for it
- Find him, observe him for leverage, deploy leverage as part of demand, receive it
Tuesday, June 23, 2026
Summer Course Revisions: CS315 Game Programming
I had a break from teaching CS315 Game Programming last Fall while I was on sabbatical, and now I'm gearing up to get back into it. It's a fun course that has always had the same mission but has taken many different forms. I'm feeling pretty good now about my plans for Fall, and so I want to document some of the key points here. The draft course plan is already online. As with my CS222 course, there are still some areas where I want to rework the prose, and I have only posted activities for the first few weeks, but I feel like the structure is where I want it to be.
Grading
Three years ago was the last time I used checklist grading in CS315 in its original form. Two years ago, I switched to a different model inspired by a book I had read. I wrote about how it had some good qualities, but it caused friction with Canvas, and it also had me doing a lot of regrading. Thinking about my plans to kick Canvas to the curb, I figured I might get rid of the interface problems. Yet, the more I worked on my plans, the more I kept drifting back to checklist-based grading. I drafted the first four weeks of exercises this way while I tried to identify why I still felt unsettled.
At some point, it struck me that a completely different way to handle functional requirements articulation is through user stories. This is the way I do it in the prerequisite course (CS222), and it's also how I coach teams to do it in the CS315 final project. Why not deploy user stories in the weekly exercises as well, thereby also giving example of something I want students to do later? It seemed sensible, and so the only missing piece was to map this to grades. I decided to go with the same simple model I started using recently in some CS222 sections, where the grade is based on the number of completed stories.
I am happy with the articulations I have put up for Exercise 0 and the three increments of Exercise 1. The only piece that gives me some pause is that the grading scheme does make it seem like missing a story is punitive rather than that meeting stories is rewarded, but I think this is part of the systemic problems I have inherited. At least I don't think I'm reinforcing them, and I can explain to students that they still have the option to skip lower priority stories and earn a lower grade if their situation makes that prudent.
As part of my Canvas-kickery, I'll be using GitHub issues to give student feedback. This is a natural place to give feedback in the first half of the semester, when students are working individually on projects. I haven't thought much about the final project yet, but I suspect that once the semester is running, a path will open up for me. CS315 is not a course where we traditionally use Google Drive, but since I'm already collecting students' GitHub usernames, I can also collect Google Account names in order to set up a dashboard system like I described in my previous post.
Style
There are two major benefits to teaching students to have good style in this course. First, there is the intrinsic value to the student of learning to follow an established style guide. Second, it makes it much easier for me to read a lot of student projects if they follow the same structure. It is not so different from requiring a particular style in order to approve a pull request.
For some time, the exact style requirements have been distributed through the early semester exercises. This had the advantage that it allowed me to ramp up expectations as students became more comfortable with the game development ecosystem. The downside was that students had to build up knowledge piecemeal about the expectations, remember where to find reference material, and potentially build up bad habits until the right models were shown.
This year, I've done something I've wanted to do for several months: I constructed my own style guide. It has its own page on the course site, and all of it is required from the second week of the semester. It consolidates many aspects that previously were spread out across different grading levels in the checklists. It also puts almost everything in one place, which I hope will be useful. One place I could not easily bring into one site is the actual code style, for which I am simply having students follow Godot Engine's published conventions. For commit messages, I used to ask students to read Chris Beams' article on commit messages and follow his guidance, and this was frequently a source of frustration for students: some didn't understand version control well enough to follow his arguments, many skipped reading crucial parts of it, and some just had bad habits. Now, I have simply included his seven rules and linked to his article for more information.
Accessibility
The course site is built from the same Astro configuration as the CS222 one I referenced earlier. Writing and revising in Markdown is quick, and component-oriented design can be useful. One of the main reasons I want to use Markdown is that I want to easily include source code in the exercises. Unfortunately, the default Astro formatter violates WCAG 2.1 AA requirements that are now being required for all teaching material.
It took several hours to sort out a solution, and I ended up using the github-light-high-contrast Shiki theme in order for my code to pass muster. It does not have the aesthetics that I wanted, but at least WAVE says that it passes all the requisite checks.
Tuesday, June 16, 2026
Summer Course Revisions: CS222 Advanced Programming
I always revisit my courses over the summer, but this year there are higher stakes than usual. Ball State has opted to change the calendar from 15 weeks of instruction to 14 weeks. There will be significant ramifications for curricula with long prerequisite chains such as my department has, but those problems will have to be tackled systematically later. For now, the immediate challenge involved shaving a week from an already packed semester. This coincides with two other major changes I have had in mind: reviewing the textbook and getting away from Canvas. I plan to give each a fair treatment in this post, although some details may be reserved for future writings or conversations.
My draft course plans are available online. Much of it is copied over from Spring for expediency. I would like to tighten up some of the lengthier sections, but for now, it will suffice. The projects will be posted when they are assigned, as usual.
The Calendar
A Book
An Edupunk Reaction
![]() |
| Sample sheet |
![]() |
| Progress Report WebApp |
Tuesday, May 26, 2026
A few notes on branching, microbranching, and pants
I am wrapping up work on a preproduction build of a digital gamebook that has me writing a lot of interactive fiction. After exploring my options and spending a few days on a custom engine, I landed on using ink. I have enjoyed working with it, and after a short learning curve, I find that it really does help me focus on the writing. That is, although it has a formal syntax that one must deal with, it mostly stays out of the way.
Coincidentally, a friend recently pointed me to the Game Narrative Kaleidoscope podcast. I just finished listening to the sixth episode's interview with Kate Gray. Two bits caught my attention that I wanted to capture here on the blog so I don't forget them.
The first is just a simple turn of phrase that the interviewers and guest all knew but that was new to me: the distinction between planners and pantsers. Writers of interactive fiction seem to identify as one or the other, the former being those who plan out their story carefully before writing and the latter being those who go "by the seat of their pants." In my case, I had sketched a quest structure with a few important branches, but once I got into writing, I really found that I could pants a lot of it.
The other was a distinction Gray drew between conventional branches and microbranches. She pointed out that many use "branching" to refer to the big, game-changing decisions that a player makes during play. However, there are also lots of smaller decisions one can make, particularly in dialog, that can serve other purposes. Often, this purpose is merely performative, allowing the player to choose a voice for their character. Other times, it is used for subtle worldbuilding. The important thing is that they are not important things, and Gray discussed how much she enjoys attending to them.
This struck me since I spend a lot of time with my students talking about how, in game design, decisions should be meaningful. A decision that is not meaningful is a false choice. Of course, that's a sort of ludological perspective, and it's true in the cases where it applies. Gray's interview gave me a vocabulary to talk about those other kinds of choices, the ones that only matter to the player and not necessarily to the game.
I have been playing Heaven's Vault in part to try to see through the experience to the ink layer below. It presents a lot of microbranches, some of which seem to have long-term impact on the game but many others of which are decorative. The dialog is all brief and punchy, no more than one or two sentences before another choice is made. It has a good rhythm. I am trying to understand the game in the context of other playful narrative experiences. I have been enjoying my page-a-day adventure calendar more than I expected even though it has very few decisions and no significant branching; after all, the next day's page has already been printed. I also picked up The Raiders of the Dune Sea, a gamebook that, at first glance, seems to favor longer narrative passages.
In my preproduction prototype, I have some scenes with lengthy text passages and some with frequent microbranches. Once I pull it together, I need to get it in front of some different representative players to see which best carries the themes I am exploring.
Friday, May 1, 2026
A new way to start classes
Now listen! and before I start,
give me your hearing and your heart,
for words will quickly disappear,
if they aren't heard in heart and ear.
Some men will hear and then commend
things that they cannot comprehend.
Their sense of hearing lets them hear it,
but once the heart has lost the spirit,
the words will fall upon the ears
just like the wind that blows and veers.
The words don't linger there or stay;
in a short while they fly away,
if the unwary heart's asleep,
because the heart alone can keep
the words enclosed. The ears, they say,
are just the channel and the way
by which the voice comes to the heart.
But the heart's able to impart
the voice that enters through the ears
unto the breast of him who hears.
So he who would hear me must start
by giving me his ears and heart,
because, however it may seem,
it's not a lie, tall tale, nor dream.
Chrétien de Troyes, Yvain, the Knight of the Lion, translated by Ruth Harwood Cline (University of Georgia Press, 1975), lines 141–164.
I am thinking of reciting that passage as a way to start next semester's classes.
Thursday, April 30, 2026
Reflecting on CS390, Spring 2026 edition
Reflecting on CS222, Spring 2026 Edition
I had a fun cohort of students in CS222 this semester. Each team designed a final project of the "connect to a Web service and do something with the data" variety. In many ways, their foibles and experienced were akin to past students, but something that stood out to me was how well they asked each other questions. It is not clear whether I have done something different to foster this; one possible factor is that I have improved the requirement that teams give a technical lesson as part of their presentations.
We cover a lot of ground in CS222, and so I am concerned that next time, I will have only fourteen weeks of instruction rather than fifteen. The university is changing the academic calendar as of Fall 2026, and it will be hard to find a week's worth of work to remove. Also, students coming in will have two fewer weeks of classroom experience programming; given that many students do not do much independent practice, this will have a significant effect on downstream courses. Coincidentally, I just got out of a meeting this morning where we talked about how much more we want to teach within the undergraduate major, and yet we will have eight fewer weeks in which to do what we are already struggling to fit in.
My course requires students to read and evaluate "project code," which is a term I define but that a majority of students don't understand. Either they don't read the instructions or they lack the ability to distinguish between code-for-learning and code-to-do-something. As a result, many of them look back on their own code that was just purely pedagogic; others find code on GitHub, which I recognize is a leap of faith, but they look at code that is just someone else's classroom or tutorial project. This leaps out to me upon inspection, but because they have only ever read pedagogic code, I don't think they recognize it. Hence, rather than just refine by definition, I think I need to point them toward specific examples of projects that are appropriate. I hate to do this because there is so much code out there and I want them to find projects that are interesting to them. Yet, despite this encouragement, almost no one has ever done that, so maybe that's a dream not worth chasing. I would need to set up some guardrails to prevent two students from evaluating the same block of code, which is also something I am not keen on. Perhaps I need to set up some kind of draft.
I have had a note in my planning spreadsheet for some time to remind students that a good way to think about SRP is responsibility to whom. Also, though, there's a second edition of Clean Code out now that I haven't read yet. I need to see if the new edition is worth switching to, especially around explanations of OO principles that often trip students.
My final note is about the final exam. Many years ago, it comprised only reflective questions, and those gave me an insight into the student experience. A few semesters ago, I was concerned about students blowing steam, and so I added a content question as well, to make sure students could express some of the fundamental class topics. One of these questions has been perennially challenging to articulate correctly. Essentially, the question is trying to see if students understand that they should be able to make a list of unit tests they have yet to write and that these should be SMART. The trouble is that if I remind them that each step has to be SMART, then I have given them the answer. What happens is that students will say that their first step is to "write some tests," for example. That is not wrong, but it also doesn't illustrate what I'm trying to get at. Relevantly, I think many student teams continue to struggle with this idea throughout the semester, that they should always have a goal to work toward. TDD is supposed to push them in this way, but in practice, many fall back on old habits of just plowing forward without discipline. So, I think this points toward two other action items for me: first, to use more class time to have them practice articulating what their immediate next steps are, like Kent Beck does in Test-Driven Development By Example, and also then to use a similar framing to ensure that they can do this individually, as an outcome of the class.
Monday, April 27, 2026
Reflecting on CS215, Spring 2026 edition
Introduction
Course Structure
Player Logs
Design Logs
Once again, I required my students to maintain design logs during their final project. I love this idea, and I am sure it helps them think through their practice. However, I think I can make the progress a bit smoother. For example, I required them to follow a particular document structure, but many struggled to read and follow the instructions. Rather than be indignant about this, I could provide a template to remove some friction. Similarly, I gave them some latitude as to what specifics go into the design logs, but they probably lack the experience and wisdom to make this decision well. I have them read Dan Cook's article, where he appropriately provides some guidance but no rules. I think I should give them a few more rules in the spirit of shuhari.
Workshopping
Rules
I was initially surprised when, reading their final submissions, that their rulebooks were low quality. Many were missing fundamental details so that it was clear that the rules articulations themselves were not tested. My evaluation rubric enthroned a clear rules articulation as being a requirement for a good grade on the final project. I reflected on the course and realized that most of the students had completed the semester without ever reading an actual rulebook. For their player logs, they either used a digital interpretation of a game such as Board Game Arena or they were taught a game by a friend. Digital adaptations are deceiving here because software prevents players from doing things that they ought not do whereas in a tabletop game, you are only beholden to the laws of nature and localized miracles.
The students had never worked with the genre of game rules, and so clearly I could not hold them accountable to that genre's standards. It still bothers me that the CS majors in particular did not deploy their programming knowledge to write clear rules anyway, since rulebooks are essentially programs run on people, but that doesn't change the fact that I did not scaffold a good learning experience to make them good at it.
Being able to articulate the rules should be part of the class. After all, I encouraged them to think about posting their work on itch.io or someplace similar, but if the work is unclear, then it may do more harm than good. Next time, I need to think about this particular deliverable the way that I handle other incremental development tasks: give them a scaffolded experience with deadlines for draft submissions and/or rules-based playtesting.
Tuesday, April 21, 2026
What we learned in CS222, Spring 2026 edition
I worked my CS222 students through my usual semester reflection exercise today. I gave them five minutes to write down everything they learned this semester that was related to CS222, then we set a timer for 30 minutes while they offered items and I wrote them on the board. For some reason, we only had nine people in class today, but these nine came up with 88 items. I was going to give then six votes (because ceil(lg(88))=6), but a student in the front agreed with me that five was more symbolic, so they got five votes to mark the items most important to them.
The distribution of votes was unlike any I have seen before, and this may be because of the low attendance. Two items rose quickly to the top, with five and four votes respectively, but the next classification were with two votes, of which there were six. After a brief reflection, I decided to seize the opportunity and go ahead and mark all eight of these as "top items" for use in the final exam. These items, and their vote counts, are as follows:
- Clean Code (5)
- TDD (4)
- Version control (2)
- Using an API (2)
- SRP (2)
- Coding with a team (2)
- Red-Green-Refactor (2)
- Always run all the tests (2)
Friday, April 17, 2026
Vlaada Chvátil's observations on diplomacy and winning
I just finished listening to Vlaada Chvátil's appearance on Justin Gary's Think Like a Game Designer podcast. It's definitely worth a listen for game designers and fans of Chvátil's work, and there were a few surprises along the way. Today, I want to share two brief observations that were shared at the end of the episode.
First, Chvátil mentions that he stopped caring to make or play games of diplomacy: the metagame is entirely about convincing the table to go after the person in the lead but never to go after yourself. All the resource management that comprises the systemic game becomes moot in face of the human game of negotiation (or, as Gary quipped, who whines best). This is particularly interesting to me because of some conversations with my game design students this semester. I have pushed several to think about the player as a first-order component of the game—that they are something you should contemplate when designing systems. Obviously, player interaction can be fun and interesting, but Chvátil is pointing out a limit. It is like an amortized analysis of an algorithm: when one factor dominates, the rest become irrelevant.
Second, Chvátil says he does not care for games where the dominant strategy is to hide that you are winning: it is unsatisfying other players if you can obscure your standings and then surprise everyone that you have won. This played into a theme of the whole interview in which Gary was trying to understand what connects Chvátil's incredibly diverse oeuvre. Chvátil mentioned offhandedly, "winning a game is overrated." That is, what matters is that everyone has a good time. I also discussed this with my students since many of them are still struggling to understand why few contemporary designers use player elimination or even Uno-style "Skip turn" actions. I encouraged my students to think about it narratively: you invite someone to your house to play a game, and then during the game, you tell them that they don't get to play any more. It's just not polite. Yet, students who are all-in on player elimination will find a justification!
Monday, March 23, 2026
Paper prototyping, digital prototyping, and the DORA Metrics
My video game preproduction class formed teams and started work on their final projects a few weeks ago. Each group started working on digital prototypes before they had really settled on the core gameplay. I encouraged them to move toward paper prototyping so that they could make changes faster, even radical changes. I am pleased to report that they have embraced nondigital tools as part of their process, although I'm still concerned that they are not iterating fast enough.
This was on my mind when I watched Steve Smith's latest video from the Modern Software Engineering YouTube channel, which reminded me how the DORA metrics can positively influence software development practice. It got me thinking about the metric change lead time, which measures how long it takes from a change to go from committed to deployed into production. I realized that this is essentially the same idea as I have been advocating for their prototypes, whether they are analog or digital: the less time it takes for an idea to go from implemented to tested, the better. It doesn't matter whether we are committing in the sense of version control or in the sense of having made a coherent change to a paper prototype. I suspect that the DORA metrics would still hold, that a team that reduces that time is going to be more productive.
In today's meeting, we talked about what this means for us as game developers. I borrowed part of Smith's analysis, discriminating between activity metrics, output metrics, and outcome metrics. The students got the idea that the outcome metric is most important, and that this could be something like profit or it could be something like delight. That is, if we are making a game that is designed to bring joy to people, then the amount of joy we bring the player is the intended outcome, so we should measure that. In fact, we often call that playtesting.
This led me to hypothesize that we can use change lead time metrics as a tool to determine when to switch between forms of prototyping. I have that students sometimes have difficulty understanding physical prototyping and other forms of lightweight prototyping when they are developing video games. The DORA metric points toward a solution: one should change modes of prototyping when it reduces change lead time. That is, given an intended change to the game system, one can ask which mode of prototyping allows us to go most quickly from implementation to playtesting. While that is paper, stay with paper. At some point, though, there will be more systems or crafted aesthetics than the low-fidelity form is accurately conveying, and so we use higher-fidelity prototyping instead.
There are at least two potentially confounding factors within this hypothesis. The first is that it assumes that we can accurately assess whether a particular system can be accurately playtested in a given prototyping medium. Drawing a physical card feels different than tapping a depiction of a deck, for example. The second is that it may require an amortized analysis when getting started. Engineering a system that allows for rapidly changing design components requires some up-front work. The point remains, though, that one cannot build software that is infinitely malleable, and the low-fidelity prototyping ought to inform which parts of an implementation are expected to change and which are not. Like the first challenge, this deals with the inherent risks of software development: the only way to know exactly how to build it is to have already build it.
Saturday, February 21, 2026
Amphibian-based grading
I have a friend, roughly my age, who studied architecture at Ball State as an undergraduate. He told me a story many years ago about his most formative interaction with the faculty. He asked his professor how he was doing in a class, expecting a quantitative answer. Instead, the professor drew a line: on one end, he drew an egg; on the other, a frog; in the middle, a tadpole. He pointed to a spot on the line and said, "You are here."
I tell that story to my students every semester when the question of grades come up. I recently shared the story with a faculty discussion group dedicated to improving teaching practices. Everyone who hears this story immediately understands that the professor has given the student valuable information—that this feedback is much more valuable than something like "86%" or "C+".
At the faculty discussion group, one of the participants asked us if we still had any marked-up papers from our own undergraduate years. I do not, though many did. She pointed out how modern undergraduates don't even have the opportunity to hold on to such things. All their interactions are mediated by technology; all their interactions have become transactions.
Yesterday, I recorded the podcast discussion around my essay for The Raised Hand. The other guest was the author of February's essay, which will be published in a few days. The moderator identified a theme between our essays: that there is an intrinsic danger to separating people with technology. Reflecting on the conversation, it strikes me that technology allows us to have a limited communication with people who are distant, but also limits our communication with those who are nearby.
Earlier this week, I graded my CS222 students' two-week project submissions. The explicit goal of this short project is to prepare students for the eight weeks of the final project. The short project integrates all the challenging ideas from the first four weeks, and so it is designed to help students figure out which of those things they really understand and which require more attention. How should such work be graded? I expect each team to miss some fundamental concepts in their project, often things like having clear names or following the Single Responsibility Principle. If a team misses one of these, should they get a low grade because the work is wrong or a high grade because they did what I expect? A low grade suggests that they have done badly, but they have done well, and a high grade means they have done well, but they actually misunderstand important concepts.
I end up giving them low grades because that feels like an honest assessment of where they are. What I really want is to show them how close they are to becoming a frog. Why am I giving them numeric grades despite having told them about amphibian-based grading?
After grading these projects, I always tell the students not to panic about the grades. I point out that in the course grading scheme, this grade will be dropped if they do better on the final project than they do on the short project. Everyone does better on the final project in part because the short project actually works: it shows them their weaknesses. But look at what I have done here: I have crafted a mathematical system, justified pedagogically, so that I can give grades to things. It's true that at the end of the semester, I need to have enough evidence to tell students where they are on the amphibian line. It is a line after all, and so letter grades can be interpolated over it. Yet, while a tadpole is in the pond, it is nonsense to say that it has failed to be a frog.
In my podcast discussion yesterday, my interlocutor described how an integral part of education is helping people develop well-ordered desires. The desire to quantify human formation is disordered. I did not become a professor so that I could make good Canvas experiences. I became a professor to kneel beside the pond and cheer on the tadpoles.
I write this so that I will remember it.
Saturday, February 14, 2026
Introducing students to Capture Go
Monday, February 2, 2026
Shove Off! at Global Game Jam 2026
This past weekend, I participated in Global Game Jam at Ball State University. This was the first time in many years that I was not hosting the event, and it was a nice change to simply jam and not have to worry about logistics.
My team created Shove Off!, a local-multiplayer arcade game. The source and binaries are also available on GitHub. The game is for four players with game controllers.
| Title Screen |
My son and I started kicking around ideas right after the theme announcement. We briefly discussed making a survivors-like where the powers come from masks, but we tossed it as requiring too much balancing. We pivoted to using masks of world cultures to provide power-ups in a platformer brawler game. This idea played well into our observation that local multiplayer games can generate a lot of fun even if they are rough around the edges. Choosing this to go forward, we then decided on pushing as the core player interaction would be such that masks modify it. (Incidentally, I have played Smash Bros. exactly once, and my son has not played it at all.) Our whiteboard designs revealed an opportunity for two kinds of attacks: a horizontal push from the ground and a diagonal push from the air. The simple level layout we sketched provided all we needed for a playground.
We tried to get the core gameplay working Friday night, but we could not get all the pieces together. Crucially, we did figure out the sizes and shapes that everything would need to be. We also recruited a musician who agreed to write a retro-style, high-energy song together with sfxr-style sound effects for us.
Saturday morning, we got the core gameplay and representative placeholder art in place; that is, we replaced the Godot icon with stick figures. We enjoyed the core gameplay even without powerups. Knowing we were a small team with limited time, we decided to try to build a complete game using only the core gameplay. If it was good, it could be what we shipped, and if we had time, we could add powerups. During the day, the theme became less generic and focused more on lucha libre. Masked wrestlers pushing each other off of platforms seemed the right way to go. Once the musician's main theme landed, it changed everything: the song was perfect for the madcap gameplay and bold visuals we had brought together.
My youngest son was the only one with nothing scheduled Saturday afternoon, so I invited him to come hang out at the jam. I set him on some research tasks, including finding fonts and figuring out a palette for the characters. He started by simply poking around Google Fonts, but then I taught him about the value of using image search for reference images. We brought up images of luchador posters, which changed his whole approach. It was a good learning opportunity, and I'm glad he came along, even if he had to spend some time awaiting assignments.
| Starting the match |
Many of the posters we reviewed featured a starburst background, and it looked to me like something I could do with a shader. I tried puzzling it out myself but did not make much progress. Shaders are interesting to me but I frequently get stymied by them. I ended up searching the Web and finding exactly what I was looking for. Sunday morning, I added my favorite subtle feature: at the end of the game, the background color changes to match the thematic color of the winner. One of the other jammers required shader cleverness in his game, and I told him how I'd love to lead a seminar on the Book of Shaders. He said he'd be interested, so I guess I only need nine more undergraduates who are intrigued by this intersection of art, math, and design.
I should mention that all of the visuals were done by my other son who was in attendance. He did a great job iterating on ideas and taking feedback, reworking the characters several times as we worked towards our goal. One of the best things we did in terms of the project architecture was to separate the body animations into their own scene so that he could work on those independently while I worked in nearby systems. We only had one merge conflict during the whole weekend, and it was quickly resolved.
By Sunday morning, we had already covered the "mask" theme with our luchadores, but we had time to build on the core gameplay. Our testing showed that players could get stuck in pushing matches, and so we pulled our favorite powerup from Friday night's listing: fireballs. Every few seconds, a stylized sun shows up in the middle of the screen, and the player to grab it gets three fireballs. These proved perfect for breaking up the gameplay.
We were all happy with how the game turned out, and it was popular during the post-jam party. I felt good about making a complete, playable, and enjoyable game. I have spent a lot of time the past several months in preproduction and exploring engineering practices, but I haven't shipped anything in a while. The jam was a great opportunity to go from nothing to something in 48 hours.
If you try out the game, I hope you'll let us know what you think.
Wednesday, January 28, 2026
"Artificial, Not Intelligent" essay published at The Raised Hand
My essay for The Raised Hand was published this morning:
https://theraisedhand.substack.com/p/artificial-not-intelligent-how-meeting
It is my invited response to their theme for the year, "What is the role of the human educator in the age of AI?"
An overheard comment about the importance of knowing
Earlier this semester in my game design class, I overheard a student say to another, "If you don't know much, you won't be able to think of something."
He's right, contrary to the philosophy that believes that students don't need to learn facts because they can look them up.
Saturday, January 10, 2026
An Improvement in Brainstorming Game Ideas
Thursday, January 1, 2026
The Games of 2025
It's time for that annual tradition: a reflection upon the board games of 2025. This year involved a significant change in my play patterns since my eldest son went away to college. He is the one with whom I have played the most games by a long shot. I miss having him home, in part because he is such a good tablemate, always eager to join in a game.
Without further ado, here is the list of my top-played board games of 2025.
- Clank!: Catacombs (31)
- Arydia: The Paths We Dare Tread (25)
- Heat: Pedal to the Metal (20)
- Planet Unknown (17)
- Race for the Galaxy (17)
- Clank! Legacy 2: Acquisitions Incorporated - Darkest Magic (13)
- The 7th Citadel (12)
- 55 different games played this year
- 293 logged plays this year
- 3779 logged plays in total
- 36 game h-index (+1 from last year)
- 19 player h-index (unchanged)

