Friday, January 1, 2010

Your specification documents need to be driven deep into the woods and "eliminated."

Spec docs are just an excuse to pretend that you are doing something important. Nobody really needs them, because all that really matters is that the code ships and people like it enough to use it. Developers who get stuff done don't write spec docs. Sure, they take part in the flame wars on the open standards mailing lists, and they might even write a spec after implementing it, but while all this is going on, the developers that really matter are shipping code at the same time.

The worst offenders are the committees of so called "open standards" people posturing in their academic micro environment. And who is impressed? The users? I don't think so. Doug Crockford came up with the JSON standard all by himself. He even joked in a presentation, calling himself "the one man standards body". I think that's the best standards body I've ever heard of.

Go to this link and read it. Its a walking tour of a mailing list where the early web browser developers are kicking around some ideas for what HTML would become. Go there and read it now, and then come back. You'll notice some ideas on there, some good, and some really bad. But you know what else? Marc Andreesen shipped the code for his browser without waiting for everyone else, and it changed the world forever.

You might complain that HTML doesn't really work very well and needs to be thrown away. But, is the big fat pile of steaming poop called HTML5 any better? HTML5 is the camel created by a committee that set out to create a horse.

Dave Winer recently had this to say in a blog post about the OAuth spec:

If you want to get smart about open standards, you have to watch how these things play out in another open thing -- the market. Because it's the market that just as often shapes a standard as it is a standard that shapes the market.

My sentiments exactly Dave.

I think the best strategy is to take the only the good stuff from open specs and then use whatever you can lay your hands on that will create a minimum viable product the fastest. Don't bother with writing a spec, the code is the best spec you could write. So, let's ship some code this year!

Friday, December 18, 2009

Software should be like bicycles.

  • The complex machinery of a bicycle is restricted to the absolute minimum needed to get the job done.
  • A bicycle is so efficient that physical fitness and wind drag become the most limiting factors of speed.
  • A bicycle is a modular machine made of parts that are interchangeable with the parts of other bicycles, even those made by different manufacturers.
  • The controls of a bicycle are universally used and understood by almost everyone.
  • Bicycles are everywhere! Almost anyone can find one that fits their budget and faithfully serves their purpose.

I think more people should use bicycles for daily transportation, I think drivers should be more respectful of people who ride bicycles on the road.

I also think that software developers need to learn a lesson from bicycle builders. We need more bicycles and fewer aircraft carriers. Yahoo! is getting a lot of grief for Starting! a! Cycling! Team!, but maybe they are on to something?

I've never been able to find bicycle software, (except for my favorite Linux distribution) so I decided to create my own. It is called Kixx and I'm working really hard on it at The Fireworks Project. Someday I hope everyone will use it to be more productive, have more fun, and be able to get more out of the stuff that really matters in life.

I fondly recall the years I spent riding my bike to work through the streets of Boston. Maybe that's a little strange, but too often we take simple things like that for granted.

