The article below I actually wrote to a friend in 2004. I don’t have any notes on why I wrote it, I just found it the sea of digital junk I’ve thrown in Dropbox.
Usually predictions suck… but I have to say, I’m pretty astonished by these.
Oh, and the last bit of the story (about terrible management) is the reason I left that little mail order company. While I technically got another opportunity for quite a bit more money… the real reason, the one I never stated? Yeah. It’s there.
Presented as written in 2004…
Future Of Technology
- Network aware user interfaces
When I’m on the network, I’m given surprisingly little information about my network connection and activity. I’m lucky enough to have a “throbber” and a small bit of status information in my web browser. My various OSes (I’m mostly using Mac OS X and Windows XP nowadays) do provide me with a small bit of info about my connection, but that’s about it.
My network connection goes down? I’ve got a small script (a shell script on Mac OS X, a batch file on XP) that pings the various parts of my network connection in an attempt to figure out what’s wrong (can I ping myself? can I reach the gateway? How about the DNS?). Why isn’t this built into the OS?
The real problem, however, is that building desktop applications that provide adequate information about the network is too hard. The main application libraries (MFC/.NET, Java’s core libraries) should have a user interface component that corresponds to the browser “throbber” that I can just drop onto a form. This component should be smart enough to display the application’s network activity (ideally with an easily user configurable interface, perhaps bringing up a modeless dialog that shows the various network connections opened by the application. If it were really fancy, I could click on a network connection and click “close” and force a network connection to close (sort of a force quit for a network connection).
Of course, the real problem is a freezing user interface when there’s a network problem. We’ve all seen otherwise professional software appear to lock up entirely while waiting for a DNS query to time out. Even otherwise network sensitive applications (such as late version browsers) exhibit this problem. Thing is, this may not actually be a network problem so much as a problem with single threaded applications.
- Single-threaded user interfaces
At this point, most of us are pretty familiar with the notion of “multi-tasking.” The idea is fairly simple - we should be able to run more than one application at the same time. It’s linked closely in most minds with protected memory (the notion that one application shouldn’t be able to crash another), but as shown in the “classic” Mac OS, you can have multi-tasking without protected memory (it just sucks).
It’s actually extremely easy to write a multi-tasking application (especially on a modern preemptive OS). Write a two line app in your favorite programming language that just loops, printing out “goodbye cruel world,” and it’s automatically preempted.
Now, let’s compare that with writing a multi-threaded application. It’s WAY too complicated. It’s very diffult to share data between threads without running into all sorts of synchronization problems. This, in turn, makes debugging multi-threaded apps excruitating. Most user interface toolkits run on a single thread, meaning a single point-of-failure (for example, waiting for a DNS query to time out) can render an application non-responsive - with the user thinking the application has crashed.
This is especially bad when you’re working with the Finder or Windows Explorer. Both applications were originally designed to deal with very responsive local storage (if you can’t access your hard drive, you can probably at least hear the head grinding the platter to powder). Both applications have been retrofitted to support various network technologies, and both tend to break apart at the seams when using the network. If you’re lucky you’ll get a very unhelpful spinning dash on Mac OS X or a somewhat bizarre “searching flashlight” on Windows.
At least both the Finder and Windows Explorer have the good sense to put up a progress dialog when you’re doing something that’s going to take time. It should be a lot easier to kick off time or network intensive tasks in the vendor supplied libraries.
- Portable point energy sources (aka battery limitations)
If you’re reading this article, odds are good you already know what I mean. My laptop gets a couple measly hours. My integrated cellphone/Palm isn’t much better (amusingly, the “standby time”, i.e. when you’re not actually using it is measured in days - but actual use, “talk time” is measured in minutes). Interestingly, my Game Bo… I mean, my “other” PDA, can mark up as much as ten hours of solid use time. It’s also got a worse screen than my cellphone/Palm.
There’s been some noise about fuel cells promising longer life, but as far as I know, you can’t actually buy one (or charge it once it’s depleted). It’s too bad, as a lot of other technologies (for example, truly effective solar cells and the conversion of our auto fleets to alternative fuel sources) are more or less hamstrung by a lack of portable energy reovoirs.
Honestly, this is probably the one thing on the list, if nailed, that would completely remake the face of the planet.
- Seamless security (user interface (and comfort about privacy) vs. secure systems)
I recently went through the agony of setting up a SSH server, and I really wouldn’t want to inflict that pain on anyone. For those of you not familiar, SSH is a security system designed to allow for secure, encrypted communications over an otherwise open network (i.e. the Internet). It’s actually got a lot of great features, including port tunneling (allow you to run an insecure protocol over a secure connection), but it’s ridiculously complicated to set up.
That complexity is a big problem. Trying to explain public and private keys, key passphrases, secure key agents, the difference between RSA and DSA encryption, and all of the rest is just plain insanity.
I’d mark this problem down to a lack of care on the part of both users and software manufacturers. Users want security and complain about things like spam, but the convienience of NOT having to worry about things seems to outweigh the intangible benefit of security for most users.
Make it easy, and bundle it in.
- Economics of abundance and digital copy
This is also partly a technology, partly part of the ongoing cultural debate, and partly a problem for a saavy business endeavor. In brief, it’s too hard to pay for things that are very, very cheap.
The main mechanism for online transactions is a credit card. Close behind is PayPal. Both, as noted elsewhere, are pretty impractical for things that cost less than about $5. If you really don’t care about things like “margins,” you can get away with transactions as little as $1, but even that is pretty terrible.
So, here’s the solution. Make a very, very, very simple to use system. Allow people to put in their credit card once and then bill them for relatively small quanties (maybe $5 or $10). Then, you can attach this to websites (perhaps as a plug-in) that lets you buy tokens for cheap things in a secure, anonymous fashion.
Yes, you’ll take a small hit yourself on the credit card fee, but you’ll probably make it up in the float. Don’t worry about the DRM and all the other nonsense - it’s not worth implementing and annoying your users for the relative chump-change we’re talking about here.
Will it work? The Apple iTunes store works on virtually the same model, and it’s got millions of users - but it’s only for music.
- 3D technology (virtual realities)
Current 3D technology sucks. Sure, we can get nice still shots from the Final Fantasy movie, and we can get cute, albiet plastic looking characters from Toy Story and Shrek, but building and working with 3D technology is still too hard and not good enough.
Fortunately, this is an area that’s getting tons of really intensive R&D. Interestingly, almost all of this work appears to be coming from the entertainment industry, either in terms of movies or in game development. Interested in a hypercompetitive market? Walk down to your local game store and examine the shelves. The rest of the PC software market is completely stagnant by comparison.
A lot of the 3D applications are brutally hobbled by network limitations, but I’d say that there’s a minimum of a decade or two of intense innovation and competition in the area of 3D technology before it settles down - an eternity in the world of high tech.
- Synchronization (vs. batteries and the network)
I’ve got my laptop, my web-based PIM, my cellphone/Palm. I can synch my contacts, to do list, calendar, and a bunch of tiny text notes. It works (at best) ok. Of all of these, iSync is best on my Mac OS X system. My phone doesn’t support BlueTooth, but I’ve tried it on my Mac OS X system with another cell phone, and it works great. Don’t even get me started about how terrible BlueTooth is on a Windows XP system (check out these links).
The problem is, I want to be able to sync a lot more than just some minor PIM data. I use CVS, I use various backup strategies, but it’s still a huge pain. Maybe when we have multi-teribyte hard drives in our cellphones with ubiquitios hundred gigabit wireless connections, I won’t care, but for now, keeping track of my MP3s and my documents and everything else is still too much of a pain.
As long as dealing with moving my data around is a pain, there will still be a market for a faster, better computer.
- Sensory input (immersive technologies)
About the only thing I can buy right now in the way of “immersive” technology is a big monitor, a good soundsystem, and a force-feedback joystick (with very, very few games that support it).
Stop and think about all of the stuff you need to go from this to a fully immersive “virtual reality” as described by a lot of movies. It’s hard to say when or how this will happen, but like so many things, it’ll get there eventually. For now, think “entertainment.”
- Computer generated meta-data and data linking
(inferences, Claris Organizer and the utter mindlessness of Outlook, and the biggest potential problem with WinFS/Longhorn)
- Personal robotics and real world interactivity (Lego’s just don’t cut it).
Meta-data (more or less) refers to information about information. Here’s a little secret - most of us hate entering metadata. We won’t do it unless someone is paying us to do it, or we’re truly passionate about it (for example, going through our MP3 collection and fixing the ID3 tags so we see the correct spelling of individual tracks).
I was working for a company once that had a small mail order business. The management basically thought the people working for them (taking and filling orders) were a bunch of morons. Taking a few minutes to talk to the order takers, they complained about a zillion little buttons the management put on the user interface for the order taking software that they were supposed to worry about. For example, management would decree that everything sold on given day had a 10% discount applied - and then they asked for a “Valentine’s Day” button to be added to the order taking software.
Obviously, the order takers (paid to TAKE ORDERS) ignored the “Valentine’s Day” button, as it really didn’t matter. They still had to enter the discount manually on another screen.
I suggested to the management that maybe, just maybe, they could run a report themselves, just keeping note that the Valentine’s Day sale was on that day, and drop the button. They just, as they say, “didn’t get it.” And continued to assume that their order taking staff was composed of morons.
Most of the extremely vocal proponents of meta-data remind me this company’s management. Consider most email clients. You have to manually sort and categorize your email into folders (typically labeled things like “business” and “personal”). Isn’t it safe to say that all of your email exchanged with your mother is “personal?” Isn’t your mother already sorted into a “personal” contacts folder? Why, then, do I have to then tell my computer again that my mother’s email is “personal.”
This is complicated stuff, to be sure. Our computers should be a lot smarter than they are. Most of us turn off the built-in instant indexing features on our computers because they’re too slow and bulky. Maybe it’s not even the right direction. But I can tell you now - our computers are really stupid about this stuff.
Notable omissions - voice, wireless, Touch screen (not just for so-called ‘tablets’), video conferencing, language translation, search, miniaturization, large data set manipulation, Rendevous and ZeroConf (IP auto-configuration)