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!

google_whiteboard_largeFiles 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…

Categories: Geek Culture

2 Comments

Sebastien Plisson · September 24, 2009 at 10:47 pm

Very interesting indeed.
Here are the ideas that it gives me:

Imagine some Google Wave robots that would allow to collaboratively compile the code you contribute inside a wave. The result of this compilation would then generate a new/update a module-robot/widget that would be deployed on the wave server and be available to others applications and services.

Would not that be great ?

Sébastien · October 2, 2009 at 4:01 pm

Totally! But now I’m reading about operational transformation and it seems really powerful. When you think about it, common version control systems, the hearts of our collaborative development efforts, work with diffs. They have one version of a text file, you give them another version, it does a diff and stores it in the DB. It’s a simple solution but a wrong one, that poses problems with merging. With OT, what you store is operations themselves, not their results, and transformations guarantee no conflicts. Brilliant. I think I’m gonna do that first: a version control system based on waves… but working directly with abstract structures instead of their text representation… Mmmh…

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.