Case study 02 Wearable software · 2026

Typeface 955

I wanted my new Garmin to feel less like a phone than my Apple Watch did. Typeface 955 shows only the time, date, and battery, with settings that keep those three values readable.

Role
Interface design
Watch-face development
Platform
Garmin Connect IQ
Monkey C
Target device
Garmin
Forerunner 955
Current scope
260 × 260 display
5 font choices
01 / Motivation

I wanted less from my smartwatch.

I switched from an Apple Watch to a Garmin because I wanted a watch that felt more like a tool and less like another phone. Most available faces still put far more information on screen than I wanted.

My requirements were specific. I wanted four-digit 24-hour time, the day and date, and an exact battery percentage. Everything would be white on black. I did not want a colon, icons, fitness rings, weather, animation, seconds, or anything that required a tap.

With only three values on screen, small choices became obvious. Font width affected the largest possible time size. Vertical spacing affected how quickly I could read the face. Update frequency affected how much work the watch performed throughout the day.

02 / Interface

The hierarchy is simple on purpose.

The time is by far the largest element. The date sits above it, and the battery sits below it. I can glance at the face and find the right value without scanning a grid of complications.

TIME

Four digits, no colon

Twenty-four-hour time removes the need for AM or PM. Dropping the colon leaves more room for the numbers, which matters on a round screen.

DATE

Day and date together

The abbreviated weekday and date stay centered above the time. They are easy to find but small enough that the time still reads first.

BATTERY

Show the exact number

A percentage tells me more than a small battery icon. A setting lets me hide the percent sign if I want an even cleaner display.

COLOR

White on black

The default has maximum contrast and matches the rest of my watch setup. Color settings are there for people who want them, but the basic face stays plain.

Settings without turning the face into a dashboard

I compared several font and battery layouts before choosing the default. The finished face includes five font choices, four date sizes, four battery sizes, optional color controls, and an optional percent sign. The settings preview updates on the watch, so the user can judge a choice on the real display instead of guessing from a list of names.

03 / Rendering

Redraw the screen, reuse the data.

Garmin can call the face several times after a wrist gesture. The Forerunner 955 still needs a complete frame each time, but the strings behind that frame usually have not changed.

1 min The time string is formatted again when the minute changes.
On change Garmin reports a new battery value through its native complication API.
Each call The complete frame is drawn from cached strings for reliable hardware rendering.

The normal update path makes one clock query. It reformats the time when the minute changes and rebuilds the date once per hour. Battery updates take a different route. The app subscribes to Garmin’s battery complication when it starts. When Garmin sends a battery event, the app refreshes the cached value and requests a screen update.

When the face becomes visible, it refreshes the cached battery immediately so the first glance after charging is current. If the complication subscription is unavailable, the app falls back to reading System.getSystemStats() once per hour. Changing whether the percent sign is shown only reformats the cached value and does not trigger another battery query.

// Simplified rendering strategy
onStart() subscribeToBatteryChanges();

onBatteryChanged() {
  cacheBatteryValue();
  requestUpdate();
}

if (minuteChanged) formatTime();
if (hourChanged) formatDate();

draw(cachedDate, cachedTime, cachedBattery);
04 / Hardware testing

The simulator was not enough.

Connect IQ handles fonts, resources, packaging, and updates differently from a web project. The round display also gives every line of text a hard width limit. I used the simulator while iterating, then tested major changes on my Forerunner 955 to check spacing and readability on the real screen.

One attempted battery optimization looked reasonable in the simulator: skip a draw when the visible values had not changed. On the watch, that could leave the screen black after a gesture. The hardware expects a complete frame on every update callback. I changed the design so every callback draws the full frame, while the code avoids repeating clock formatting, date lookup, battery polling, and font loading behind it.

That bug changed how I approached optimization: first satisfy the device’s rendering requirements, then reduce the work needed to prepare each frame.

05 / Outcome

19 days of estimated runtime.

My Forerunner 955 reports an estimated 19 days of runtime with Typeface 955, compared with 16 days using the most minimal, equivalent stock watch face I could find.

I have also noticed better battery performance in everyday use. The 19-day and 16-day figures are the watch’s estimates, not measured times between charges.

Next case study Bugnut