Merry Christmas and happy new year in advance everyone ! Last week, finding one more experimental proof of the insufficiently well-known fact that six years old children and their grandmas are not representative of mankind as a whole led me to think about the target audience of that OS. Who do I code this OS for ? Why would someone use it instead of mainstream alternatives that have better hardware and software support ? Well, read on to find out !
Rejecting “kindergarten usability”
Would you like to use software that explains every part of its workflow with a sweet voice, puts gigantic blinking confirmation dialogs in every part of its workflow, asks you to think in term of associations with real-world objects instead of using standard UI widgets, and has such a beautifully clean and simple interface that every task which is a tiny bit complex takes ages ?
This is what software designed for 6-years old children looks like, and some people think that this is what we should all be using.
I recommend everyone who will ever have to design a product that is in interaction with people to study a good book about usability. For French readers, I can in particular recommend “Ergonomie Web” (Amélie Boucher, Eyrolles), whose knowledge can be used way beyond just websites. Such books are precious for two reasons : first, they will teach you what usability is about, and how to make stuff that feels nicer to play with. Second, they will teach you what usability is not about, and how to avoid the nefarious effects of common misconceptions about users (3-clicks law, users are idiots…).
One of the first thing which such a book will teach you is that it is your user that matters. Not an imaginary six-year old child, your grandma, your father, or the village idiot. Your user. You have to define yourself a user base of the right size (not too big, not too small) and dedicate your work to it. Forget about the rest of mankind. If your product works for it, all good, if it doesn’t, that doesn’t matter. Don’t try to target everyone by making things as stupid as possible and hopping that smart people don’t get irate. Your users are neither idiots nor geniuses, and there is a good middle ground to find.
So, who is my target user, and why would he use this OS once it has reached a reasonable stage of advancement ? Some time has elapsed since the last time I asked myself this question on this blog, and I think it’s time to have a second look at it. Let’s begin.
Who are you, target user ?
I want to provide something for people like me who are not satisfied with current desktop and mobile OSs. That feel like on the desktop, they currently have to deal with a very bad compromise between a monopolistic steaming piece of garbage called Windows, a toy OS trying to tell them what’s good for them called Mac OS X, and an “Ikea OS” where you have to do everything and where nothing is standard called Linux, without counting gazillions of minor OSs with lots of annoying bugs and major missing features. The mobile world is no better : they have to deal with a crapware-ridden steaming piece of garbage called Android, an OS designed by Big Brother called iOS, a dying average OS called Symbian, and other minor OSs which have the same problems as on the desktop.
Here is what I stand for instead :
- Hardware-agnostic : In every computer science textbook, the job of an OS is defined as bridging the gap between users, developers, and an uneven set of hardware, through clever use of abstractions. I believe that this goal is not met when a developer explicitly has to target touchscreens or mouse, and when users meet a completely different UX on every different computer form factor.
- Quality over quantity : I believe that it is better to have a small set of well-implemented features than a large set of ill-implemented ones. As an example, I would advise not to base any “large-audience” software on GPU availability unless I found a way to make the latest GPUs from all major manufacturers work properly with my OS. Like, I don’t know, a reliable, fast and reproducible way to reverse-engineer and “recompile” Windows drivers, in the spirit of Wine but with a better implementation.
- Durability : I prefer things that are built to last whenever possible. Major UI changes at every release like Windows ? Kernel ABI breakage in random patches like Linux ? No, thanks. This is a hobby project, and it costs me no money to take my time if it is required to do things well. Durability also means that hardware must last : okay, I can set my initial hardware requirements relatively high for a first release if I need to, but they must not grow anarchically after that. New OS releases should break neither software, user habits, or hardware that is initially working. Upgrading should not be a big deal, in order to avoid a “Windows XP effect” in which support of old OS releases ends up hampering the progress of newer ones.
- Control : Personal computers are user-programmable tools. Or morally acceptable slaves, depending on how you look at it. What use has a slave who doesn’t do what you want it to ? At each time where several important factions of the user base may have different opinions on something, it is not my role, as an OS manufacturer, to pick one of the available options. Everything must remain possible, even if I may prefer one way and make it more readily available than the others.
- No unneeded legacy : Legacy is a tricky subject when talking OS development. Usability rules mandate that no working things be brutally replaced with something else of dubious extra value, that changes always have a solid rationale behind it. On the other hand, since this is a new OS and not an update to an existing product, I have an exceptional amount of freedom to re-do things which truly need an overhaul in existing OSs : have all software be 64-bit on x86_64, propose a GUI toolkit which does not mandate direct pixel manipulation, offer clean and user-accessible audio stream routing in the spirit of Jack…
- Features that matter : A common problem with OSs which want to offer a good out of box experience is to tell apart what should be included in the main OS ISO and what should be left to user-installed third party software. Features cost development time, and quality features cost lots of it. In my opinion, answering this question requires experience of what many people will use the OS for : for a rough sketch it is futile to include CAD software in an OS, but a web browser or an office suite may make sense. Same with APIs : they should offer the set of functionality that most software needs, in order to avoid a Linux-like proliferation of incompatible third party APIs that address the same needs, but not attempt to support every single exotic use case.
- User-centric : This OS should always keep aiming at providing an awesome user experience in every single way. It should be easy to learn, offer fast workflows for common tasks, and feel pleasant to deal with. Now, beyond simple stuff like designing good UIs, actually achieving this goal may actually require some unexpected technical compromises at the OS level. Like having UI rendering tasks run at a higher priority than purely computational tasks, so that the machine never feels unresponsive. Or initializing less of the OS during boot and more after the user has logged in. In fact, speaking of that, who said that a local OS needs more than working UI layers and a password file in order to display a login box ?
I’m not in the mood of segregating my users among stereotypes, I rather look for people who share the same definition of an awesome personal computer OS as me, and think that power and usability are not mutually exclusive. Who like computers from a conceptual point of view, but think that they can do better than they do today in those respects.
All that being said, I wish you a happy new year again.