Wednesday, 26 March 2014

How to Build Excellent Software part 2

I release my initial post on building excellent software may have sounded a bit anti-UX. The UX "movement" is all about providing an excellent, unique, crafted user experience that rewards the user and delights them with your product.

I perhaps implied that "features" don't matter. Yet little rarely used features are often the ones that delight us the most. I recently owned a Samsung Galaxy Note. With the stock Samsung firmware it was extremely feature rich, there was lots of nice stuff like sending the screen easily to my TV, some nice gesture support, eye tracking screen time-outs. However, I chose to install a custom firmware that was extremely stripped down by comparison. This was purely because the standard firmware was too slow for my liking, I felt I was always waiting. Of course I missed some of the features but the large increase in responsiveness in 99% of the actions I would perform on the device more than made up for the missing functionality. I have found that most of my colleagues with Samsung phones have installed custom firmware in order to improve performance. When the device is waiting for you and not the other way round you have the basis for an excellent UX, without this base level the UX will always be worse than the faster option. Slow application responsiveness is always one of the highest causes on the list of why someone tried an alternative product, sometimes it is the only reason given.

But surely responsiveness and optimisation is a given and should already have been accomplished and dont quad core mobiles make slow performance a thing of the past? Well even Google has arbitrary delays in its software, for example in 4.4.2 android prevents services and broadcast-receivers from calling startActivity for 5 seconds after the home button is pressed.

This arbitrary delay can cause the OS to appear sluggish under certain circumstances, and this 5 second delay seems pretty unnecessary. So while Android is making great strides in those little features, and Google Now gets more impressive in every version there are still lots of places which could be optimised to provide a much better experience. Using less system resource and providing results faster has so many knock on effects in mobiles that every fraction of a second saved on common actions really is worth more than the sum of its parts to the end user.

Optimisation can often be a relatively low cost activity, it is easy to test once the system is appropriately benchmarked, as long as the features remain the same then you know that it is a guaranteed improvement. Introducing new features with even a modest level of complexity will almost always cost more, and their benefit is not always easy to calculate. In extreme cases new features can even be considered a net cost.

Windows Vista looked nicer than XP, in many circumstances it could be faster, however, anyone who used it will be well aware of the constant additional confirmations demanded by User Access Controls (UAC) required for "security" purposes. Most users quickly turned off the UAC, this new feature suddenly has zero benefit, but actually worse than this the negative experience while it was active and the time cost of switching it off leads to a net loss in the eyes of the user, and this negative view can even spill into developing negative opinions on other features. This detracted from many of the positive elements that Vista introduced such as superior font rendering and better search indexing. A lot of people remained on XP or even switched back from Vista to improve speed and to avoid irritations such as UAC.

It is vital to have a good test suite available to make sure that there is no detrimental performance impact from new features.  Performance reduction has always been the first and most vocal complaint I have even witnessed in software development. This can easily turn a beneficial feature into an end user revolt over a new version. It helps make sure that any new feature has little or no cost and will only be viewed as a benefit.

Tuesday, 25 March 2014

HTC One M8 - worth the wait?

Well the original HTC One got T3's phone of the year. Not a bad choice, certainly a very good all-round choice. The ultra-pixel camera managed some mixed reviews, general considered acceptable, but behind most of its immediate rivals like the S4 in the majority of comparisons. Not everyone agreed it was the smart phone of the year with some like Engadget pointing to the Motorola Moto X. The Moto X pipped the HTC with a few features such as always on voice and glance notifications as well as a more pleasant shape to hold.

HTC did however get so much right with there phone their new M8 has the potential to rule the roost. Unlike most phones it has front mounted speakers, HTC Sense is a genuinely pleasant UI with all of the basics that a user can want well covered, and it is also one of the prettiest phones. Obviously there were some minor flaws, the relatively small battery size, which is not removable and the lack of an SD card slot means there was some room for improvement.

So with the M8 version we were all looking for them to add an SD card, improve the camera, bump up the battery, and perhaps add a low powered voice cheap or some other unique feature to delight us and they would be almost guaranteed 2014's phone of the year.

After the release I felt a little let down. Sure the M8 has a bigger screen, better processor, SC Card slot and still looks great, but they could have gone further.

The camera which probably had the most criticism has lost OIS, but gained two tone flash and a secondary camera to allow refocusing. I have not seen any testing of this yet, but with the Z2 having a huge sensor, the S5 with a new type of camera and the Lumia range with OIS and large sensors it seems HTC is unlikely to produce anything of similar quality when the light is less than perfect.

The battery is not huge, it is noticeably smaller than the S5 which is likely to use less power with its screen and much smaller than the Z2.

