Software Isn't Legos! It's IKEA Furniture.
As often happens in a startup, I found myself at IKEA yesterday. We needed a place to put our coffee pot and microwave, which is the extent of the kitchen equipment that we have right now. I picked up a Gehrfleugurfluggen chest that seemed to fit the bill and for $80 I was out the door. After I got back to the office and started putting it together, it struck me as a good analogy to software development -- far superior to the common "components are like Lego bricks" analogy that I read so frequently.
Let's start with the problems I see in the Lego analogy:
- With Legos, pieces fit together in a consistent fashion. Outside of using Super Glue, they'll always connect the same way, even if you're building different designs.
- Legos are HIGHLY standardized. Sure, you can add the space pieces and castle pieces and Star Wars pieces, but those are more like design elements than core components. When the media trots out the analogy, they're talking about the standard little blocks.
- Hand 2 people identical sets of Legos and identical instructions and you'll get identical results. Does that sound ANYTHING like software development to you?
Okay, here's why I think that IKEA furniture is a much more fitting analogy:
- They give you all the parts and instructions, but so many times you find yourself undoing what you just did in order to do it the right way. The pieces may be backwards, upside down, or just plain wrong, yet they still seemed right at the time.
- IKEA pieces are familiar in style and function, but they can be wildly inconsistent. While putting together the Gehrfleugurfluggen, I put the little cam wedgies in to hold the sides on and then they all fell out. It turns out that there were 2 sizes of cam wedgies, one for sides and one for drawers. They have you put the sides on first. There were 4 side wedgies and 12 door wedgies which made the chance of grabbing the door wedgies much higher. Not only that, but the side wedgies are bigger which meant that the door wedgies would "fit" in the side holes, further leading me down the false path. Sound like software to you?
- Hand 2 people the same IKEA pieces with the same Wordless Workshop style instructions and you'll get 2 different pieces. Assembler #1 will use all the nails to attach the back piece. Assembler #2 will use about half the bag. Assembler #1 will actually attach the little safety strap; Assembler #2 . . . not so much. Assembler #1 will finish in about half the time having put everything together correctly on the first attempt. Assembler #2 will have scratches, dents, and loose pieces from having put things on backwards and then "fixing" it.
Having played with Legos, assembled IKEA furniture, and written software throughout my life I can attest to the latter analogy being much closer to the current state of development. If you have a better analogy, feel free to post in the comments.
P.S. Assembler #1 uses emacs . . . Assembler #2 uses vi.









