This is a companion discussion topic for the original blog entry at: http://www.codinghorror.com/blog/2007/11/youre-now-competing-with-the-internet.html
Three words: cost versus benefits.
When you’re application is just one search field for anything and everything on the net (ie Google), that one search field had better do a lot! It’s their primary business (ignoring all the other apps they have that don’t make any real money).
Whereas for most other software companies search is only one feature of many. They just don’t have the resources to allocate to do an amazing powerful search algorithm. Nor the hardware resources to make that happen. It might just be a small part of the whole application.
For example a software application like ZoneAlarm (free firewall software) will most likely only have rudimentary searching of their log files, if any at all. It’s a minor aspect of the application and not worth the cost. It would be great to have, but the ROI (return on investment) just isn’t there. They’re much better ahead focusing on improving the quality of the firewall than in improving the searching capabilities of the logged events.
And I absolutely agree with you that unfortunately we’re all competing with the whole internet, which means that we’re indirectly competing with companies that offer very specialized features such as Google’s searching. And because of this our customers expect to see these very highly specialized features as standard features in all software applications.
That’s the reality of today’s market.
The industry is still in a state of flux, yes there are AJAX enabled apps and ubiquitous search; yes there are users that have been using computers 10-15 years now. There are, however, still users who are sitting down to a computer for the first time. How computer literate are most of our parents?
I’ve helped build an application for the financial industry and many of the end users of the program are professionals and are computer illiterate. I saw an ad for a software developer two weeks ago where they were looking for someone that was keeping up with the latest technologies so they could build and maintain applications in VB6 and DAO (yes DAO).
The Internet will help our industry by showing our end users better UIs than they are getting at work, this is turn will have them demanding that their internal apps be more user friendly, which in turn will encourage our profession to be more professional in application design and development; no more bosses brother-in-law wrote a macro so he can build our enterprise app for us.
Maybe it will even help with product design UIs like those microwave ovens Jeff showed a few weeks back; or being able to program the clock on a VCR (I know, who even has a VCR anymore).
Its all economics.
An application has 10 million users, costs $100 per copy and supports a development staff of 100. It has top-notch user interfaces.
An application has 1,000 users, costs $10,000 per copy and supports a development staff of 10. There is a good effort on the user interfaces, but there is a clear separation from the world class.
An application has 100 internal users, costs $100,000 to develop and supports 2 developers. Its really doubtful they will have the resources to make a world class user interface.
Sadly, companies would be well advised to buy a pre-made solution and conform their process to it.
The problem is that for ever person who knows what they are doing there are still loads that don’t. My parents (showing my age ) spend there working days, 5 a week, in front of the computer but the minute they get home its like they forget everything and always ask me to do everything and sort everything on our computer for them. Its hard to write software for those that want to be guided and those that can guide themselves.
Uhhh, like about 2-3 years ago.
Oh man, I was actually just about to write about this same thing in my own blog. I was quietly lamenting to myself how it is virtually impossible to write a decent search function these days because people have been spoilt by Google. Even ignoring the pagerank system they have, the way it spell-checks your words and even automatically searches for similar words is amazing - the other day I did a search for someone’s name (first name Kim), and it found matches of “Kim”, “Kimberly”, and “Kimberley”. That’s insane! How can we complete with that?
I was working on an internal app for a mega huge mortgage company (you know the one) and it mashed up their data with a map.
I plopped a big fat Search box and button on the top nav and told the developer “make it search all records at least for loan number, order number and zip code.”
He about came unglued… I mean seriously, that’s a simple union query and he didn’t want to do it…
This is the why we as developers have trouble writing apps that people want to use.
“Do One Thing”
A quote I’ve heard echoed many times by Jeff. It’s impossible to compete with a search engine like google when you’re incorporating a search function into some kind of app.
As an example, my university homepage’s (horribly designed) search function has no ‘advanced search’ box. I wish it did! The algorithm behind it all lacks so much, that it’s virtually impossible to find a course outline with it. But can we really expect a ‘simple’ homepage to give the kind of functionality of dedicated search engines?
I understand your point - users have been spoilt by the internet - and all software has to compete with online applications. I think once again it comes down to the quote I used above; do one thing, and do it well. For all the extras, integrate your application with tried and tested applications.
@Daniel, oh how I agree with you. I offered to build the universal search engine into an application. Just type what you want into the box and the search would find all relevant hits for the item to be queried. It was not even a matter of extra time to develop as the full functionality had already been implemented in a prototype. The beauty was that the data in the different fields were quite dissimilar and incorrect hits were highly unlikely. The customer specifically asked for multiple textboxes for each field to be searched, though. If I wanted to get paid, I had to implement what they wanted.
Reading (pointing/clicking/browsing/searching) is something most humans can handle well.
Writing (Computing/editing/assembling/hacking) remains (and probably always will remain) something most people can’t do very well.
It’s only natural that mass adoption of computers will change their traditional role as the all-purpose editing/writing tool into the all-purpose information/media browsing/reading tool.
If you worked too hard searching for SSNs in 416,
then it’s time to have some fun.
All the SINs you want in 212.
You guys are forgetting something:
WE (devs) know how these things work.
THEY (users) do not.
I once worked in a call center, it had two ways to open an account: phone number and customer name.
The phone number was obvious, type the 10 digits and click “search”, the name was a bit more complex, type the account holder name, and search, find the name that matches the customer calling, and open account.
Many many people in there, people with more than one cell phone and a mac, didn’t EVER touch the “search by name” button.
When asked, well, it was too much complicated. All the validation stole them precious seconds from their call.
In my experience, it usually was just a couple of clicks more.
However, in another occasion, I saw someone searching up to the page 50 or so from google for his two word search query, complaining that google was stupid.
If your software doesn’t suck, you’re not testing well enough.
Another strike against internal software is the fact that management is loathe to allocate resources to improve it since it isn’t a customer-facing app, so it ends up being a giant exquisite corpse of development, with each new luckless team being thrown at it having to do their best to work around whatever junk is already there. I’m not necessarily talking about rotten code written by previous developers, either, though that certainly happens. I’m referring to technical limitations. For example, we’ve got to keep an internal system running here that was done in the days before AJAX, and the team that wrote it roughed in their own custom AJAX-ish solution that is tightly coupled across all the layers of the app. While we could certainly break it down and redo it with standard libraries, it’s just time-consuming enough that no one wants to put in any free time since the reward will be nil, and management doesn’t want us wasting any more time on it than absolutely necessary.
So it goes.
I’m lucky as 99% of the software I write is for myself. If I can automate a task then up comes the IDE. I must say it’s not as fun when a bug pops up because the only one to blame for crappy code is myself.
its no coincidence 90% of the apps with horrible, awful, terrible coding, featured on worsethanfailure.com, are internal apps.
Hey Now Jeff,
Survivial of the fittest only the strong survive.
Coding Horror Fan,
I, for one, feel that a business should dedicate as much development time on internal processes (if not more, depending) as it does on its externally-facing apps. If the inner-workings are organized and handled well, then the customer will inherit that experience. It’s the little things that “shine through” or “stink through”. If I had a small sum of money for every time I had to “start my call over” and give my personal information again after being transferred, I’d have a large sum of money.
Seriously. I call up, authenticate, get transferred, and have to authenticate again to that next rep. Why? It smacks of crappy internal integration (i.e. a simplistic app used internally that doesn’t tie into the phone system).