Facebook Usability

The Facebook logon screen now has a long-awaited “remember me” checkbox, but crazily a huge message appears that moves the Logon button down half an inch. Is this a deliberate move to make sure people read the message?  To users, message boxes are just something that interrupts the flow of an application, thus “stopping the proceedings with idiocy“.

Display the message if you like; anyone who can’t guess what it’s telling them will know after the first time they read it (if they do read it, regardless of any attempt to put it where the logon button was a second ago), just don’t interrupt the very first thing I do to get onto your site.

I prefer sites that don’t require me to sign up at all, so I can go right to work, and decide to sign up later on if I want to keep my changes.  FogBUGZ has a wonderful core concept of having no required fields. Opting instead for the “get it in, worry about the detail later” scenario. I like it (but the anal part of my brain refuses to let me enter a case without at least having a title 🙂 ).

C’mon Facebook, you’ve got too many users to skimp on the usability of your application. You’re doing well, don’t spoil it now by getting lazy.

Is one in the hand worth two in the bush?

Here’s the scenario:

You’re working on some software. You need to add some new functionality to it, and in looking through existing stuff you see the methodology in place. You don’t think it’s the best way to do it (or maybe it’s objectively incorrect for some reason), so what do you do?

a) Spend a lot of time re-working the existing stuff into a “better” way of doing it, then quickly add in your new stuff now that the framework is in place.

b) Write in the new methodology and supporting classes etc, then add your new stuff in and comment the old stuff with // @TODO: Update to new methodology.

c) Just write your new stuff in the old “incorrect” or less preferable way, sigh, and get on with the next task.

Answers on a virtual postcard please.

Personally I’ve done all three of these, with no particular favourite. That might be the answer in fact, that different situations and time pressures require you to take the easy option. I know that re-working existing code into a nice framework will provide a good footing for my new functionality, but it’s at the risk of changing or breaking existing functionality that shouldn’t have been affected.

This probably doesn’t just apply to software development, either. This year I’ve been renovating our kitchen. At one point we had the decision on whether to take the old water-damaged ceiling down or not. My options were:

a) Rip the old ceiling down, re-do all wiring in the kitchen (lights and power), put new plasterboard up, new fittings, have it plastered and paint it.

b) Put new plasterboard up over the top of the existing ceiling, have it plastered, paint it. Thus keeping the old lighting locations and meaning I couldn’t redo the electrics or put outside lights in.

c) Paint the old ceiling and get on with my life.

I went for a). Turns out that was the right thing to do, because now we have outside lights, new spotlights replace the old striplight, and we have loads more plug sockets (removing some dodgy wiring in the process), but I didn’t know that before I started.

Have I just answered my own question?

FogBUGZ 6.0

Is great, and only misses two really important features for me:

  • I know this sounds silly, because you can sort cases by any column, but what I want is an “order of work” column.  Each case chould know what case comes before it, and I (and my boss who decides priorities) want to be able to drag cases up and down the list.  This allows us to define which priority 1 to do first.
  • When you “do something” to a case, FogBUGZ is clever enough to change it’s status (“Resolved (implemented)”, etc).  It’d be really nice if it then knew who to automatically assign it to based on the new status.  This might be an individual or a team, I don’t know, but would be great for assigning cases to testers when development work is done.  A full-blown user-configurable workflow would be amazing…

Oh, and as an amateur photographer I’d also like to be able to submit my own photos (or links to photos on Flickr) as the “Photo of the Day” thing.  I know it won’t improve the team’s productivity, but it would be cool!

Keep up the good work, Fog Creek!

The Evil of Implicitness

I really dislike things that are implicit. Okay, it doesn’t help that I’m the most forgetful person I know, but still.

I’m a believer that if you want something done, you should do it. Use a framework if you like as a tool, but explicitly ask that tool to perform the task. Things shouldn’t be hidden away, doing as they please.


Post build steps
I’ve mentioned it before, but I really do like my build process to explicitly do everything I need, in one place.

My boss gave me a tip yesterday. He says that for things like this:

insert into a_table (id, the_value) values (1, 11)

