Designing from the bottom up

Have you ever seen, while dealing in a support channel with a novice that just got in touch with the power of UNIX a conversation that goes like this?:

<novice> How can I process the output of a command, so that any number of spaces gets turned into a newline?
<seasoned> What are you trying to do?
<novice> I want to list the contents of a directory, but I want one per line.
<seasoned> ls -1

I have seen this numerous times, even as one of the actors. At times I was the novice, and many times in #debian-br I was the seasoned person trying to get the novice to focus on the problem they were trying to solve, not on the solution they thought was right.

While reading Máirín Duffy’s awesome paper about contributing to Free Software as a designer I couldn’t help but get that image brought to my memory again, and again. Specially when I read this part:

This means the language and even the approach FLOSS projects take to solving problems tend to be focused on implementation and technology rather than starting with a real-life user problem to solve and determining appropriate implementation afterwards.

That does sound like us, and it does sound like many of the solutions we come up with. While I was reading her paper, there was a reference I got very interested in checking. It’s a PDF with no links in it, so I only had the number of the reference. What I would have to do is I would have to scroll to the end of the paper, and find the reference, then somehow come back to the place I was looking at.

My most immediate thought was ‘you know, maybe evince should have tabs’. Why? Because I could open a new tab, go to the place the reference was at, and to ‘go back’ I just needed to close the new tab. Other options require much more effort – remembering the page I was at, or maybe the scroll offset more or less, and scan for the part of the text I was at. But those are not the only options! I could have the application set a marker on where I am, and have an easy command to go back to that marker, for instance, or evince could provide a way of ‘looking ahead’ without throwing away the current state at all. I’m pretty sure if I look around enough I will find tools that solve this problem in a fairly good way.

Now, I think that is exactly how we ended up with tabs in so many places they do not make sense in, and with so many ad-hoc solutions that solve our problems in half-assed ways. Even in browsers, we tend to use tabs as ad-hoc solutions to real problems we have no real solution to handle yet, such as “I want to check this other thing out real quick, but I do not want to lose any state of this page”, or “I want to check this out, but not right now, so let me open it, and then I’ll come back to it”, or maybe even “I want to look at this now, but since it is going to take a while to load, I might as well let it load in the background, and when I finish reading this I can go look at it”. These are the real problems we have, and I think we need better designs that solve them for real, instead of just patching them with the ad-hoc solution that tabs are.

The other extreme of the spectrum is, of course, not doing something, or even anything for lack of the perfect solution. Using ‘this is not a real solution’ as an excuse to not implement something that could serve as a temporary solution to a problem may cause more frustration than having to deal with the ad-hoc solution that is tested, and being applied to other applications for some time. After all, in many cases the ad-hoc solution can be later replaced with a proper one.

I guess this is another instance of the very difficult problem of balancing different realities: proper design is not always available to start something up, specially if the application is backed by individuals and not by a company or a bigger project that could bring in designers to work on it from the start. In this case having something up and running is usually a very important first step in a free software project – usually required to get enough interest to make it worth designing for.