(edit: I would like to add 37Signals as a bicycle software maker: http://37signals.com/)

Sunday, September 20, 2009

iPhone, Firefox, Chromium, and the Future of the Web

In the world of software there are really only two paths a chunk of computer code can follow. The first is to live life as an application. The second is to compete in the big leagues as a platform. Applications live on top of other software platforms, typically an operating system of some sort. Applications are things like Microsoft Word for PC and iCal for Mac. Platforms handle all the behind the scenes stuff that makes computers work, so that applications can just do things for the user without having to worry about it. Examples are Microsoft Windows and Ubuntu Linux. However, these days it seems our choices are not so binary any more. In recent years folks have been shouting "The internet is the new platform." They seem to think that everything we do on a computer can be done through an internet connection, without having to install any software on our computers. There are a few problems with this. 1. Microsoft is a big and powerful corporation that makes all its money by being the "gatekeeper" with the most popular platform; Windows. If the internet becomes the new platform, Microsoft looses. Giants in an industry don't go down without a fight. 2. Despite all the claims that high speed internet connections will become ubiquitous, it just isn't going to happen. Private network infrastructures are not going to run cables to towns with only a dozen users, and I don't think most people want the government to subsidize high speed internet to everywhere. 3. The mobile device tsunami is going to overtake wired internet access anyway. Mobile devices are smaller, cheaper, simpler, more available, easier to use, and always on whenever you want to have another look at the map. From a Nokia to an iPhone, these are going to be the majority of clients on the future internet. However, mobile bandwidth is more expensive, and so must be used much more scrupulously. That makes web based applications unsuitable for mobile devices. I think there is something far more interesting going on, and it is not getting any airplay. What if there was a hybrid situation, where half of an application lived on the internet, and the other half lived right in the palm of your hand, in your lap, or on your desktop? Think it's crazy? Just look at the iPhone a little closer. I have a good friend who is building an iPhone app. All the data the app needs, pertaining to it's owner, can be stored on the phone. However, as the user drives down the road, the phone detects it's GPS coordinates, and sends a request to a server somewhere on the internet to get the latest information about highway speed traps in that area, and then warns the user about them. In fact most iPhone apps work this way. The app lives in the palm of your hand, but the database, its backend, lives somewhere in the clouds. Why is the hybrid app so much better? 1. Only raw data is being sent over the cell towers and the wires. This is different than a web app, which must send a full page from a server whenever the user requests a different view or more information. How slow and annoying is Facebook, a web app, compared to any of the iPhone apps, which are mostly hybrid applications. 2. You can use a hybrid app whenever you want, even if you have a slow internet connection, spotty cell signal, or no connection. 3. Having your information on your own device is reassuring. 4. Developers and designers can create more useful, rich, and user friendly software without the technological restrictions imposed by a web app. However, though the iPhone is great, Mozilla and Google have hybrid platforms for netbooks, laptops, and desktop computers. Firefox, Mozilla's popular browser, has a mature and and comprehensive extension system. Extensions to Firefox, or addons as they are often called, make the browser more like a hybrid application platfom than simply a web browser. For Google's part, they are making quick progress on the Chromium project yielding the Chrome web browser, which, as we would expect from Google, has included an extension system similar to, though not as comprehensive as, Firefox. While Apple runs away from the field of hybrid platforms on mobile devices with the iPhone, Chrome and Firefox are quietly establishing themselves as the future of the hybrid platform on laptops, desktops, and netbooks. In fact, Firefox, the far more mature of the two, already has two experimental extensions that are attempting to show off the potential of the hybrid app with Ubiquity and Jetpack. At the Fireworks Project, we want to be a part of hybrid application renaissance. In fact, more than that, we want to help define it. While it is unwise to duplicate the efforts of Google and Mozilla to build the hybrid platform, we can still define how the platform will evolve by creating the code that actually does what they are designing these platforms to do. Enable the user to work freely and quickly, connected or not, and with complete freedom from having their data tied up in some web app in the cloud. I'm currently working frantically on extensions to both Firefox and Chrome that will make building, packaging, and distributing hybrid applications a quick, painless, and profitable process. My goals are:
  • Create a platform for code modules to be installed and imported on the client device.
  • Create a platform for user facing application extensions ("toolpacks") to be installed and executed by the user.
  • Design an environment that encourages the creation of many small tools that do one thing, and do it well. (the Unix philosophy)
  • Allow for portability between Chrome and Firefox.
  • Automatic dependency management for code modules and toolpacks.
  • Use common web technologies like HTML, CSS, and JavaScript.
The running theme is "modular". If we can stay disciplined with the modular approach, we have a very good shot at realizing the full potential of the hybrid online/offline platforms. I'm really excited about what I've done so far on this project, and I can't wait to see it in action. I'll be sure to be posting updates as they come along. Note: People in the know will wonder why I did not include these: Adobe Air Microsoft Silverlight Microsoft Azure Drop a note in the comments, and I'll be happy to explain.