He sometimes cheats and does this:

insert into a_table select 1, 11

I think that’s dead clever (because I thought you had to specify the columns you want to insert into), although I’d personally never run it on a production database, and it would only be for quick and dirty test code on a database I control. The problem is (and to be fair he admitted this), if someone changes the schema of that table, things can get messy very quickly. I’m more anal so my first thought was that I just like to know what columns I’m editing without having to investigate that table schema before I run it.

Of course we all know the evils of:

select * from a_table_that_might_have_columns_added

Which speaks for itself, so let’s not dwell on that.

Attack of the Scheduled Job
I personally dislike any kind of scheduled task. It makes me nervous to think that there’s an unknown cloud of processes that I don’t know about that might be editing my data without me knowing.  Also, you lose a bit of the “realtimeness” of information with scheduled jobs. Of course sometimes this is necessary, as in the case of maintenance tasks.

So I like to do things by hand a lot of the time. I don’t like to write classes that do work in constructors, I prefer instead to use factory methods or create static methods called “Load” which create the object and populate it for me. Right or wrong is tough to decide, and is probably a religious issue as much as anything else. But “better safe than sorry” and “keep it simple, stupid” are principles that make applications easier to maintain, because you avoid more issues from happening, and make it easier to find and fix those that do appear.

Where to get good eye-candy?

I’m working on a new project, which is a web app for appointment booking. I want some slick icons and images to go in it, to give it a web-page feel, rather than the drab look it has now.

Thing is, while I can take photos and use Photoshop to spice them up, fade them, give them reflections and so on, icons are actually really hard. I’ve found a Photoshop tutorial that looks really good, but this isn’t my strongest area, and since it’s a spare-time project for a friend I might consider buying something.

I also saw the Crystal Clear icon set at Wikimedia Commons. It’s exactly the kind of thing I’m looking for, but doesn’t have some of the more specialist things I’m looking for. Maybe I need to employ the services of a freelance graphic designer for this, but I’m not sure that’s going to give me good value for money, as I won’t need hundreds.

Maybe I should just learn to do it myself?

Snug Fit

Recently (actually, a few months ago) I found I was getting backache from sitting in my chair all day.  My workspace is far from ergonomic, so I took a look at it and this is what I found:

  • My chair is a woefully inadequate cheap “managers chair”, which has only up/down adjustment.
  • My desk is 2 inches too high and non-adjustable.
  • My laptop, while on a box on my desk, is an inch or so too low.
  • My desk is too cluttered.

I decided to do something about it, and since my firm agreed to buy me a new chair I’m going to invest in some other things, too:

  • A new chair.  I’ll be buying a nice Hag from the Total Backcare Centre.  I’ve linked to their website because I had a wonderful experience at their shop.  I got plenty of advice on posture and workspace setup, and then assessed for an appropriate chair.  They had loads of demo models in, and I was shown from one to another, with one-to-one help, to work out which was best for me.  Truly excellent.
  • A new desk.  I’ll be going for the Galant system from Ikea, as it’s modular and offers good flexibility if we decide to move house.  In addition, it’s height-adjustable so I can get it just right.
  • A monitor stand.  I use a cardboard box at the moment, but it’s not pretty.  Does anyone have any recommendations?  Some sort of swivel arm might be nice…
  • A tidy up.  Hard work but worth it.  I’ve bought some storage already, so I just need to make better use of it.

Hopefully once this project is complete I’ll have a much more comfortable workspace.  As Jeff Atwood points out, you need to look after your second most important asset, and I intend to start now.

Other piece of advice I learned from the TBC:

  1. Buy a good chair.  Don’t skimp here on price.
  2. Buy a height adjustable desk, and find the correct height for your chair, before setting the desk so that the top of the desk is level with the bottom of your elbows when sat.
  3. Try your mouse on the left.  It’s hard to become a lefty, but could be worth it.  Alternatively, get a keyboard without a numpad, and buy a separate one if you really need it.
  4. Learn to use the keyboard more.  It’ll pay dividends in productivity terms, and avoid mouse-related RSI.

Anyone got any other tips I haven’t mentioned?