Ze Ace's Tech Spot

Tuesday, October 31, 2006

A cube-farm of painters

Programming is a truly creative art. Sure there's rare times when you could hire a monkey to pound on a keyboard for the same effect, but software is written on computers by engineers who can make computers do simple tasks for them. This means that any repetitive, dull, and automatable task is usually relegated to the computer. All that's left is the creative tasks.

A lot of software departments don't seem to understand this. They think of programmers more like accountants or telemarketers where the work is fairly dull repetitive and supervision is necessary to make sure everyone is working all the time.

I'm not saying that a room full of unsupervised software engineers is likely to spontaneously produce great software, but a programmer won't thrive in a space designed to keep an eye on how much programming they do. They need some space so they can foster their creativity.

As a metaphor, lets consider how one should design an company if that companies product was going to be a huge piece of art. I'm talking so big that you'll necessarily need to hire multiple painters and will have to make sure that they coordinate their work. The nature of the piece is such that it all must flow together and can't be easily broken into different parts.

How would this work ideally if the artists were in charge? They'd meet at the site of the painting, and have a brief talk about what ideas they have for the piece. The painters with more experience would likely have more to say, but everyone would contribute. Then they'd all start painting sketches for parts of it. Later, they'd all step back and have a look at how it was coming together. Some parts would look good, others would look bad. The bad parts would be discussed, and new ideas would come forward. The best artists would spend their time on the parts that were proving to be the most difficult, while developing artists could hone their skills working on simpler parts of the design. Parts of the piece that were critical to the design would be discussed in great detail, and would be implemented by the most skilled artists, while less important parts would be left up to individual artists to implement. If certain parts required techniques that a certain artist was an expert in, they would be the most likely to work on that area. The project would move along until the artists agreed that they didn't need to add any more and it would be done.

Now let's consider how the typical corporation would approach the problem. First, the oldest artist would be promoted to "art manager" and the second and third oldest would be made into "art supervisors". Everyone would get a cube, except the manager who gets a small office in the corner. The three elder artists would meet in a conference room and decide what they thought the overall design would be. They'd then decide on a line to divide the project in two, and each supervisor would be assigned a part. They would also come up with a timeline for each stage of the project, and would pick a date to complete the project on. This date would be based on the opinions of the three elders, plus a buffer of time for unforseen problems.

The management team would then host a big meeting where they explained their vision to the rest of the team, and explained the schedule. Each artist would be assigned by his supervisor a piece of the project, and they would sketch up a design for it. The sketches would be brought to meetings where they could be compared to other sketches to see if they looked good together, and to make sure that they fit together well. The supervisors would collate the sketches and present their halves to the manager. In a good company, the three elders would spend a great deal of time discussing how the interface between the two halves would be completed.

Finally, when the schedule indicated the time, the team would make their way to the project site. Each artist would try to implement their idea onto the project. If another artist was in their way, they'd have to wait. If their sketch didn't exactly fit onto the project, they'll fake some way of making it fit, but since they don't know much about the overall project they can't anticipate how that will affect others. The borders between each artist piece would be implemented by the artists involved, and any disagreement about the border would be decided by management.

Parts of the project which were proving to be difficult would end up with lots of management overview, although the implementation would usually still be done by the artist responsible for the part. Rarely, the supervisor would switch an area between two artists if necessary to meet the schedule, but a supervisor would never let his best artist work on the other half of the project, even on a difficult part that could use his expertise. The manager would spend as much time as possible looking at the overall state of the project, but since the most important and difficult parts are typically the last to get implemented, the overall view remains unclear until the end. The manager will also be involved in all discussions about how the two halves of the painting should be combined. But the manager will never actually paint on the project regardless of his skill or expertise as his time is too important for such things.

As the end of the schedule nears, the most difficult parts will be the only parts left undone. Since there's nothing else to work on, all the artists will be working on these areas, no matter how small they may be. There will be some polishing of the rest of the work, especially areas that don't blend together well, or where pieces don't fit quite right, but since the most skilled artists are working on the unfinished parts, only developing artists are available to do the polishing, and they don't want to wreck the project by trying any changes that are too drastic. Eventually the project end day comes. It may have slipped a few times during the project, but eventually it will come, and the project will be done.

There will hopefully be a few reports written about why the project was over budget, and why the integration took longer than anticipated. A few of the artists will quit or retire, and the most senior of the rest will be promoted to fill the holes in management. Then new artists will be hired to fill both teams up to identical sizes. Artists who were promoted to supervisor will take classes about how to design pieces since they've never been a part of the design team before. The other artists will take classes on basic art techniques to make sure that everyone has a minimal set of skills. Of course all tasks can only assume that minimal set of skills since no artist is ever taught anything above that. Eventually the team is ready to take on the next task, and the management team starts the next round of meetings...


Now which painting do you think is better? Which one has taught their team the most skills? Which one took longer? Would any company actually act this way?

There's no part of the analogy that can't be used to describe software engineers working on a big program. In fact the majority of companies to exactly the things described. There's also some truth that as the team gets larger, the collective design approach gets less and less credible. But a small solid team can be far more productive than a large bureaucratic organization.

So is there any hope that companies will realize the follies of their ways? Maybe a few, but I'm not holding my breath.

0 Comments:

Post a Comment

<< Home