Susurrus 1.0: Engineer's Statement

This is version 1.0 of Susurrus.

Susurrus a countdown timer for doing timed activities with other people. Put another way, it's pomodoro for your group chat.

I thought about it for years and worked on it sporadically for weeks before the first barely-functional prototype came together, and my own testing plus early user feedback necessitated quite a bit of revision. Ultimately, Susurrus is neither novel nor conceptually complicated, but making it involved most of what I know about making a computer do things. More significantly, it gave me many invigorating opportunities to express the qualities present in my favorite software.

My favorite software, when possible and applicable, in no particular order:

  • is as fast as it can be
  • has appropriate personality
  • respects its context and idiom
  • has good bones

As Fast as it Can Be

Everyone has a timer app on their phone, so if you're asking them to use anything else, it better be ready on the bounce. Susurrus is as fast as I know how to make it. In my testing, it loads very quickly. The backend runs on Bun, and keeps the bare minimum of state necessary to associate active users with their timers in an in-memory SQLite database. The frontend loads no raster images. It is snappy as hell.

Relatedly, Susurrus has no signup or login process and no persistent user state. The app doesn't need to know anything about the user except that they exist and are looking at a given timer. The principle of "no logging in" was important to me from the start, and the primary reason for this was not so much privacy as speed. If someone is starting or joining a Susurrus timer, by definition they have something else they want to do. The software should help them to get back to that activity as quickly as possible, and so: no usernames, no passwords, no logging in. When you open susurrus.app, you become a Susurrus user. When you close the browser window, it forgets you ever existed.

Appropriate Personality

Software has personality, and its personality is part of its fitness for purpose. I'm deliberately using "personality" instead of e.g. "user interface," because what I'm thinking about is a superset of things like interface affordances or visual design. My favorite pieces of software don't just look and feel good to use, they feel good in unique ways. The gestalt of how it feels to use MagicaVoxel is good in a different way how DaisyDisk feels good to use, which in turn is different from how the Magic Wormhole command line utility feels good to use.

The idea of Susurrus is mildly quirky, so I tried to make everything about it as obvious as possible. There are two modes the interface can have ("timer not running" and "timer running"), and it always displays all of the controls applicable to the current mode. The size and centrality of the (functionally speaking) least obvious control—the PING button—invites the user to press it and see what it does.

The specifics of the design were informed mostly by whim (which in turn was informed by brainstorming with a dear friend who does UX professionally). I thought it would be neat to have an interactive dial for the timer, so there is one. The circular nature of the dial dictated the placement of everything else in that half of the interface.

Color and font choices were especially capricious, and the outcome is very satisfying to me. Susurrus is an app that no one will mistake as having a by-committee design or using a widely-deployed UI language, while remaining (I hope) clear and useful. The sound of the ping, the timing of the animation, the particular quality of the procedurally generated user labels—these are its personality.

Context and Idiom

My favorite software understands and respects its context and idiom. This is what lets users apply what they already know about other pieces of software when using it. A good iPhone app feels similar to other iPhone apps, and a good UNIX command line utility behaves like other command line utilities. This is what people are talking about when they say "Mac-assed Mac App." And so on.

This also applies to web apps. Susurrus is a web app—which is to say, it's a web page. Web pages have URIs, and cool URIs don't change.

Susurrus URIs don't change because they're created on demand1. When a user loads a Susurrus web address, Susurrus connects them to the timer associated with that address. If there isn't already a timer associated with that address, Susurrus creates it.

This means it's easy to share the link for other people to join the timer you're in, which is fairly important for a multiplayer app.

The timer URIs Susurrus generates are fairly bland, i.e. https://susurrus.app/timers/9366658643314637266. However, you can put whatever you want1 after the /timers/ section of the URI, so if your writing group chat has a standing appointment to meet at https://susurrus.app/timers/giants-of-prose, that works too.

Good Bones

"Good Bones" is the least obvious virtue, as far as a user is concerned. It's not just possible for useful software to be an absolute mess under the hood, it's common—even inevitable, to some degree. But it's still worth striving for architectural sensibility and structural robustness, and Susurrus represents my best attempt at this. The backend code is type-validated and unit-tested, and I've tried to organize the codebase with an eye toward future development.

Something I'm particularly proud of is that everything about the user-facing presentation of the app is handled on the client side. The Susurrus server doesn't know anything about dials or buttons or ping sounds, and it takes advantage of the relative looseness of human-scale timer synchronization to do as little as possible while doing everything necessary. All the server does is store, update, and distribute information about how much time is left on which timers, and which users are subscribed to them. In principle, this means that the user interface for Susurrus can be tweaked or completely redesigned without changing a single line of server code3, which is especially helpful given that the subjectivity of user interface makes it very likely to change.

In Conclusion

It feels intuitive to me that software engineering is one of the great human fields of endeavor. Like cinema, it encompasses whole arts within itself and affords opportunities for profound works of synthesis. This is what I think is good about it; this is why it holds the interest of those who practice it in the uniquely encompassing way that it does.

And if software engineering is cinema, Susurrus is a no-budget short film from a hungry outsider with more opinions than credits. I hope it will be regarded fondly.


1And garbaged-collected when they're empty, naturally.

2Within reason! There's a generous character limit.

3This is also why the Susurrus timer server could just as easily work as the backend to a native iPhone or Android app, if I were ever inclined to write one.