What makes great software? Better yet, why do some companies or institutions make great software for awhile then push out mediocre product? On some level, it might be because they simply run out of good ideas. As software companies become more successful they also become so focused on giving customers what they ask for that they no longer leave room for innovative and inspired ideas. I've seen that a lot. The accountants and the operations people get involved. All the creativity gets sucked out of the process and the result is boring, me-too, and incremental.
The bigger problem may be environmental. The best software organizations often started out as lose associations of people, more like collectives or communes then traditional companies. Microsoft in it's early days was a bunch of guys sharing an apartment trying to score a big deal. It was freewheeling, creative, and irrational. How could this bunch of kids think they could land a deal with IBM, then the biggest computer company in the world? It was nuts but no one told them that.
There is a reason so many tech companies get started in college dorms. You concentrate smart people with no preconceived notions of what is (or more important isn't) possible. No silly meetings, just creative action. Yahoo and Google both started this way. Google is desperately trying to hold onto that part of the culture even as it grows to enormous size and influence. The same is true of Facebook.
What these companies have in common is that they are formed within a commune-like environment with few rules. This is critical since innovation is inherently irrational. You have to be willing to suspend the negative beliefs and inputs common in business. There has to be an acceptance of small failures and forks in the road as part of the process of creating greatness. No one told these “kids” that what they were doing was stupid. The only thing stupid was the amounts of money they made. The open source community was like this in the beginning. A virtual commune if you will. All could participate and contribute whatever they could. Everyone could reap the rewards of the results too.
Collectives are common in the art world. Groups of artists get together in loose confederations to bring individual talents to bear on a project. Once the project is done, the artists move on to other projects and other associations.
Software is like art. It is unpredictable, creative, and inspired when done right. Like a group of artists, programmers need to keep a single and irrational (there's that word again) focus on producing something wonderful without being bothered by the corporate drones. A commune-like environment helps maintain that focus and keeps at bay those who would suck the air out of the room with negativity.
These environments can be recreated in the corporate world. Back in the 1990's I had the pleasure of working in a group like that. We were isolated from the day to day operations of the company, both physically and psychologically. What came out of that group was spectacular with a few failures that we learned from. It didn't last long but it was great while it did.
So, if you want innovation in software, if you want new, inspired, and just plain cool products, then create software communes for your programmers. Keep them away from the corporate vampires that would suck the life out of them. Recognize that software is art not science and approach development that way. It might seem weird to the rest of the company which is exactly the point.
I feel inspired. Maybe I'll organize a software collective to create something awesome.