Constraints & Inertia (from guys behind ZFS)

Preamble Scoble, Scoble, Scoble. Again an interesting interview. You wouldn't think that talking to 2 geeks would be that interesting (ok, to be fair one of them is a statistician [yeah, a statistician writing a file system… next…] - but if he decks his kids out in shirts with letters for their names [and, I think, their birthplace] he's a geek. Pic here: - oh yeah, and he has "ZFS ROX" as a vanity plate...).

But it is.

Ok, so 2 guys have developed a new File System. A file system is an abstraction ( see previous post on abstraction) so you can say "open this file" and it goes and moves bits and bytes on the hard drive. These guys said "we want to make a new abstraction, the current one is lame and we can make it better" (basically).

So they threw out the file system. And they start talking about what you do when we can completely re-envision something (because they threw out the file system and started over and wondered "what should it look like - since we can make it however we want").

Constraints In the interview I caught this nugget:

"A key to software architecture: Out of all the constraints that exist out there, how many of those are actual, real constraints and how many of those are just imagined or historical or inertia / bad habits." @20:30 - 21:30

I agree with this. I've had the opportunity to do this (and a programmer dreams about this all the time [every time you build something of substantial size, by the time you get to the end of it, you want to throw it out and start over because you realized that there were better ways of doing it]).

BUT, I believe that constraints are good. SO… why throw them out? Obviously you want to chuck bad constraints when you can. But, if you can get better ideas by adding constraints (my hypothesis), then let's chuck bad constraints, keep true constraints… and then add other constraints?

To some extent, this is what they did: the big "it'll be better" was that he was annoyed that you can add memory to your computer - any size and any amount that is compatible - and it just works. Hard drives, you have to format and you have "c:" and "d:" and partitions… (He also added a constraint of essentially doing redundancy/data security similar to RAID.)

So? Let's say that you have a new project - a chance to start something new. You want to add constraints (usually called requirements [or features if you are writing a program]). And you do that before you start the project. Then you start figuring out solutions.

My wondering: should I stop and see if there are other constraints to add - before I brainstorm. I'm not sure, but I'm thinking maybe. I'm also thinking that there a process to capture potential constraints, and then select which constraints are most useful (working off the "more is not worse").

Also fun: these guys talked to people @ Stanford linear accelerator Atlas detector and their system generates 1 Petabyte per second of raw data. (A mere TB/s of filtered). Kilobyte, Megabyte, Giga, Tera, Peta. Yeah, 1 million gigabytes per second. Wow. Before I die, I'm sure that'll be like nothing. Hopefully this blog entry is still here to record my foolish surprise.

Even more fun: They talk about an abstraction of typing on your keyboard (they picked "L", I picked a "K" in my post on abstraction) - wow


Friday, September 07, 2007, 12:00 AM

tagged: ideaprocess, constraints, abstractions