Ubuntu One contacts, now with merging!
While we slowly ramp up to release mobile phone contact sync, using my own contacts as test data I realized that once I had merged my phone's address book and Thunderbird's address book, I had quite a few contacts duplicated due to them having different names with different information in them. So I had one of those "you know what would be cool...?" kind of moments, and started working on a feature that would let me merge contacts on the web, saving me hours of copy-n-paste.
A few weeks later, an initial pass at that feature has rolled out! Yay agile software development!
There are a few tweaks to the contacts interface, and you will see a new option:

So, for example, let's pretend you have 2 contacts that are the same person but have an extra name in one of them, one of them has his phone number, the other, his email:

and

We go to our new merge feature and select both of them:

Finally, we get a preview of what this will look like:

Done!
Plans for the future are:
- Allow conflict resolution when the contact has 2 fields that are the same but have different values
- Allow editing the contact in the merge preview
- Allow merging from the contacts page instead of a separate page
- Use this same mechanism when conflicts arise in couchdb merging contacts
Also, contact syncing from thousands of mobile phones will be opened up for a public alpha very very very soon. Stay tuned!
Moving to Ubuntu One
After a year and a half in the User Experience team at Canonical, I've decided to move to the Ubuntu One team. It's been an amazing experience to be part of that team but I've been missing doing development on a regular basis a lot lately, so I've decided to move into a role where I can get my hands dirty more often.
I will start by taking on anything on the web interface together with an amazing team, we will deliver a great experience and a higher level of polish for Lucid. There are some exciting new features coming to Ubuntu One, so it's a great time to be part of the team, especially with John Lenton and Elliot Murphy as managers.
This does mean I will be moving away from the work I've been doing on Launchpad which makes me sad, it's a fantastic and ambitious project filled with the smartest and most passionate engineers I've known.
If in the next few months you don't start feeling like life is getting better for you on the Ubuntu One web UI, please come and find me and point me and hold me up to my promise of wonderful webby things.
Why test driven development rocks
All projects in Canonical have a strong focus on testing. From all of them, I think Bazaar ranks the highest on obsesiveness on testing. As a drive-by contributor, it always felt like a very high entry barrier, and deterred me from getting into complicated changes. It was only after I bit the bullet and got into more complicated changes (in Launchpad, actually) that I understood that tests where my best friends ever. It's a safety net against myself, and actually lowers the barrier, because I don't need to know about the rest of the code base to make a change, tests will tell me if I break something (seemingly) unrelated.
On the more extreme side, there is test driven development (TDD). You write the tests first, watch them fail, and then start producing the code that will get them to pass. Having co-authored bzr-upload with the TDD-obsessed bzr developer, Vincent Ladeuil, I thought that if I was going to add a new feature, I may just as well try it (again).
It rocked.
I set up the test, my carrot, and the task went from "start poking around code" to "fix this problem". With the test written, it became very clear what parts of the code I needed to change, and how the feature had to work.
The results? in one hour, I implemented a feature that lets you ignore specific files on upload. With tests.
Plans for the future of bzr-upload
During UDS Vincent and I made sure we shared a room so we could talk a bit about what we wanted for the future of bzr-upload.
To ensure we didn't loose any of the conversation, he took notes and sent them to me, so now I'm passing them on for those of you interested in contributing or just knowing what features are in the pipeline.
* Create a .bzr-upload-ignore file that ignore any action for which one the paths matches an ignore regexp. Use the working tree version by default, fallback to the versioned one otherwise
* New command: "bzr upload-files FILES" to allow uploading individual files. Upload the specified files if no uncommitted
changes exist, --force overrides the uncommitted changes check.
* New command: "bzr upload-check". Walk the remote site ensuring that every file still has the same content that the local version --restore optionally restore the remote content to the local value. Optionally for remote sites implementing ssh and providing an md5 binary, the check can be implemented by comparing the local and remote md5 avoiding the full downloads.
Research results on Launchpad icons
Following up on our survey on icons in Launchpad, Charline Poirier provides us with the outcome:
Edit
: High level of understanding, but a strong association with "attention", "warning", and "danger". Might be worth modifying colour or shape to distance the icon from that interpretation.
Merge
: Reasonable understanding of "merge". However, participants were not entirely sure if the icon referred to the state 'merged' or the branches themselves.
Remove
: Icon strongly associated with "do not enter" and "delete". The interpretation "remove" comes only in third place. The icon is strongly evocative and might be better used to designate a more consequential or prohibitive action.
Remote bug
: A reasonable percentage of respondents understood the "remote bug" icon. Many, however, did not. It appears that the key for interpreting this icon is the representation of the bug itself. Various potential states of a bug were suggested as interpretations. This icon could be made more explicit.
External link
: Relatively well understood. It is worth noting that the icon has powerful suggestion of globality and reach (associated with translation, languages, internationalization, etc). It is a very evocative icon that could be more fully exploited perhaps in another context.
What next? We'll attempt to create new versions of the icons, run another session of user-testing, and if understanding improves, Launchpad gets new icons \0/
Improving Launchpad icons, round 2
Following up on my last post about user testing icons, it has been incredibly successful! We've had over 100 responses, and are now going through the data to put together a summary. I will post information on our findings as soon as we finish the work.
In the mean time, Charline Poirier, who is in charge of user testing in our team, has created another survey with 5 more icons to help us get more data. If everyone could give this survey another spin, and create some networking effects to help spread the survey to non-Launchpad users, it would be tremendously helpful to us. Here's the link: http://www.surveymonkey.com/s.aspx?sm=6iwthaIT4FwPCsMPa1EDEA_3d_3d
Launchpad is now fully open source
As promised, Launchpad has been fully open sourced (as opposed to the initial idea, nothing has been held back). Get it now, fix your favorite pet bug, and improve tens thousands of people's experience.
Mark Shuttleworth really deserves a lot of praise for this bold and brave move, open sourcing not only the code, but all it's history. It's a fantastic day today.
Update: yes, fully means including soyuz and codehosting, Mark has decided to release everything. The whole history is there.
See the loggerhead page:
Launchpad AJAX changing user habits
Check out what happened when AJAX bug tags editing landed in April:

