computers/software design


link

When I was an Israeli paratrooper a general stopped by to give us a little speech about strategy. In infantry battles, he told us, there is only one strategy: Fire and Motion. You move towards the enemy while firing your weapon. The firing forces him to keep his head down so he can't fire at you. (That's what the soldiers mean when they shout "cover me." It means, "fire at our enemy so he has to duck and can't fire at me while I run across this street, here." It works.) The motion allows you to conquer territory and get closer to your enemy, where your shots are much more likely to hit their target. If you're not moving, the enemy gets to decide what happens, which is not a good thing. If you're not firing, the enemy will fire at you, pinning you down.

How does this relate to software? If you're supposed to be making a product but keep on being distracted by the barrage of buzzwords, you're pinned down. Keep moving, even a little bit, every day.

Also good by Joel: an article on measurement dysfunction in the workplace.

link

Here are the slides from a talk about the growth of LiveJournal from single machine hobby to 60-machine supersite. Very technical, very Perl, very interesting.

What I like about software: it's the one creative realm where we aggressively work to understand what makes a multi-person creative process work.

link

Andrew considers Fred Brooks's notion of conceptual integrity in software: the importance of a consistent underlying vision. Brooks argues that this integrity can only be achieved in software when no more than two people take control of the design (and keep that design alive during development).

I agree wholeheartedly. Whenever people design together, but without a very deep shared understanding, their subtly different motivations and visions are inevitably amplified into huge, gaping dissonances during implementation. It's not too hard to get a thorough shared understanding of a solved problem: you can simply take a few people who went to similar kinds of schools and read the same textbook, and they will probably be able to build you a suspension bridge that works.

But if you are building radically novel kinds of software, the vision of what that software shall be has probably originated in one individual's head. Furthermore, even if that person is an excellent communicator, her vision is probably implictly premised on all sorts of subconscious assumptions that even she can't describe. But as you move from idea to implementation, many of those assumptions will be questioned. The right answers to those questions depend not just on intellect and facts but on intuition. Thus even if a large part of the grand vision has been communicated, a software project will suffer when parts of the implementation can't be checked against the original intuition.

This makes the case for having one person lead the design of a software product. Can you also get away with using two people? I think you can, because when two people know each other very well and respect their own and the other's strengths and weaknesses, they become very aware of the limits of their own intuitions. They can accurately guess how the other will feel about using adjacency lists vs. boundary sets to implement tree structures, or they know to ask. Over time, the shared understanding that develops between these kinds of collaborators is a unique, wonderful, and powerful thing.

Three people, however, make a group. First, it is twice as challenging for each participant to develop his personality such that it best meshes with the others. Second, the question of whether to involve the rest of the group in a given decision at least doubles in complexity. Instead of asking 'What would Bob say?' We now need to ask also 'What would Alice say?'. In between, we have to recall all sorts of information about Alice, like what her last experience with an issue like this was and whether she is in a mood today where she will passively agree to any suggestion rather than risk a confrontation. This information probably takes the place of similar information about Bob in our short-term memory.

These added scaling costs are what I think makes 3+ -person design collaboration so difficult. There are ways that we can attend to a singular collaborator that simply become too difficult with 3 or more people. Developing a meaningful shared understanding goes from being something that two mature people can excel at to something only a rare lucky few can pull off.


Personally, I have always felt more comfortable interacting with one other person than interacting with a group. Part of my ineptitude (often manifested as shyness) with groups probably comes from growing up as the only child of a single mom. It takes me a while to get comfortable with a particular group of folks, but I can very quickly get a good reading on person. Consequently I am better in chats, dates, and interviews than parties. Consider yourself warned. :)

link

Sage advice about how learning from your mistakes makes you more clueful.

link

For the next few days, I will be working on a paper submission for this conference based on my thesis research. So please don't distract me by offering fun things to do. (:

link

Interesting ideas in this editor. By way of John Sequeira, who has some pretty scattered ways of keeping himself organized. :)

link

link

Neato version/configuration management system. Has all the basic features, and also can enforce process contraints such as requiring that changes are accompanied by tests, and the tests pass.

link

Real video of a presentation featuring some Squeak stuff. About teaching or something?

« Previous PageNext Page »