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.
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.
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.
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.
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.
The abbreviated weekday and date stay centered above the time. They are easy to find but small enough that the time still reads first.
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.
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.
I compared several font and battery layouts before choosing the default. The finished face includes five custom typefaces, 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.
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.
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, caches each value Garmin publishes, and requests a screen update only when that value changes.
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);
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 installed each serious version 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.
Typeface 955 now runs on the watch I wear every day. It gives me the three things I check most often. I do not have to open a widget, dismiss anything, or search through extra data.
I can explain why the code avoids unnecessary formatting and resource work. I have not completed a controlled battery comparison against a stock Garmin face, so I do not claim a measured battery-life improvement. That test is still on my list.
The face listens for real battery changes instead of polling for a value that usually stays the same.
Less information gave me more room for the values I actually wanted to read.
The simulator was useful, but the watch exposed both layout issues and a blank-screen rendering bug.
I need a controlled comparison before attaching a number to the battery impact.