All posts Looking back, dated three days after the code defense. The grade is added as a note at the end. Project · PowerSqueak · interactive demo below

PowerSqueak: seven-year-old code, nine sprints and a bug in the event routing

In the Software Engineering course we took over an old presentation tool written in Smalltalk and kept building it. My features: slide sections and a presentation timer.

Start PowerSqueak, start typing, and your keystrokes go nowhere. The keyboard focus didn’t land in the tool on startup. Sounds like a one-line fix. I only found the cause inside the UI framework’s own event routing.

That was one of many small finds this term. In Software Engineering I our team, the same seven people as in the winter, took over an existing open-source tool: PowerSqueak, a presentation program in Squeak/Smalltalk. History going back to 2018, more than 1,100 commits, paused since 2019. No CI, an outdated Squeak version, 84 percent test coverage. Brownfield, straight out of the textbook.

We worked in nine sprints with a real client, the chair that runs the course. A client meeting every Wednesday, pair programming on the days after, estimates with planning poker. Estimating was a sticking point for us early on, so I built a small planning poker tool as a Squeak morph, with tests.

You can try my two features in the demo on this page, with sample slides. The first is named, nested sections. In the sidebar with the slide thumbnails, a group of slides gets a header. Sections can go inside sections, you indent and outdent them with Tab, collapse, move and delete them, with a confirmation. The collapsed state is saved. And while presenting, n and p jump to the next or previous section.

PowerSqueak - Live programming

Questions?

  • Thanks for listening
5/5

In presentation mode the LED timer runs top-left (MM:SS). n/p jump to the next/previous section, t hides the timer, h pauses it.

Demo with sample data
Interactive demo My two features with sample slides: sections and sub-sections, undo and redo, presenting with the timer.

The key decision there: a slide belongs to a section through its position, not through a stored index range. Otherwise every moved slide would break the sections. That’s also written down in a short design document, so the next group doesn’t have to guess.

The second feature is an LED timer for presentations. I built it as a small subclass of the existing timer morph. Touch as little of other people’s code as possible, that was the rule for everything in this project.

Then there was the cleanup nobody sees. CI with GitHub Actions and smalltalkCI, support for Squeak 6.1, a rewritten README with keyboard shortcuts and screenshots. Dragging a slide now snaps into a slot, so nobody deletes a slide by accident while moving it. After that, 456 tests were green. And the focus bug from the start, with a bug report and a regression test so it doesn’t come back.

My share was 38 commits and about 4,800 lines. Together the team built around 30 features, introduced undo and redo through the command pattern and raised test coverage from 84 to 95 percent. The code defense was on July 14, where we had to defend our code in front of the supervisors.

I worked with AI very deliberately in this project. There was a project-specific CLAUDE.md and eleven Smalltalk style guides the code was checked against, plus rules so that no AI traces end up in the repo.

What I’m taking away: in someone else’s code, the smallest change is usually the best one. A bug that looks like one line can sit deep in the framework. And when a team process gets stuck, you can just build a tool for it.

Tools and skills: Squeak/Smalltalk with Morphic, SUnit, GitHub Actions and smalltalkCI, Scrum with client meetings, pair programming, planning poker, refactoring, debugging and documentation.

Note added later: the module grade is a 1.0.