Work Life and "3 chords" -- They Tattoo You

We all work, but sometimes the collaboration of teamwork leads to something bigger, something life-changing for everyone involved in it.

When I was at Microsoft I was part of one such life event. Every year, Microsoft holds a big conference the attendees all call "Field Day" -- it is basically a get-together of all of Microsoft's field operations: Support, Education and Consulting. Anyway, Microsoft was about 50,000 people back in the day, and getting even just the field organizations together was enough to fill a stadium.

So, in 1997 or so the event was held in Charlotte, and a stadium we did fill -- the old Charlotte Civic Center. Steve Ballmer came in and fired up the troops, and following Ballmer's "Field! Field! Field!" presentation everything got quiet, as we waited for whatever was coming next.

What we got next was this:

Imagine just 3 chords, at modest volume - you could clearly hear them, but it wasn't loud enough to shake anybody up. All the same, the effect was electric -- but not because of the artist, or the volume.

The effect was electric because The Rolling Stones' "Start Me Up" was used by Microsoft with the launch of Windows 95 - and everybody in the crowd who'd been part of that launch had a frisson of recollection -- you could literally see the ripple of memory move through a crowd of maybe 5,000 people.

We were all part of it. It was part of all of their lives, and would never be forgotten.
And the best part of the launch was that it created a life experience and memories so vivid ... so vivid that you could see it.

The presentation that followed "Start Me Up" was pretty cool too, but the moment was already made....


In The Beginning: Goodies For Starting Software Projects

It is difficult to find the beginning. Or, better, it is difficult to begin at the beginning. And try not to go further back.

Ludwig Wittgenstein, On Certainty

Guilty admission: I really like the movie Apocalypse Now. The film is pure Coppola -- an out-of-control wreck of a movie; sorta like how The Godfather might have turned out if he'd filmed it as an unscripted documentary with real Mafiosi. There are two particularly cool things about it:

  1. Its origin as a modern adaptation of Joseph Conrad's awesome Heart of Darkness
  2. Coppola's wife Eleanor's incredible documentary Hearts of Darkness, on the creation and filming of Apocalypse Now

Hearts of Darkness is a documentary all software people should watch, because it gives a behind-the-scenes look at the creation of Apocalypse Now, starting way before the cameras rolled. In the beginning Francis Ford Coppola barely had an idea for a movie; but he was soon able to flesh it out enough to sell it to United Artists. How did he flesh out the idea? As Hearts of Darkness fascinatingly shows, he used storyboards.

Storyboarding is the act of describing a story (or software application) as a sequence of scenes (or screens), where the use-case is detailed as the screens progress. It's a terrific approach for visually describing the story/application, but there's one problem:

Good storyboards are really hard to draw

The most common approach I've seen to storyboarding (other than giving it up as "too hard") is through Adobe Illustrator. Illustrator is a great product, but it takes some real graphic design skill to use, and it's hard to use on a team in parallel. So what to do?

Enter "Mockups":, from Balsamiq Studios. Mockups is a pretty neat web/cloud/desktop/Mac/Linux/Windows design tool specifically designed for mocking up software user interfaces.

Mockups provides visual design for the talentless, and makes the layout of rich screens easy through a rich toolbox.

or or

Mockups are fast, easy, and exportable as .png files or as XML. The software also integrates in the cloud, and strikes me (as yet unproven) as a slick way for teams to work out visual interfaces.

There might be other ways to create and review storyboards (PowerPoint or Keynote come to mind), but Mockups seems wonderfully task-specific, and if you do a lot of UI design it's probably worth a look.

Next up we'll take a look at "The Middle", and a neat TMN solution for solving one of the hardest problems in software design. But first, a bit more Wittgenstein:

Doesn't testing come to an end?


Cloud Computing (a brief blast from the past)

"Cloud computing" is a hot topic and a pretty neat idea that's showing up in a lot of 2009 predictions (including mine :). Cloud stuff is cool because it's possible to evaluate new things at remarkably low cost: at my last company we spent all of $2.40 to evaluate a pretty big (figure 1-2M pageviews/month) application on Amazon, and using Amazon as our core development platform for 5 months cost us all of about $350.

Anyway, back in April I got to introduce the product with Amazon's Lead Evangelist for cloud computing, Mike Culver, and in updating things on LinkedIn the presentation got new life and seems to have become mildly popular under the banner "cloud computing."

I've "cloud-attached" (though Slideshare) that presentation below. It's pretty light and has some definitively "April 2008" humor to it.

Cloud Time
View SlideShare presentation or Upload your own. (tags: thin nginx)

For now the little tidbit below will have to suffice...


Breathless Predictions for 2009

Since a new year beckons, and this is a blog, it follows that predictions for the new year must follow. Hey, rules are rules. And so, with no further adieu, here are my predictions for 2009:

1. Browser time of transition Part 1 - IE6 finally heads to the boneyard

A whole - cottage - industry has arisen to beat up on Internet Explorer 6, and IE6 support for standards is questionable (see Google Browser Security Handbook for all the brutal facts), but with a 10-year history behind it IE6 is one of the most successful software rollouts of all time.

