37signals doesn’t like you sorting stuff. Are you just remaking a spreadsheet?
n8.tumblr.com
n8.tumblr.com
When I'm looking for something, I often remember where it is by different criteria (date last visited, date saved, keywords, frequency of use, numerically, alphabetically, etc) so I get frustrated when my options are limited. But I do understand why designers want to do without.
I hate even more when things are sorted badly. For a long time Google Bookmarks were sorted alphabetically by default. Every single time I went looking for an old bookmark, I'd navigate to the Google bookmarks page and then I'd have to click on 'Date' and then on 'Bookmarks'. (Random tweets and other nonsense was included with my bookmarks by default, too. You had to choose 'Bookmarks' to view only your bookmarks.) 99.9999% of the time you're looking for a recent bookmark, not one that begins with a zero or 'a'.
To this day I'm baffled as to what confusion of ideas lead to that interface. They fixed this in the December 19th update/redesign but I'm sure it persisted for at least a couple of years.
Does that mean you are just remaking a spreadsheet? Cmon. No. There is all sorts of added value for using a webapp that has a tabular data view. Maybe it's nicer to use. Maybe it comes with choices pre-filled out for you for certain columns. Maybe you provide user/team visibility, or sharing, or all sorts of other stuff that a simple spreadsheet could never provide standalone.
The point is, don't shoot yourself in the foot because 37signals forgot to put a tabular view of their data in. That means nothing. You should be thinking -- does a tabular view add value to your app? Yes? Great, then provide a tabular view for your users.
I think the point of the article was that the author never thought this, but presupposed the answer was always 'yes'. It wasn't until looking at alternative implementations that this question popped up.
I've done the same myself. I once implemented sortable live lists (lists that may be updated with added/removed items in the background, with only part of the list shown and the rest retrieved from the server). I wondered, 'how should this work?' and cast around for other examples. At first I used the (old) Google Reader model: two lists, one is 'All items', the other is 'New items'. But then I realised that, actually, sorting doesn't add anything, and indeed might confuse people who expect predictable order in their lists. Problem solved: don't allow sorting, instead provide a canonical order.
Developers love to put in sort controls because they cover lots of use cases and don't take a lot of thought to implement. And mentally, they tend to think about sorting a lot anyway. But my experience with looking at data from non-developer users has always been that they rarely use sort options when available (and search filters, either, btw. ) You see about 5% of users employing those controls.
So the developers think they've solved certain use cases by providing sorting, and users don't see those cases as covered, because they don't see that they can use sort to solve them. It's better to just not put in sort, reduce complexity and find other ways to cover those cases that users are more likely to employ.
It's just not how regular people think about manipulating information - in the real world, sorting a set of any interesting size is impractical if not painful. You can literally ask a loaded question - "is there any way you could sort those to make XYZ easier?" and folks will avoid that in favor of other method.
We saw less than 10% of users ever employing the sort controls; that's not zero, but it's low enough that you can't depend on them to cover use cases.
The problem with your examples are that you're not really showing "sorts" from a user standpoint. What a user is really doing is effectively filtering for the "show me the N least difficult", not "sort by difficulty, ascending." Also, sorting on a relatively scaled value make more sense, but a lot of the time the values in a column don't have that kind of relationship. What's the "least zip code" good for?
I agree you don't have to reimplement spreadsheet features, but make sure you have a CSV dump if you think your users would appreciate that.
But, "the leay way says to do something and iterate based on feedback" they said. So, a couple of months and iterations later, it was all redesigned with a single number: the important percent.
A trick to help focus on the important stuff is to ask: "If I ask a user that doesn't care at all about my product and is extremely busy, what should I show to make it interesting (Or convenient)?"
once you have a lot of data, you want fixed column headers. stacked sorting (column A first, then B), a lot of things suddenly become needed additions.
and where do you sort? front end or back end? how much data are processing?
just look at google spreadsheets and you'll see how sub-optimal it is.
Otherwise, his point stands. DataTables has hooks for this stuff, of course, but that's just a way of saying "DataTables doesn't itself solve this problem".
I find that using DataTables as front end and hooking it up to a backend is pretty straightforward and results in a nice separation of concerns - let the server/database worry about paging, sorting, searching and filtering. Of course, if you have a relatively small amount of rows then just let DataTables do all the work - but at least you have the choice.
Paginagtion(ajax or page reload takes care of it). I use slickgrid https://github.com/mleibman/SlickGrid; pagination is straight forward, filtering takes some work. But do the hook once, and wrap the table in jquery-ui css framework's ui-widget, and you have a good looking, working table.
> but that's just a way of saying "DataTables doesn't itself solve this problem".
slickgrid is sortable, but filtering needs work. In fact, "slickgrid doesn't do everything" is part of its philosophy.
I have come to opposite conclusion that of author's. Having an excel sheet replacement in your repertoire is important, especially when you are replacing enterprisy stuff.
Example: http://www.primefaces.org/showcase-labs/ui/datatableComplex....
This is working client side, if i want to do server side its as simple as implementing a single class that pushes the sorting/filtering/paging off the to the database:
Example: http://www.primefaces.org/showcase-labs/ui/datatableLazy.jsf
It can't really be much harder to do this on other stacks can it?
1) All row data sent to client side, all paging done on client
2) Backing controller contains a List with all data in memory, client only gets 1 page at a time via ajax updates.
3) A truly 'Lazy' data model, ajax request for a new page of rows, controller references a lazy data model that fetches just that page worth of data from the database tier and sends it to the client.
In practice I really only use #2 and #3 normally. Unless the application has a bad internet connection as a requirement I assume its faster or negligible to fetch pages via ajax vs loading them all into the client up front. As far as choosing between #2 and #3, for my applications its usually obvious, the table either contains 5-25 items (go with 2) or thousands of items (go with 3).
In the middle ground i guess it comes down to loading: Can you afford to use more memory in the web tier or would you rather keep that memory usage down and suffer slightly long update times? Assuming your database is well designed it should only had maybe 10ms onto your response time to just grab the page from the database vs already having it in memory.
How is it sub-optimal?
One of my jobs is to make a UI that gets this right, so I'd appreciate hearing what you (or anybody) find deficient in the way online spreadsheets do this.
outside of spreadsheets, take the itunes simple list view as a baseline. the 'simple' things are important. double-clicking the column border resizes the column to fit the longest text, etc.
This is definitely a solvable (and solved) problem.
and where do you sort? front end or back end? how much data are processing?
If you have all the data loaded clientside, sort it there. Otherwise, just make a call to the server to query for data compliant with the new sort order. Both methods are fairly low cost.
But for questions like - allow me to examine the cost-distance-availability of hotels sorting is essential.
For example, in my old mail system, I could often home in on a particular message by sorting the relevant messages by size (simple communications < code exchanges < zip files containing all project files). Gmail's search-only approach-- while no doubt theoretically pleasing to a company that cut its teeth on search-- feels like half an implementation to me.
I would argue that there is an inherent friction between usability and accessibility of information. Adding options to sort, filter, search, or selectively show or hide fields might make data more accessible but result in reduced usability overall. The exact point where the tradeoff happens isn't clear to me, but 37signals tends to err on the side of usability, at the expense of accessibility. Of course, one could argue that in a data-intensive app, accessibility _is_ usability, and vice versa.
Spreadsheets are hard to share and hard to version-control, and the data is cumbersome to access programmatically.
I think that it is better to question why developers still create so many simple CRUD applications. Where is the next generation MS Access?
I should note that a number of things are currently disabled on the site (like the mobile version and invite referrals), but the current information on the site should give an idea where Loggur's headed. A few things are disabled because just last week I decided to convert the entire backend to Node, mainly for Socket.io... because the idea is to let users edit and use apps together in real time... probably using a turn-based system or variations thereof. I was going to wait until after beta release to do this but decided it would probably save a lot of time and effort in the long run to knock it out while the code base is relatively small.
And I actually just now (re)hacked together the invitation system right after I saw your comment. Gotta seize the opportunity, even if it only means another 5-10 sign-ups! The plan was to wait until after the app builder is complete and use Loggur to build Loggur (i.e., recreate the majority of the current site), as it wouldn't take long at all; but the opportunity came up to do a shameless plug.
And I thought I was done coding for the day!
Cute :-)
Because clients keep throwing money at us.
I am not claiming that every computer user should want to create simple CRUD applications. A few technically competent non-developers might wish to do so though. Many of us who have been around for a while have had to deal with someone creating an MS Access application that is eventually used by everyone in a department. Companies would often then pay for a "professional" reimplementation of the MS Access application that would take months or years and cost a fortune. Often the end result was something that did not work well and was hated by users.
In Sharepoint.
Back in the 90's, everybody wants app with DB capability. Thus MS Access fills the need. It's cute and perhaps less barrier to enter by non-technical people.
Fast forward to 2010, everybody wants an agile web-app that integrate nicely with BI, Access, Excel, Word, with version control and what not, with CMS capability, with alerts, RSS reader, portal like capability... here comes Sharepoint.
The answer there is probably to let the users pick their own tools too. If someone wants to chart data in your system for a PowerPoint presentation, the answer might be to give them a CSV export, instead of building a chart drawing tool into your application. (Of course, that assumes that your monetization strategy doesn't rest on restricting access to your data...)
x = {1..5} and y = {3.0982, 3.3928, 3.8838, 4.5712, 5.45500}
can you tell if that's linear, quadratic, or something else? Probably not. But if I show you a graph:
http://www.wolframalpha.com/input/?i=.0982*x**2%2B3
it becomes pretty obvious. A table is not the right way to display this data.
That's not relevant to the point of whether tables should be sortable, if you already provide a table for some reason.
A more relevant task:
Given the data
3 3.88
5 5.45
1 3.09
2 3.39
4 4.57
Can you tell if the columns are correlated? With sorting, you can, easily.Furthermore, sorting large data sets is a huge performance challenge. I think that's the main reason why you don't see it in Gmail. Not because sorting is not desired.
Here's an example of how to connect a Google Spreadsheet to Neo4j running on Heroku (http://blog.neo4j.org/2011/12/neo4j-labs-heroku-neo4j-and-go...).
I don't know how complex your data set is, so just remember that if you have an extremely complex set of data, give me the user a way to find something based on different criteria. If an item has a date, a number, attachments, etc give me a way to sort through them so that when I kinda know what I'm looking for I can find it.
Don't deny your users the 80% (more like 99%) case just because there's a complicated tool out there that, with a bunch of bloat and UX problems, can also provide the 20% (1%) case.
37Signals doesn't provide it in widely used apps, and very few are complaining. So sorting is more like the 20% 1% case.
That's one problem I see with UX/UI designers; sometimes they don't really think about what the end user wants.
And this statement is just bull-crap:
"All this got me thinking about if I’m truly designing a solution to a problem if all I’m doing is replicating the features of a spreadsheet in a web app. Why wouldn’t a user just use a spreadsheet then?"
Because you're building an application not a spreadsheet viewer.