16 Replies to “Designing from the bottom up”

  1. That’s always the problem doing commercial development, too. Clients request a specific product change that they think will solve a problem, and often get upset if we refuse to implement it exactly as specified.

    It’s often quite difficult to get them to step back a bit, and explain the problem they’re really trying to solve, and approach it from the actual requirement (often a legislative change that affects their business).

  2. “My most immediate thought was ‘you know, maybe evince should have tabs’.”

    You can do this with Konqueror — just make two tabs and open a copy of your paper in each one, scrolling the second tab down to the references section.

    What I usually do for biology papers is to use a single tab, but split into three independently scrollable panes (via ctrl-shift-t and ctrl-shift-l). The top left pane gets the bit of the paper that I’m reading, top-right gets the current figure (which is usually on a different page) and the bottom gets the references (and is kept small when out of use by dragging down the separating bar).

    Not sure if there’s a design lesson here — perhaps that the modularity of the kparts design tends to pay off for this sort of thing.

  3. “maybe evince should have tabs”. Check out KPDF, it allows placement of bookmarks. They look like a paperclip. Right-click to add/remove.

  4. Just a small note to tabs in Evince: Evince does have a ‘open as a copy’. I use it regularly when I read to check the references.

  5. Interesting discussion, thanks for posting! It has reminded me of a similar problem in F/OSS which I think is a focus on architecture rather than end-user experience: that is, to spend a lot of time re-architecting something to end up, from a user experience POV, either exactly where you were before, or even a few steps behind.

  6. I can never remember that particular ‘ls’ option. I just remember that it only does the multi-column, coloured, funkified output if it’s going straight to a TTY. Therefore, to get plain, one-per-line output, as you’d want if passing to another command, just do ‘ls | cat’

    Note that it’s possible that the original user wants one filename per line as they want to pipe the output of ‘ls’ to another command, such as ‘grep’. In which case, the answer is that they don’t actually need to do pass any options to ‘ls’ at all! Without asking the user *again* “why do you want that?” you’re never going to know.

  7. Thanks for the software suggestions, and or pointing out open as copy. I am quite happy with evince, actually, but it is useful to know there are alternatives =). My point was though that we can probably do better there, instead of patching the issue with tabs/other windows, which still take away some of the context, even. I am also not picking on Evince, I could likely have used similar issues in many of the softwares I use daily.

  8. You are looking for the back and forward buttons that kpdf has. If the pdf was generated without hyperlinks for references, you must scroll by hand to the reference section. The back button in kpdf will take you back to where you were reading. Split panes in Konqueror eliminate the need to scroll, as Mark says. Publishing as html eliminates the need for these work arounds by freeing people from paper’s legacy. PDF is only useful with free software and it is painful for everyone else.

    Most talk about how free software is not user friendly is FUD. Free software, you must understand, is written by users. It will always be more clueful than software written by programmers without subject matter experience for owners with the goal of squeezing money out of users. Free software is also better at sharing expert advice. When you compare free software to non free software experience, non free loses big time. Non free users are faced with intentionally limeted, expensive, feature poor software and no easy way to learn best practices other than a Google search. Free software users can search repositories to the best programs available and find good advice in the package descriptions and man pages and other documentation.

    Let’s back up and look at Windows vrs free software for research. The task is to read, understand, compare and cite information, much of it published as pdfs and kept behind paywalls. Windows did not even have a pdf reader until recently and software to do things has to be purchased without any advice or help from Microsoft. Adobe’s reader is mostly designed to sell other software and is not nearly as flexible as kpdf + konqueror. This alone makes it impossible to do serious research on Windows. People using that unfriendly software end up printing out all of their papers and are unable to parse them electronically. GNU/Linux users also have Kile and Latex for generating excellent, hyperlinked pdfs and kbibtex for organizing, searching and citing printed works. Kbibtex should be used as soon as you start research even if you don’t use Latex, because Kbibtex does such a good job of organizing and referencing. People who want to really share their ideas will take the results of their research to a Wiki or use Bluefish to write a nice web page. From start to finish Debian masters this task by sharing information from experts and making that advice available through first rate tools designed and used by experts.

  9. Tabs in applications, but there’s no tabbed interface options in popular windows managers I can see to replace the taskbar buttons with controls that look and act more like tabs.

    According to Wikipedia, Fluxbox, Ion, and wmii can sport a tabbed interface — but why not have this as an option to gnome, kde, lxde, or especially xfce?


  10. I don’t like the idea of tabs in window managers. Like I said, I think that is a broken shortcut to an issue we should be designing better solutions for. I don’t think taskbars are a bad solution for right now. I do enjoy GNOME Shell’s overview (and alt-tab) way more than taskbars, though.

  11. what you’re looking for (maybe) is a map for your idea/process/window management. nodes can be applications themselves, but also services, clipboard items, textual representations, and most importantly they could denote positions/states, in the same way as a graphical browser history would do it, if that existed.

  12. @dato Yeah, that has been pointed out, and would indeed make sense for most of the use caes for “listing directory contents one per line”, indeed, but as has also been pointed out, we would need at least another “why do you want that for” question to be sure. The user could just want to see the output that way. Maybe I should have picked examples other than ls -1 and tabs to make my point =D

  13. There’s a rule of thumb when it comes to items, worded something along the lines of “one, two or unlimited”. Tabs are fine for two, but for unlimited give me a list-box column on the side.

  14. @kov – different examples wouldn’t make a difference. No matter what you choose, you’ll still have people focusing on the examples, instead of on the message. That’s why you have 15 replies to your post, of which just 4 are addressing the broader question of design…

Leave a Reply

Your email address will not be published. Required fields are marked *