Always on voice strikes me as a feature which Google could make great by 2015, each year I have seen voice activation improve and always on voice is necessary to make it a great feature. Also I love Apple's finger print scanner, these features really make using your phone simpler, faster and allow more to be done, just pumping up the chip size isn't really going to move lots of units any more. If you have an HTC One the upgrade does not seem worth the money, again with an S4, the incremental change does not seem worth while.

Based on the currently announced flagships nothing so far has appeared to move me away from my Lumia 1020. I hope Motorola or Nokia has something up their sleeve as I do love changing my tech but I dont just throw away money for tiny incremental improvements.

Sunday, 23 March 2014

N95 Nostalgia Blinds Users to the Facts

I colleague commented to me recently that Windows XP was the best OS Microsoft ever made. An interesting concept, however, I strongly disagree, Windows 7 is substantially better than XP and additionally I felt that Windows 7 brought great new features where as Windows XP feature wise was practically the same as Windows 2000. You could even argue that outside of the business domain there was no real productivity leap for the home user since Windows 95. Windows 7 instead made the task bar easier to use, the snap to left and right are features I use all the time. I would argue that Windows 8.1 is better than Windows 7 in many respects, but in the same way that Windows XP is not a step change from Windows 2000, I would class Windows 7 and its new features as the first genuine universal productivity improvements for a long time making Windows 7 the best Microsoft OS so far. I feel that nostalgia can often blind people to how much a new product has improved or to all the flaws that irritated them on a daily basis.

I was reading a Techradar article I was interested in how much nostalgia impacts opinion. The N95 was the worse phone I ever owned. Specification wise it was superior to the Sony W900 that I had before it, but in every important aspect it was worse.

The Number One Flaw

The N95 Slide in two directions...It would slide open in both directions one for landscape and the other for portrait. The landscape mode was of no use to me, however, the fact that it would open in either direction I would find myself unlocking it as I attempted to put it in my pocket. This meant that when I had to pocket it I was forced to do so slowly, if I forgot I would need to take it back out, lock it and put it back in... This is one of the most frequent actions performed and therefore highly annoying that it was worse than any previous phone.

The second aspect was when removing it from my pocket I would frequently catch the phone and slide it open in landscape mode, switching it back to portrait mode would take a few seconds. It is very annoying waiting for your new powerful phone to take its time while you wait to read a text!

The Basics are Worse

The T9 text was significantly worse than Sony's. While Sony displayed a drop down list of all the words including words larger than the ones you had typed Nokia hid all of the options, and the manual did not even tell you how to use T9, I had to ask a friend how to access T9 alternative words!

The quality of phone calls was lower, the Sony phone was very long and I assume it had a huge aerial as a result, the Nokia would drop a lot more calls and the sound was no where near as good.

The New Features Were Not Ready

WIFI was a great addition to a phone given how slow over the air internet was, but navigating circa 2007 websites with an N95 was so painful it was not worth it. I tried a few times, but as typing was rubbish, navigation was poor it simply seemed a waste of time.

The camera was an improvement, but in good light the Sony could still take an acceptable photo, and the video camera was not limited to 30 seconds like the Sony phone.

The GPS was interesting, but I found if you wanted to use it as a sat nav it needed an extended aerial, and a cheap sat nav was substantially better.

With all the basics worse, and the new features not adding much, I was very disappointed with the N95. I had given my W900 to my brother-in-law, and when I got a new phone after the N95 I gave this to my brother-in-law as well. A few months later he told me he preferred the W900 to the N95...so at least I know I am not the only one.

While blogs and tech journalist praised the N95, it was a deeply flawed phone. It also demonstrates how important it is to get the basics as good as possible, delays performing basic common tasks are so frustrating that it can turn a tech marvel into a painful experience.

The same flaws permeate Windows 8. Microsoft substantially improved the boot time, which is a universally loved feature, only to open to a tile interface rather than the desktop, slowing access to the most common features. It should be obvious that doing such a thing will only irritate people.

Saturday, 15 March 2014

Radial Menus in Android 5.0?

Google has patented a new radial menu system. Many usability texts I have read advocate radial menus because of the proximity benefits, Kirill Grouchnikov even blogged about how nice they are over the more common context menus. They do have some usability issues however:

1. The target area gets smaller the larger the number of menu items.
2. It is difficult to travel through all of the options via a keyboard and screen reader depending on how you allow the arrow keys to work, especially you have multi level radial menus.
3. Any uncommon navigation method can be distracting to new users.

Google of course does not need to implement the patent but I for one am interested in seeing what might arise. Google's patent for a pop-up radial menu that uses two fingers to operate one is an anchor and the second is selector.

The main issue with pop-up menus on touch screen devices is that they are always activated via holding down a finger on the screen. It would be great if they could be activated instantly then such a menu could replace the on screen buttons. However, the clear instant access that on screen buttons provide makes me think that radial buttons will only be of minor benefit. I hope Google can prove me wrong, then perhaps we can all start using radial menus when they seem like a good idea without fear of instant customer revolt at a new paradigm.