Still, there comes a time when enough is enough. The tipping point isn't reached when whiny sites like 37Signals take their ball and go home, nor even when real competitors like Apple Computer cry "havoc", but it might be reached when a mellow giant like Google does.

The real deal here is that IE has had a majority of browser usage for the past 10 years, and it has come to define standard web behavior (iehacks and all). A clydesdale like that won't be replaced by some better kind of horse -- for any kind of transition you need a motorcar. "Web 1.0" and "Web 2.0" didn't require a motorcar, but "Web 3.0" will. Read on for a bit or what "Web 3.0" motorcar-ness looks like...

2. Browser time of transition Part 2 - Firefox++ invents a new web experience for the masses

Firefox has always been a nice browser, awesome for development and great for home use, but not much doing on the PC at work. The world hasn't needed another browser, or even a better browser. To get the world's attention you need nothing less than a whole different kind of application.

ForecastFox was a nice start -- a cool weather app add-in that made FFox a weather machine. Firebug was even better -- turns your FFox into a developers' console. Flock goes all the way -- "A one-stop app for staying connected with your online world." All good, but still only the stuff a 15% share is made of.

Enter Ubiquity -- the software that should bring mashups to the masses. With Ubiquity you can say: Hey Firefox -- Select this page, translate it to Spanish, encrypt it with my mom’s public key, email it to her, and save this chain of commands as a new command so I can use it later. Let’s call the new command garblify.

Plug-in functionality has long been one of Firefox's most compelling features. In 2009, this capability starts turning Firefox into a whole new application.

3. Browser time of transition Part 3 - Google Chrome heralds a new web experience for the enterprise

Google made some noise in 2008 with the release of a new browser, Coogle Chrome. The most remarkable thing about Chrome isn't that it was released with a comic book for documentation (though that was cool -- very graphic novel) -- what's remarkable about Chrome is that it solves the fundmental have-enough-tabs-and-you're-begging-for-a-crash problem.

With Chrome, each tab is a separate process, so that if (when) any tab process crashes, it only brings down that tab -- not the whole browser. This is a big deal as browser use becomes more mission-critical, and more tabbed. Think of the old '80s movie War Games, but with WWIII launch sequences simulated on a buggy browser and you'll understand why I'm grateful and why I expect big things from Chrome-like advances in 2009.

"Shall We Play A Game?"

4. Increasing Cloudiness

Much has been written about the rise of cloud computing, including here: The Economist, here: Cloud Computing: The Rise of Cloud Platforms and Why the OS Doesn’t Matter, here: SMBs Will Rise To Cloud Computing and my favorite here: Cloud Time, but the real breakthrough in hosted "cloud" computing (Amazon AWS, Google AppEngine and others) doesn't really come from running virtual servers in virtual data centers.

The real, 2009-immediate value of cloud computing is that it provides the first good estimates for the cost of running real computers in real data centers. Hosting costs have long been the "great unknown" in SMB-enterprise computing budgeting, and the cloud providers give the first decent formulas for guesstimating what "starting the next eBay" will cost.

What should your next "" cost per year? We'll start with one wild swag -- a small site takes 3 servers to run reliably, a medium site takes 6, and a large site 12 servers. Typical cloud costs (Amazon, in this case) run $0.10/hour for a small server, $0.40/hour for a medium server, and $0.80/hour for a large one.

Swagging again and adding some bandwidth, a small site then costs about $240/month to run, a medium site is about $500/month, and even a large site only looks like about $2000/month to run -- hosted. Keep in mind that these are only hardware costs, and software must (or mustn't, in the case of an open-source stack) be applied.

Anyway, the cloud vendors are doing a great service by setting a "standard price" for computing, and this will really help planning in 2009.

5. Web 1.0 revisited - the rise of JavaScript and HTML5

I can remember, back in days of old, competing in (and winning :-) better living through technology...) an Advertising contest at Stanford by writing and filming a commercial, and showing it on a pre-release version of Quicktime, courtesy of relationships at Apple.

Those were the days, but the problem (then as now) is that my video really didn't live anywhere -- you could show it on a screen, but it really didn't integrate with any applications very well. And so it has been in all the time since, and neat graphic technologies like Flash, Silverlight and embedded video are resident in web pages, but don't really LIVE in them.

YouTube gets part of their $1.65 billion acquisition fee for driving an integration technology (embedding) at just the time network video reached its tipping point, but the picture is still grim. Finally, all that is changing, from the coincidence of three remarkable technical evolutions:

1. Cheap, ubiquitous graphic hardware. My MacBook Pro has 2 cores of Pentium, and 16 cores of NVIDIA on the backup CPU. New next generation of the Mac OS will be able to work with all those cores. Om nom nom.

2. Wicked fast JavaScript engines emerging.

"We just did some benchmark runs today," Bak says a couple of weeks before the launch. Indeed, V8 processes JavaScript 10 times faster than Firefox or Safari. And how does it compare in those same benchmarks to the market-share leader, Microsoft's IE 7? Fifty-six times faster. "

