Sunday, October 15, 2006

Software Factories

In my very humble, unfounded, inexperienced and immature opinion the creation of software as a discipline can be better described by being divided in the following manner: 25% science, 25% engineering and 50% art. Why this division? Well think about it...

The science of it all exists because of all the theory associated. I always hated most of it in college, so I will not be able to extensively describe it. Theoretical counterparts you will find associated with the practice: algorithms, language theory, state machines, and their buddies. It's part engineering because with any theoretical science that deserves any attention, an application of that science will be found not too far off. This is no exception. Quick examples: design patterns, predefined API's, standard procedures and practices commonly used.

Now comes the interesting part, which every half decent programmer will probably concur with, and what will take too much effort to convince users and/or managers. Despite that, this is actually a fundamental truth. Software is 50% art. The distribution may be further inclined in art's favor in some instances. Yes, we have the theory which has already been handed out to us. Yes, we have available many widely used implementations and reusable components which makes our jobs easier, prevents us from reinventing the triangle.... again, and gives us broad shoulders to stand on weather we feel like admitint it or not. What happens after this foundation has been laid out? If these were the only necessary components, software creation would have been totally automated by now (we will get there eventually, and yes it will suck, but that's another blog entry ;) ). You need a spark. You need light bulb going off on a dude's head. You need creativity in order to make this foundation work for the particular solution which is being implemented at the moment. I repeat this indefinitely but very few people pay attention to me (no one pays attention to the green theory). Creativity cannot be taught. We can help mature it, we can guide you in the right directions, we can give you enough tools that solutions to most problems will emerge easily. But teaching you to make the bulb turn on? That's like what Laurence Fishburn told Keanu Reeves in the first Matrix movie, “I can only show you the door, you have to walk through it". Let's leave this subject on the back burner for a second and jump to another topic.

As we all now, you are reading a blog after all, software use has been exploding in the recent years. Some pieces of software are even considered to be house hold appliances and/or brands. Yes, microsoft's products suck, but even my mom has heard the word Windows being said in the context of a computer. In order to achieve this widespread use, it has to have become a finely tuned, well oiled machine, that can keep up with the ever demanding consuming market that it holds a death lock on today. Here we find the best and worst thing that has happened to software in it's history. Because of this explosion software is now found everywhere. In many instances, casual users have no idea it's even there, but it's making there lives more convenient one bit at a time. Where does it go wrong?

Enter the software manufacturing corporation. As I mentioned in a previous post, I work for a big company. This company depends on software for most, if not all, of it's sources of income. In a corporate environment this process, just like any other, needs to be efficient as possible in order to get maximum output with minimum input. I have nothing against that, it's stupid to consider they will waste more resources than necessary in order to do business.

The problem arrives at the moment you start treating software as any other manufacturing line. I have no experience as an industrial engineer, so when I start BS'ing, someone, please let me know. Imagine if you will, we have a jeans production line. Person A stamps, person B folds, person C puts the pants in a box. You have every person doing one particular job, and doing it well, which is much better than having three people doing three things. Where's the problem? A, B and C are doing the same thing all day every day! You have no room to grow, you have no room to experiment or to shake things up a bit. If you try, it will probably lead to trouble.

Now, let's translate this analogy to software manufacturing. You have one guy adding new features and doing maintenance (most companies are scared out of their minds to try on new applications and only do so when absolutely necessary), one guy doing manual testing, one guy doing load/performance testing, and another doing deployment and support. Again, it's much more efficient then having four guys doing the four activities independently. The problem is that each one is in a loop where the repeat the same process over and over again. This is especially true for the guys working on manual testing and the steps which follow. Having people do the same process over and over again, while making them skilled also have a very negative effect. It makes their brains dull. There is no need for creativity, there is no need for out of the box thinking. Just follow the outlined steps (in some cases, this is literal), and report when you are done. Rinse and repeat. While the corporation is thrilled about this, the people actually doing the job in the long run is just becoming zombies. The products which they are working will reflect this state of mind.

Am I aiming to change the world? Oh, no. Do I wish I could work in an environment where everyone could they as they pleased when they pleased? Oh heavens, no! Just keep this in mind, in the middle way you will find the truth. A guy, much more wise than I can ever hope to be once said:

“The loose string, which is like a life of indulgence, produces a poor sound when struck. The overly tight string, which is like a life of extreme asceticism, similarly produces a poor sound when struck and is moreover, likely to break at any moment. Only the middle string which is neither too loose nor too tight, and is like the Middle Path, produces a pleasant and harmonious sound when stuck.”

You simply cannot expect exceptional work from people that are groomed to work like robots. I got my money on the odds that you will probably wont get it. Ever wonder why all of the Web 2.0 innovative ideas that lead to popular applilcations are coming from startups with few people and even less money? Aaaaahhh... unagi! What do they all have in common? they are small groups, without a predefined production ine of software manufacturing. They just had a good idea and went with it, on their own terms.

Software is a creative process. It has to be applied, measured and reported upon in order to be considered efficient and practical. None the less, this does NOT justify it not being considered something other than a creative process. How many painters, writers or composers do you know of that work a strict nine to five shift?


Anonymous said...

Hey,nice blog!!! I found a place where you can make an extra $800 or more a month. I do it part time and make a lot more than that. It is definitely worth a visit! You can do it in your spare time and make good cash. Make Extra Cash

Anonymous said...

Uhhh you are getting spam! congratulations that means you have hit the websphere hard :). Other than that you are absolutely right about programming being an art.

Saotome said...

Aside from Dvorak, we all get spam. I wouldn't jump the gun calling it an indicative of success. In any case, thanks for reading. Nice to know it's not just me.