Wednesday, 12 March 2014

Living with Windows Phone 8

I have been using an Android phone since the Samsung Galaxy S was launched in the UK. It has grown from an OS which was only slightly better than Symbian and perhaps a little worse than iOS to the best selling OS in the world and with 4.4.1 arguably more polished, functional and usable than any other OS.

However, I have been curious about Windows Phone for a while. In terms of a mobile phone my requirements go in the following order

1. Phone calls
2. Camera
3. Web browser
4. Deezer
5. Email
6. Whatsapp
7. PDF reading
8. BBC iplayer
9. Youtube

Now Nokia has been releasing phones which are perhaps the best in terms of the first 2 criteria. With IE11 Microsoft have arguably one of the best browsers available so I was hopeful the browser would be good enough quality. Also due to the lack of popularity of WP the prices drop very quickly.

I picked up a Lumia 1020 and here is what I can report:

1. Phone call quality - definitely better than my last Samsung phone, probably the best I have ever experienced. I have not yet had a phone conversion where I have not understood what the other person has been saying nor has anyone on the other end complained about not being able to hear me.

2. Camera - well I do wish it was faster but the quality of the photos is the best I have seen in a phone. Great for capturing a moment.

3. Web browser - My favourite browser is still Chrome on android, but you need to have a top spec phone or it is no where near as smooth as IE on WP or Safari on iOS. That being said IE on WP is fast, fluid and works for every website I have tried so far.

4. Deezer - The sound from the headphones is much better than my previous Galaxy Note and Nexus 7, the application works well, although the recent update on Android has a slightly better interface, but not significantly.

5. EMail - Well I use Gmail and it integrates much better on Android than it does on WP.

6. Whatsapp - This works, but WP is missing the ability to compress videos which is a bit of a shame, otherwise I have not noticed an obvious difference.

7. Adobe - Available on both WP and Android it works well, although the ability to easily copy files on Android means that it is a big winner in this department.

8. BBC iPlayer - BBC iPlayer seems to never function well with the latest Android then after the release has been out 6 months and BBC iPLayer has finally fixed its bugs a new version is released and it falls apart again. WP the interface is basically the same but the app has not messed up on me yet so WP wins this one.

9. Youtube - This is a great big hole in WP. Basically you just use the web browser, it lacks all the nice stuff that is now available on iOS and Android.

Things I miss

1. Swype, the WP keyboard is good, better than iOS from my perspective, but Swype is better than both, allegedly WP8.1 brings gesture typing and I for one cannot wait.

2. Notification bar - With Android I was one swipe away from reading emails and SMSs. With the Lumia 1020 I am notified that I have emails and SMSs to read on the glance screen, but then I have to go into the main screen and click in and out of the two different apps.

3. Google+ photos

4. Quick voice reminders

Things I like more

1. Glance screen is very nice.

2. The animations are better on WP than any other device, I enjoy the squeeze effect on reaching the end of the screen, the way different sections animate in at different speeds and generally how stuff moves about on the screen is pretty and fluid.

3. Phone switches in and out of Wifi very quickly.

4. Hardware is quality throughout, from buttons which require just enough pressure to never trigger accidentally to a battery which lasts 2 days, great sound and reception quality.

5. Voice recognition is the best I have experienced so far, while all vendors have stepped up over the last 2 years Microsoft so far has recognised every word I have tried...I haven't tested extensively but it has already beaten Google and Apple in contacts recognition so I have confidence that it is the best. The next real test is place names...

What will be my next phone?

Hmm difficult choice, I doubt it will be an iPhone, but a lot depends on Windows Phone 8.1. If a notification centre and voice reminders are not forthcoming I suspect I will be looking at Android again, otherwise I could be getting the next pureview model released.

How to build Excellent Software

Requirements

It does not matter what language, database, framework or methodology you employ making excellent software requires a strong focus on 2 major aspects and then an iterative end user focus on their use. The most important aspects to focus on are responsiveness and accuracy. 

Responsiveness

Any request must be actioned in a timely fashion, and if possible always faster than the end user can keep up with. Yes there are plenty of processes which are so computationally intensive which require second, minutes or even hours to perform, however, it is vital that the application is responsive. If someone presses the "compress video" button then you should be immediately aware that you have successfully pressed the button, hopefully there should be an ETA on the process and/or % completion time.

It can also be a good idea for an application to remain responsive while other actions are being performed. So you are compressing a massive file, is the user likely to want to select another file to compress? If the application runs in a different thread perhaps you can queue up the compression of the next file while the other is processing. By allowing the user to perform extra actions while the "slow" processes are running in the background they do not feel like they are waiting for the application they are performing the additional tasks they would need to do anyway, rather than wait for the slow process to finish and then perform the actions later.

