We should build towers of software instead of just replacing the platform every few years. Many client software programs are the end of the line. It's not easy to build new software on top of those programs.
The problem with this is that this way client programs will become better, but it's not possible to build on top of them.
Each program should have an API that allows other programs to build on top of them. There is a lot of functionality that is build in to programs, that could just as easy useful to other programs.
For example, a download program could be called by your web browser. Downloading files is a low-level functionality. An external program could show a list of downloaded files. Also if you listen to podcasts you could have your RSS reader send the url of the podcasts to you download program. When your files are downloaded they could be synced to your music listener or just shown as list of new files. By using an external download program it can be the greatest download program and it doesn't have to care about complicating other programs.
The API for such a program should at least have two pluggable points. The first allows to send the url of the file you want to download. The second will be called when the program is done downloading (or has failed).
I shouldn't be talking about this example too much, because that is not the point.