Have you ever looked at the curve of a sculpture and felt the softness of the stone in your mind? Have you ever looked at the sweeping roofline of a building and been drawn inside? Have you ever seen the flowing lines of a chair and been compelled to sit in it? To me those things all have a bit of art because they evoke a feeling beyond their function. Anyone who has used a personal computer knows that software can invoke a feeling. Frequently there is an urge to throw something out a window. But software can also evoke good feelings. The sense of satisfaction when you clear a row of blocks in Tetris, the feeling when the computer responds to your click instantaneously, software that does it’s job but does not get in your way, and a user interface that is attractive but not distracting. These all have a bit of art in them.
We could put more art in software than we see today. Software developers have an opportunity to focus a bit less on how many features their products have and a bit more on good design, quality, and having a clear vision for the goals of a product. There are several measures where today’s computer software should be a lot better than it is.
There is unnecessary complexity everywhere in today’s software. Why does my Start->Programs menu have 90 items in it? Why do I get a “critical update” from Microsoft every couple of weeks? Why are programs I download from the web so large? Why does RealPlayer include a jukebox, phone program, and downloader in addition to the video player I want? Why do I have to go through three screens of information just to sign up for a web site? Why do I have to look up the settings I lost when I need to configure my e-mail account? Why did it take me several hours to configure the accounts and Internet Software on my new Windows 2000 laptop even though all the software was preinstalled?
Why did the Sony web site stop working when I upgraded Internet Explorer from version 5.0 to 5.5? In fact, that is the only new “feature” that I noticed in the new version. It was not a wildly successful upgrade for me. Why do I need to reboot my Windows 98 machine several times a day? Why doesn’t the TV Tuner card in my PC work any more? I suspect something is wrong with a driver somewhere but I have been unable to fix it.
The computer I am typing this on can do hundreds of millions of operations each second. So why do I have to wait every time I turn it on? First I wait for the computer to display the login screen. Then I wait for the login. Then I wait for the desktop to load. Then I start Internet Explorer and Outlook Express and wait for them to load. I read my e-mail, check my stock quotes and then wait for Windows to shut down so I can turn off the power. Can you see how I might get an extra few minutes of free time in my life every day?
Imagine that you are reading a book but your cannot use your hands. Each time you want to turn a page, you have to call the librarian over to turn it for you. Sometimes the librarian is close by and turns the page quickly, sometimes he is busy and you have to wait for the page. That’s how I feel when I read on the Web. You might say that is because modems are slow but my modem can receive 7000 characters per second and I can only read about 60 characters per second. The modem should be able to stay ahead of me. In fact, I know my modem is not busy while I am reading a page. It could be loading the next page automatically so I can turn to it instantly but the web is not designed that way. If I could turn web pages without any delay, that would be a little bit of art. It would not be difficult to design a system that works that way. There are two issues here. One issue is control. Because I cannot predict when the page will load, I do not feel in control. The other issue is that I have a rhythm when I read and if that rhythm is interrupted by having to wait for the computer it is very distracting.
What’s the Problem?
There are several forces that have created these problems in the software industry.
The basic process of software development is to write some base code and then layer more complex code on top of that. As you add new features to software, you typically keep all of the old code and add new code for the new functions. This is much like the process of evolution. You typically only remove old code when the cost of keeping that code is higher than the cost of replacing it. But the cost of keeping old code is very small in terms of direct costs. The added complexity created by keeping the old code grows slowly over time so it is easy to ignore. Also, it is frequently difficult to remove old code because the person who wrote it and understands how it works may not be working on the project any more. With an operating system, keeping the old code is the best way to maintain compatibility with old applications. This process of layering new code on top of old code and continually increasing the complexity of software is typical of any development project. Occasionally, you can throw away the old code and start over with new code but this is very expensive and often does not work well because you lose the knowledge and expertise that accumulated over time in the old code. Thus, as software ages, it grows more complex.
Increasing Power of Computers
Inspiration and creativity is frequently triggered by the limits that are imposed on us. If you tell me that I have an unlimited budget to create a great work of art, I will not know where to start. If you tell me to spend $20 on art supplies and draw a watercolor of the tree in your front yard, I have a much more interesting problem to solve. With the incredible growth in the power of computers, the limits in terms of memory and processing power have been very generous with software developers. In any design process, there is a tendency to design the largest and most complex things that will fit within the assigned limits. Since modern computers allow for very complex software, the tendency is to build complex software.
There are two economic forces that encourage complexity over quality in software today. One is that software companies make much of their money from upgrades where they sell a new version of a piece of software to an existing customer every year or two. This is a wonderful way to get revenue because instead of selling me Windows once, they get to sell it to me 3 times which obviously means they get more money. The other force is competition. One of the main ways you convince a customer to buy your software instead of your competitor’s software is to make sure your software does more for the same price. It’s true of any business that offering a customer more for his money is a great way to compete. With most products, there are physical limits on giving the customer more value for their money. A bigger car takes more steel and makes the car more expensive to build. With software, making the software bigger and more complex increases development costs but it does not increase manufacturing costs. The end result is that in the software business, you always add as many features to a product as you can within your development budget and since ensuring quality is the last step in software development, it is frequently gets shortchanged if a product goes over budget. It also means that when developing an upgrade to a product, the majority of the budget is typically spent on adding new features instead of improving existing features since it is the new features that encourage people to upgrade.
What can we do?
The first step is to understand and value good design. We also need to make the Internet a place where we encourage innovation and experimentation. The business realities of the software industry encourage a winner take all attitude because typically all the profit in a given software category goes to the most popular piece of software. We should resist this tendency when possible and create a world where different technologies can coexist without creating too much cost for users.
As consumers, we should learn to buy the software that is the fastest and most reliable instead of the software with the most features. Unfortunately in many ways, Microsoft sets the agenda for the entire software industry and their agenda is to keep building more complex software because it ensures their revenue stream from upgrades and it keeps their competitors out of the market. That’s a huge incentive for Microsoft to keep building more complex software. The consumers and the rest of the industry largely follow this lead.
The expense resulting from the complexity of Windows is the major cost to the world from the Microsoft monopoly in operating systems. Microsoft has done some wonderful things for the computer industry but every time that I spend hours trying to fix a software problem with Windows, I wish that I could charge Microsoft for the cost of that time. The $90 I paid to purchase my operating system pales in comparison to the cost of maintaining the software on a Windows PC over time.
Microsoft is the biggest target to blame for poor design and too much complexity in software but the entire industry can take the blame. Java is a great example of a product that fell victim to too much complexity. A huge portion of the software industry rallied around Java as a solution to many of the limitations of Windows. In the end Java on the client simply did not work reliably. One reason for this failure was that Sun chose to compete with Microsoft on Microsoft’s terms. They talked about the “API land grab” where they started lots of projects to ensure that Java had more functionality than Windows. Because they got defocused by making Java do everything, they failed to make it work reliably for simple tasks. They created thousands of API’s when the market really needed a few hundred API’s that would enable developers to do things they could not do on Windows. They failed to realize that a potential competitive advantage of Java was in being simpler and more reliable than Windows. Netscape fell into this same trap by trying to turn Navigator into an operating system. No one can compete with the army of Microsoft programmers when it comes to developing big and complex software so Netscape chose a battle that they were doomed to lose. If Netscape had developed a simple and reliable platform that third parties could build on to create Internet applications, we all might be using Navigator today instead of Internet Explorer.
There are some positive trends that will help develop the marketplace for new and innovative software.
- Instant software distribution – The ability of the Internet to deliver software to lots of machines very quickly at very low cost has the potential to greatly encourage the development of new and innovative software. We have seen this with the web browser, instant messaging, MP3 players and utilities such as WinZip. The barriers to software distribution are still higher than they should be. I should be able to install a piece of software in less than a minute with a single click, and try it. If I like it, I should be able to pay for it and use it. If I don’t like it, it should be gone with a couple of mouse clicks.
- Software as a service instead of a product – The idea that the Internet allows software to be a service you subscribe to instead of a box you purchase means that it should become much easier to try new software and keep it up to date and running well.
- Instant communication, information sharing – The ability of the Internet to instantly transmit information between any two computers in the world has not been fully exploited. There is lots of software that can be written to take advantage of this ability.
- Software as a mass market product – As software moves from being a product purchased by professionals and hobbyists to a tool that is used in people everyday lives, this evolution will encourage the development of new kinds of software.
- Transparent software – Professionals and hobbyists, can enjoy and gain value from learning and developing skills with complex software. As software addresses a broader market of users, the software needs to become invisible to the user and simply perform its task in a reliable way.
There are several negative trends in the software industry that limit the possibilities for software as art.
- Complexity and unreliability of PC software – As PCs get more powerful, PC software has become more complex. One of the magic moments in developing software is when you have a complex solution to a problem and suddenly realize that you could solve the same problem much more simply. Developing new software can be much like exploring. You might wander a bit before you find your destination. After you find your destination, you know that there is a more direct route. You end up with a shorter path if you cut a new more direct route. It is more work at first to create the shorted path but in the long run, it saves lots of walking.
- Closed device architectures – There is no standard way to develop software that runs on a variety of devices today. In fact, many devices such as WebTV do not allow third parties to develop software that runs on the device. This means that these devices cannot evolve as people invent new kinds of software. If these devices become too common it could mean that the world is stuck with HTML 3.2 and current e-mail for the next 20 years.
- Standards as religion – A standard is a group of people getting together and agreeing to do something in a consistent way. The benefit of this is the coordination and cooperation it enables between large groups of people. The disadvantage is that if a better way is found it can be difficult to take advantage of the innovation. The Internet industry needs to be careful to understand the strengths and weaknesses of standards. Frequently with a new technology, there is not enough experience to develop a good standard and a better solution can be found if the industry has the opportunity to learn from the mistakes of several different approaches before developing a standard.
The democracy of software
Much of the magic of computers and the Internet is that it is a very accessible medium. You don’t need lots of money or people to develop a significant piece of software or web site. Because the cost of creating and delivering information can be small, software is a medium that is accessible to people with limited resources. We should ensure that this remains possible. It is possible to create a software environment that has the ease of use and reliability of an Internet appliance but maintains the accessibility of the personal computer for creating software and content.
Is Software Art?
The concept of “software as art” is not saying that software is art. The idea is to use art as a metaphor that helps us learn how to create great software. Although it is built using very precise and rigid machine instructions the creation of software is very much a human endeavor and an expression of human thoughts and creativity. As something that is carefully crafted, we should be able to enjoy, admire and appreciate software as we use it. There are many different photographs and paintings of famous spots such as the Eiffel Tower or Half Dome in Yosemite. Each of them has something different to offer in terms of lighting, perspective, or style. There are also many ways to solve a given problem in software. We should encourage exploration and different forms of expression in software.