3. The rise of HTML 5. Sure it's been coming in pieces, but adding bot-transparent video and audio presentation in HTML has to put a cold chill into Adobe(Flash), Microsoft(Silverlight), and Apple(Quicktime).

Google keeps smiling all the way to the bank.

6. REST - Godzilla of APIs

Prediction: APIs rule, and REST will increasingly rule APIs in 2009.

Back in 2005, Google Maps ignited the mash-up concept in Web 1.0, and changed the face of web apps we see today.

Google is wise and omnipresent, but they aren't omniscient. Back in 2002, when the current round of API design decisions were made, Google had the choice of creating an API in well-known media-darling SOAP, or the little known academic paper-protocol REST. They chose SOAP.

SOAP (originally Simple Object Access Protocol(protocol) was a neat idea—to replace the bulk and complexity of integration schemes such as CORBA with a simple combination of XML and HTTP. Great idea, but to provide fully-functional enterprise integration SOAP had to expand, eventually absorbing much of the complexity of the protocols it meant to replace.

Enter REST. Representational State Transfer is the brainchild and 2000 PhD dissertation of Roy Fielding. Fielding observed that one of the great advantages of the HTTP specification (of which he was also a contributor) was that the client-server, stateless, cacheable, and layered design made access and architecture for the specification straightforward. REST extends these concepts to application-application communication. Very broadly, REST maps the basic CRUD operations (create, retrieve, update and delete) to familiar HTTP operations (POST, GET, PUT, and DELETE). As an additional conceptual benefit, these operations also map analogously to the database operations INSERT, SELECT, UPDATE, and DELETE.

Boiled down, the idea is to have applications interact through conceptually simple HTTP calls for exchange of resources—remote resources, as opposed to remote procedure calls. API creation is then a breeze, because the access methods are already broadly familiar, and the receiving applications need only be ready to respond to requests based on the request information in the HTTP header - say for HTML (web pages), JavaScript (Ajax requests) or XML (application requests).

Basically then you collect up all the publishable "nouns" that you have, and most development platforms (.Net, Ruby, Django) can "RESTIFY" the collection and do all the rest -- provide authentication, standard URLs to access the collection, and XML and JSON support to respond to http requests made by a machine rather than a (html-loving) person. BINGO! All the access you could ask for!

For more on REST, see RESTful Web Services (the classic), and for a Microsoft implementation of REST see
RESTful .Net.


It's hard to ever conclude much with technologies, but some trends do seem to be shaping up:

  1. Google is goosing the browser development efforts of (Firefox, Safair, Opera) to keep web-platform-development rolling.
  2. The "open" (Google) vs. "closed" (Facebook, Microsoft) battles will be with us for some time to come
  3. Little browser apps that live in a tab and are fed by the cloud emerge - giving Google Docs (which will never be MS Office) a whole new meaning
  4. "Desktop" applications take on a whole new meaning, with whole new 'verbs'
  5. The "operating system" keeps moving to the web, and the desktop continues its transition to a large, relatively immobile handset
  6. General-purpose computing moves to the cloud - Start a doc of any kind on any device, save to the cloud, access later from any other device attached to the cloud
  7. JavaScript becomes fast enough to power virtual machines - now powerful enough for both client- and server-side programming
  8. Looks like multicore and more must lie ahead (combination of 50% avg broadband cost drop/year + Moore's Law)

Happy New Year!


Tech Bits for the weekend of 01_04_09

Lots of good bits this week. Since we’ve just entered a new year, there are lots of “2008 Year in Review” articles about, and a similar number of “2009 Predictions” articles too.
Here’s a bit of the best of the rest…

** Has Facebook really overtaken MySpace that completely?
** Is MySpace really flat at 120K uniques?
** Is Windows Live Space really down about 20% in the past year?

  • Web Technology: Impact on Social Media and Community. Social media is really starting to look like a genuine “Web 3.0”, where the generations of Web break down like this:
    • Web 1.0 — I can push a page to you, if you can find me
    • Web 2.0 — You can find me (thanks Google and Yahoo), and I can create applications for you and your friends
    • Web 3.0 — I have content and a community that are interesting, and you can create the applications you like by yourself, mostly without programming.

The clearest immediate needs for Web 3.0 are:
      • You need to be able to clearly establish identity — who are you?
      • You want to establish location — where are you?
      • What is your community? 

These things really aren’t complete by any means, and Web 3.0 has now progressed far enough that the communities themselves are creating the applications. That leads to my favorite bit this week:
  • The Ubiquity Firefox Plug-in : It Doesn’t Have to be This Way. Ubiquity was released back in August, but with Firefox 3.1 now in its second beta (and FF3 pretty firmly established) there’s ample reason to check this neat plug-in out. By all means watch the Ubiquity video, which gives the use-case of setting a meeting, where you can find the meeting place, map it, and create and send the email with the map embedded, all from within Firefox.

This is really cool, because Ubiquity is easy to use and contains a large number of rich commands that lets users and communities create their own mashups. Now THAT is “Web 3.0”.

Next up: predictions for 2009… (really ... next time)
Happy New Year