It is vital that anything that is less computationally intensive is processed so quickly that the device is waiting for user input and not the other way around. It is important to work on the most common pathways first to make sure these are all as responsive as possible.

You can manage user perceptions of speed through transition effects. Normally a button will need to update its state very quickly so that the user is not left wondering if they clicked successfully or not. These UI elements will normally need to update in the sub 100ms region. In terms of altering state on the screen in response to user interaction this can be slower, but you should aim to be less than 300ms if possible. If the task will genuinely take longer than 300ms it is important to consider what can be done to make the customer not feel like they are waiting around for your software. Can you pre-process the data before the user has completed the task, is it possible to guess their next action?

A simple case is the "Find" function. When someone performs a find on a page it is highly likely that their next action will be to "Find Next" pre-processing in the background to find the next item can dramatically improve the responsiveness. Similarly paging through a document or table, pre-loading the next page can really help, perhaps even pre-loading the next and last page can make your application feel like lightning if it helps bring your performance from over 1 second down into the milliseconds.

Another aspect of responsiveness is being able to cancel long running processes. Sometimes you can accidentally trigger a long running process. Any process which can take over 1 second to complete should have a cancel option. The cancel option should act immediately, even if the cancel action is not instant try to make any roll back actions occur in the background to prevent the user being stalled on a cancel screen wondering if they would have been better off just letting the process complete.

A responsive application not only feels like it is built well, but invites exploration of the application, the user knows that they will not be waiting for ages if they click the wrong option.

Accuracy

The application must work with accuracy. For example a navigation application should lead you to the correct location and not a field in the middle of no where. Any time a user experiences something that is not accurate they will lose confidence in the application. This confidence means that people can not use features of the application even if the feature was fixed years ago, and even if they are told they are fixed they will be wary of them and will more likely conclude that any issue they experience was the fault of the application rather than their actions. Essentially they will be very willing to switch away from an application that they consider inaccurate to any available alternative.

The only real way to achieve accuracy is through extensive testing and bug removal. Unit testing, automated testing are beneficial, but these will not pick up that the end user finds some of the language you have used as ambiguous or that some of your use case assumptions are wrong. My favourite option is the introduction of "expert users" into the development process to evaluate, test and help guide the development process.

What about features?

Features are important if software does not perform vital features then it is useless, but feature richness is always a distant 3rd in respect to responsiveness and accuracy. How many times have you picked the slower or more buggy software because it had features that the other software did not, I suspect the answer is a lot less frequently than the fast, relatively bug free software.

Once the important features are available, responsive and accurate then it is time to look at user actions, are their features the customer would love, are their common tasks you could better automate for them. One area to really be careful of is adding features which add complexity to existing functionality. For example say you add the ability to save your application to an online service. No one can complain about this new enhanced ability, however, what if when you add this save functionality to the application you require every save action to choose between a local save and a cloud save every single time. Suddenly this new feature will cause a user revolve because it is one more click required to perform a common action than it used to have.

Actually user perception to change can sometimes surprise you. I have seen users that are so adverse to change that even reducing the number of steps to perform a common task can be seen as a bad thing. To make your excellent software perceived correctly so it is also important to counteract any aversion through early education and if possible involvement in the change process.

Tuesday, 4 March 2014

Google Now, annoyingly not good enough...

I read an article recently , the author stated he could not leave android because he was dependent on Google Now. I have had the opposite experience. Google now has progressively become less useful for me over time.

Every day I have at least one card...this is a weather widget. I have never really understood the desire to see the current weather. I am never far enough away from the window to need my phone to tell me the weather, what would be useful is being told how the weather might change, this however is a whole click away, and I rarely need this information anyway.

The second card is my commute tune to work. This is always wrong. I can guarantee that it is wrong by at least 33%. Google navigation even if it was right does not seem to offer traffic redirection.

There is a third card that I receive which is an update about my football team's up coming matches. This is the only card which is occasionally helpful, however, it is unreliable, for example last season it did not mention any of the Europa league matches and done of the cup matches.

My fourth card is a list of articles which I have recently read which have been updated since i have done so. Frankly I have too many new articles to read to go back to an old one to pay spot the difference.

Then I get the navigation time to some random place that I looked at on Google maps.

I used to gain some use from the football team card, however that was only when the Google now appeared in my notification area. However, now all I see is a link to view the 4 cards. An extra click and the additional information is distracting me from the only useful one.

I agree Google Now could be so useful if it can predict what I genuinely want to know and read about, but right now it is barely better than spam email. Too many unwanted cards hide the useful ones, and the truncation mechanism is based on the number of cards not on the available space in the notification area, which means information is no longer available at a glance.