Note that since Launchpad has the edge/production split, so the changes in the graphs are less drastic since a set of users start interacting with new code before others.
UDS repercussions
Check out UDS helping out the Gnome Zeitgeist developers: http://seilo.geekyogre.com/2009/06/udss-influence-on-gnome-zeitgeist/
User Experience everywhere
About a month ago, I went to Canonical's office in London for a sprint, and made good use of my Sunday by visiting the National Gallery. One fantastic thing about London, is the fact that all museums are free, not just because otherwise a few years back I couldn't of afforded going, but because the fact that they are free gives you the freedom of going to the same ones over and over again, and just calmly visit the bits you're interested in.
As I was walking by, I saw a painting that really struck me. It was a terrible and dark dragon eating two men, one of them is in agony while it's face is being eaten off. Quite shocking:

After looking at it for a little while, I went closer to read the description of it, which unexpectedly shocked me ten times as much:
"This gruesome episode comes from the story of Cadmus which is told in Ovid's 'Metamorphoses' (III: 1-151). Cadmus was sent by the Delphic oracle to follow a cow and build a town where it sank from exhaustion. The cow stopped on the future site of Thebes, and Cadmus, intending to sacrifice it, sent his followers to get water from the neighbouring well of Ares. They were killed by the guardian of the well, a dragon who was the son of Ares. Cadmus then killed the dragon and on the advice of Athena sowed its teeth in the ground, from which sprang up armed men who slew each other, with the exception of five who became the ancestors of the Thebans."
This got me thinking on how much first impressions are important in the user experience, but really hit me how much more important the actual content is. We tend to relay the content creation and management to "the marketing folks", when I feel it's a crucial part that should be worked on together to balance off the amount of text, with the tone in which it's written, and to ensure that we're adding value to the users' experience.
Yes, I'm starting to see UI everywhere.
Pages
Categories
Blogroll
Archive
- February 2012
- December 2011
- November 2011
- October 2011
- June 2011
- May 2011
- April 2011
- March 2011
- November 2010
- October 2010
- September 2010
- August 2010
- July 2010
- June 2010
- April 2010
- March 2010
- February 2010
- November 2009
- October 2009
- July 2009
- June 2009
- May 2009
- February 2009
- January 2009
- December 2008
- November 2008
- September 2008
- August 2008
- June 2008
- May 2008
- April 2008
- March 2008
- February 2008
- January 2008
- December 2007
- November 2007
- October 2007
- September 2007
- August 2007
- July 2007
- June 2007
- May 2007
- April 2007
- March 2007
