Joel On Software linked to this long post bashing Agile, using Google as example. This Stevey Yegge guy used to work at Amazon and likes to write LONG blogs.

I don’t agree with all his points, but I understand his disdain for those “methodologists” who make money from books and seminars and consulting gigs on “process improvement”. Alas, I wasted a couple years of my own life in that.

Also I don’t think it’s appropriate to use Google as a universal example. Google is different in too many aspects from most software shops, most importantly its business model and its development methodology (or the lack therefore) derived from it. Most software projects don’t have the luxury of NOT defining a release date. Whether most software shops should try to imitate the Google Way is another topic, but I doubt that’s the case because that would make the Google Way just another (anti)methodology that doesn’t work universally.

But I do love so dearly about many points he made. And it’s cliche but Google does look like a programmer/engineer’s dream job: work hard AND smart, work with great people, work on interesting AND hard things, be rewarded in all noble/abstract and mundane/practical ways, and of course most of all, your work matters to the world and makes it a better place.

Some striking things about the Google Way (stuff in italic is from 8/28 issue of Information Week):

  • Managers = tech leads, they code at least half time
  • Developer can switch team/project at any time for any/no reason (every 3 months)
  • Developer SHOULD spend 20% work time NOT on her main project
  • Meetings are rare, and only occur during midday, so that developers don’t get interrupted when they’re in the zone (usually very early and late).
  • Performance review is all public
  • Custom made for efficiency: server hardware, web server, MapReduce, BigTable, Sawzall (intepreted language), GFS, etc.

Some quotes:

Google can be considered a fusion of the startup and grad-school mentalities: on the one hand, it’s a hurry-up, let’s get something out now, do the simplest thing that could work and we’ll grow it later startup-style approach. On the other, it’s relatively relaxed and low-key; we have hard problems to solve that nobody else has ever solved, but it’s a marathon not a sprint, and focusing requires deep concentration, not frenzied meetings.

Google is an exceptionally disciplined company, from a software-engineering perspective. They take things like unit testing, design documents and code reviews more seriously than any other company I’ve even heard about. They work hard to keep their house in order at all times, and there are strict rules and guidelines in place that prevent engineers and teams from doing things their own way. The result: the whole code base looks the same, so switching teams and sharing code are both far easier than they are at other places.

We do have project managers and product managers and people managers and tech leads and so on. But the amount of energy they need to add to the system is far less than what’s typically needed in our industry. It’s more of an occasional nudge than a full-fledged continuous push. Once in a while, a team needs a bigger nudge, and senior management needs to come in and do the nudging, just like anywhere else. But there’s no pushing.

UPDATE: Stevey has a follow-up. It’s also super long but super hilarious, an animal farm with The Carnival of the Animals soundtrack: cat, dog, chicken, pony…

One thing he’s not clear about, though, is the testability of any methodology. Well nothing is truly testable, according to Heisenburg. It is particularly true for anything that deals with human and has time lapse, like software development, or society at large. It’s simply and categorically impossible to have a double-blind test of two methodologies because you cannot guarantee an identical environment for both.

Anyway, I think two points should be well taken in any case, for software development, or life in general:

  • Be suspicious. Have some doubt. Don’t take anything too religious, especially yourself and what you think is right.
  • Be humorous. Have some fun. Don’t take anything too seriously, especially yourself and what you think is right.