Alo Sarv
lead developer

Donate via

Latest Builds

version 0.3
tar.gz tar.bz2
Boost 1.33.1 Headers
MLDonkey Downloads Import Module Development
Payment completed
Development in progress.
Developer's Diary

Tuesday, April 04, 2006


One of the promises I made when I started this project was that it would be usable for everyone. At the time, I did not quite know what that meant, but then again, neither could I do template metaprogramming back then. Today, I feel I have a understanding of what are the three main user-groups Hydranode targets, and how to reach them.

The trouble with dividing people into user-groups is that there is always a margin of error; there are always people who fall into multiple categories, or none; every individual is unique, and such generalizations can only serve as general guideline, rather than hard rules. You can rarely find a perfect example of a user-group in a real world, most people have characteristics from multiple groups.

Group A is a computer enthusiast; he can use right mouse button; likes to configure and fine-tune each of his applications to his liking; has used computers since childhood; has mastered at least three scripting languages and is a fan of regular expressions; generally dislikes skinned / non-native applications and applications that try to do things for him. A Linux enthusiast is an example of this user-group.

Group B has used computers for quite a while and finds his way around things. When forced, is capable of figuring things out by himself, altough he prefers asking his son/nephew for advice on computer-related topics; can use right mouse click when needed, altough doesn't usually enjoy it. A middle-aged, male, casual p2p-user is an example of this user-group.

Group C likes beautiful shiny applications; doesn't like applications which display lot of things she doesn't understand; generally wants things just to work without needing any extra input from her; "Settings" and "Options" pages in programs are a complete mystery to her. A 16-year-old girl is an example of this user-group.

So how am I going to target all these three user-groups? Configurability and carefully-tuned default settings. The idea is that in order to target group C, the application must look and feel exactly according to their idea of a good application (skinned, simple); however, as they cannot configure the application, merely providing skinning capability and means to hide extra information is not an option - only users in group B and A can do that. Hence, the default settings of the application must be fully skinned and all extra information hidden, or explained in-place with a short phrase / sentence. Users in group B can enable sufficient amount of things in order to feel comfortable (including disabling skinning, if they don't like it). Users in group A are computer specialists, so they can find even the most obscurely hidden settings and configuration options, enable all extra information displaying and disable all skinning.

The data / options hiding follows the same logic. By default, anything user in group C wouldn't understand is hidden away. Things that users in group B could potentially want to use are easily accessible, from menus, buttons and such. Things that users in group A would potentially want to use are harder to reach, generally under right mouse click, or deeper into settings dialogs or even changeable only from configuration files.


There is one simply solution to the initial problem. The wizard. At the beginning you can simply ask "are you an advanced user" and according to this set the settings. Sure, some will skip the wizard and you have to take into account that then you have basic settings, but with such a little fellow you can cater to every user group equally good, at least for the first settings. And this is an important step, as usergroup C will never touch them agan, not even upgrade the client mostlikely. Usergroup B might change and upgrade, but only if there is something seriously wrong or if you tell them "you are at risk if you dont update". Of course that means also that the wiazrd does not need to run every time yu update, unless you have made some extreme changes that need adressing.
maybe you con add a section that shows/hides the advanced options when you press a button as many other apps have

ps. yesterday was my birhtday and though i would heve liked to have the new version as a present ;), i knew it was difficult.

thanks and keep the good job
I think u made a good distinction.
I like the idea of Wizard.
In this wizard if u always and mindless press always "next" button u will get the default C config.
(16 yo girl and 50yo mum /dad)
the wizard allow B user to change what they want
What the A user group want
( I guess all folk reading this )
is enabled after in config/hidden settings.
Ps as a personal advice about my experience programming, think about a way to say the user to update.
i find that everytime i develop a program and left this thing for later i alway regret
( God bless the invention of ClickOnce in .NET land... )
( maybe i simply made a breaking application update and i want to mandate an update... but some ....
well u can guess user don't know it or don't care)
Now madcat, take a girl and use them as test case for C! ;)
What about automated update? It could even nice if doing some manner that not kills connections, some modular plugin reloading or something (think of operating systems like GNU Hurd or Bell Labs' Plan9).

- Group A-2, (known as mouse-hater-but-loving-graphical-output): is a computer enthusiast, he uses a rare window manager named Ion and loving it's usage all time, even started to write LUA scripts from it since a while.
He loves to use console apps but likes the output advantages of graphics environments under certain conditions, so he prefers using the keyboard for input and that's why he uses Ion ("the best of both worlds").

This kind of user even can write scripts all time in a magic manner, automating a lot of operations usually done by hand and wanting to do it with Hydranode too. He also wants on the interface a fast manner for putting console commands too...

Some languages that a "script-maniac" can use: Perl, Python, Ruby, Rexx, LUA, LUA, Scheme, Tcl, Haskell...

I'm both a "mouse-hater-but-loving-graphical-output" (using Ion), a "script-maniac" (starting with Perl and Lua ATM but I want to learn a lot more languages), and having too many common points with the A user (stereo)type ;)
Ion Guy say:What about automated update? It could even nice if doing some manner that not kills connections, some modular plugin reloading or something
Even if it would be the best, it's too difficult to implement it by ur own. ( Not that i'm puttin any limit to his majesty MadCat ;) )

A simple check to a DNS entry is simple to implement and good enough to work :)

Maybe but only maybe, an automatic file download of the new release by "torrent" or "ed2k" but again this is not easy and is a plus for a future release, madcat have already so much to do :)
An update check is important and should be in the very first version of hydranode with gui! And if its simply just a check that then leads to a page for downloading at first. At a second stage, it should be able to automagically download new updates and install them on its own.
Post a Comment

<< Home

This page is powered by Blogger. Isn't yours?