The Creative Process

I’m moving the blog up a bit to

I dig the blog-as-a-service and exposure from being a wordpress site, but have a romantic attachment to my own domain name, want control over my code and css, and don’t want to pay to play on WordPress. So that’s the story. As of now the latest post is, and you can always find the latest at


Joel Spolsky, in case you hadn’t noticed, just writes intelligent insightful stuff. He seems to have been on a blogging break for the past few weeks, and I’ve actually missed him. Now he’s back, and his latest piece has my brain thumping. In it, he speaks about the 5 Whys, originally developed by Sakichi Toyoda, the founder of Toyota.

(digression: When I was young, my father drove a Toyota. It must have been 20 years old. The antenna was missing, and the frame was beginning to rust away, but the car just kept going. When I went to buy a car, I looked at the Ford Focus. In Israel the Focus is actually a very sweet car; we get the European models, totally different than the US models. The Focus drove tight, had lots of power, and was kitted out with all sorts of cool stuff inside. Then I tried the Toyota Corolla. It wasn’t as sexy, it didn’t have all the gear – it was boring, and it was the same price. Then I realized – they must have put the money in to something. If it wasn’t the MP3 radio and kitted out interior, it was probably the things you can’t see – like the engine. I bought the Toyota.)

The idea behind ‘5 whys’ is to keep asking ‘why’ until you get to the root cause of a problem. There’s nothing holy about 5, fell free to add another few whys if it suits you. I decided to tackle a problem with the 5 whys, and at the risk of being overly self-referential, here’s what I came up with:

Problem: I’m not blogging on a regular basis

  • Why? I find myself not possessed with ideas worth communicating.
  • Why? I get involved in routine things, and not things that stretch my brain.
  • Why? I somehow feel like doing really interesting things would be wasting time.
  • Why? I get caught in a hamster mindset, where I have to do things that are immediately demonstrably valuable, but not really long term contributions.
  • Why? I don’t maintain consciousness of the unique contribution my soul can make to the world.

The question I’m holding now is what to do with the realization. Better yet – knowing a low-level cause, and that cause being a matter of ingrained outlook, how do I bring myself into the more healthy mindset that I’d like to? How do I plant, deep down, the realization that the real valuable contributions I have to make to the world are coming from within?

With cheap software talent all over the globe, it’s tempting to spread a development project around the world and around the clock. You can skype over to those guys for free, it’ll be like you’re in the same room, and hey, your developers are sleeping a full third of the day; you’ve got to be able to improve on that!

The pitfalls of adding people to a team are well known – you add communication and learning overhead that will often end up delaying, rather than hurrying, the completion of a project. But let’s say you manage that issue – the teams are brought on line together at the beginning of the project, or the new guys have experience in the field, or you budget in a healthy load of learning time – you still run into the tragic poetry of Conway’s Law.

Simply stated, Conway’s law says that any team that produces a product is constrained to produce a product that is a mirror image of its communications structure. It sounds like black magic at first, but it really makes all the sense in the world. Creating a single thing – anything – takes a lot of communication and shared understanding. Put a team in two different buildings and you’ll already start to see trouble. It will be easier to make assumptions and keep coding then to walk outside in the cold. Introduce time zone differences, language barriers, and shoddy IP telephony, and you’re lucky if the two teams manage to communicate at all. Throw in one more team on another continent, and you’re doomed.

When my little company was swallowed by IBM, we were brought under a team in Massachusetts that was also trying to swallow a team in Boca, coordinate with a team in Texas (that had a person working remotely in California), manage the offshore folk in Malaysia, and be manged by the suits in Silicon Valley. Together, we were tasked with putting together a system that really had to function as one unit. A full half of the time was spent in throwing pieces back and forth over the walls between the groups groups and trying to figure out who was responsible for what. Only when we disengaged a bit, and plowed forward on a piece that could really stand alone, did we make any progress. In the end, we created as many different pieces of the puzzle as we had teams, and they worked together just as well as our teams did.

There are situations where having multiple teams can be helpful. Have the offshore team do the translation work, write plug-ins against a well documented API, or do the data-entry. As long as the assignments and the architecture are in line with the implicit team dynamics, you’ve got a good shot.

Let’s assume for a second that what I’ve said is right. The big question comes from the development methods of the major open-source projects. They have people spread out to the four winds, and they manage to come out with some really great stuff. Granted, a lot of these projects have a very small team at the lead with the rest of the folk filing in as testers and patchers, but some of the biggest and most successful are entirely distributed. How does that work? I’m thinking that there may be another dynamic at play.

If a team has a home in a physical location, bringing on a remote team will be a serious chore. But if the only home for the project is on the Internet, then no one is remote. If everyone knows that the core communications happen online, then the project has just one home – online. Remote communications are no substitute for face-to-face communications, but if they are all that you’ve got, you make the best of them. If I don’t have any team without the ‘remote’ team, then the whole distributed team can really function as one.

Is it possible to carry the mindset of the entirely distributed team into a situation where there are people physically concentrated together? I haven’t seen it happen. My intuition tells me that it’s a tall order, but I’m happy to be proven wrong.