For years we have been using computers in a way that mimics the office environment. Most of the concepts that we are manipulating were designed as virtual emulations of real-world artifacts: workspace, desktop, folder, file, button, menu, (e)mail message, inbox. The problem with any metaphor is that, at some point, it just doesn’t make any sense anymore. And if you want to stick with it, you’re forced either to stretch the metaphor to a point where people lose it (like I’m giving you a file, even though I’m keeping an exact copy for myself), or to invent even more metaphoric or exotic concepts to fill in the holes (like pokes and docks and so on).
More specifically we software developers have been fighting with the very metaphors we have invented some decades ago. All of our applications are made up of files that need to be compiled and linked together so that the computer can understand them and run them. Yet the computer world has changed a lot in a few decades, and it’s very interesting to wonder whether all those concepts are still valid, or whether they don’t hinder our very creativity and the magnitude of the problems we can solve. Indeed, we’re talking more and more about cloud and parallel computing, language-oriented programming, business process modeling, a lot of higher-level concepts that we are still forced to anchor into low-level files and computers. Language workbenches generate traditional code, cloud computing platforms need a lot of middleware to interface with our programs, and BPM uses a lot of black-box magic.
What bothers me the most at the moment is how these old school metaphors impact our way to collaborate. For me it all resides in the FILE concept. Files were not invented to collaborate. Files were created for storage. You put some information into a single unit of content and then you store it for later use. And if someone needs to reuse your work, then you must find the right file (using some ordering mechanism like folders), copy it and send it, which means that many things can go wrong in the process. The copy can go wrong, someone can intercept or interrupt the transfer of the file and more importantly, the file that your collaborator will be using is merely a copy. Which means that if you need to reuse his work, then he needs to send you a copy of his own work, and you’re back where you started. Now imagine that process happening several tens of times a day for hundreds of collaborating software developers, and you can quickly understand why there is such a huge market for coordination software. Keeping track of modifications, resolving conflicts, linking code with business requests and so on. All of that because of what? Because our primary collaboration artifacts are FILES!
Files don’t make sense in this world anymore. All our computers are almost permanently connected, forming one giant virtual workspace in which we can forget about physical borders of files. Instead of exchanging data in the form of files, we are now able to exchange actions and services on common artifacts. Doesn’t it ring a bell? It’s like we are all standing up in front of a big whiteboard with our keyboard and mouse as a marker.Â We can all write together on the whiteboard, we can erase, we can write, we can draw, we can compose, we can link, we can step back to see the big picture. And since the whiteboard is virtual we can even do amazing things like actually moving elements from place to place, we can keep track of the evolution of the whiteboard. When you’ve done a couple of Walt Disney creative sessions, or experimented with SCRUM boards, you can easily feel the incredible power the whiteboard has on collaboration.
What’s interesting is that Google has already started to implement this paradigm shift for communication with Google Wave. A wave is really just a whiteboard where everyone can collaborate. Sure you can use it in a very linear way in which everyone writes stuff on it, one at a time. But this is just a very small subset of what you can do with it. That’s why Google Wave is truly groundbreaking: it is redefining the rules of collaboration by getting rid of all the useless constraints and freeing up our creativity. Now what Google is doing for generic communication, I would love to apply it to software development.
Version control, unit tests, continuous integration, issue tracking, release management… all those are clever patches that heal the symptoms of a much deeper disease. What if we could work on the disease itself? What if a software application was made up of real functional modules, and each module could be implemented by a separate team on a whiteboard? What if we could do that online without having to be in the same physical place at the same time?
I’m dreaming here. I don’t have any concrete solution to offer yet. I have a lot of ideas but not a lot of time to implement them because… well… I’m still doing a living writing FILES! But… one day… a software development environment without files… Zzzzzzz…