Un-Dynamics of Software Development, or, Don't Bite the Flip Bozo, Page 2
A manager is not an architect, designer, or programmer and shouldn't do any of those things. Yet, how come managers are in technical meetings making decisions all the time? Frederick Brooks in his years-earned wisdom is exactly right; programming teams are like surgical teams. The architect is the surgeon, relative to the patient (the software) and what happens in surgery is up to the architect. Hospital administrators (unless practicing surgeons) are not permitted to meddle around in the operating room. A manager's job is to hire the right people, make sure the pencils are sharpened, the bills get paid, and pay attention when someone says the project is going to be late.
Beware of the manager that says I am not technical anymore. When a manager says that I am not technical anymore, and I stay out of the technical decisions, you should understand this to mean that the person probably used to consider themselves to be very technical. This person is going to ask a lot of questions, ask you to spend a lot of time explaining things, and then make technical decisions. (The project is going to be late. Flip.)
There are a lot of bad managers making technical decisions about things of which they know little. The few good managers have bad bosses. Enough said.
Project managers hire experts and then ignore them all the time. There are actually two phenomena here. The first is that employees are often ignored and consultants brought in and paid more. The second is that these so-called expert consultants are brought in for their advice and ignored, and the manager ends up deciding. In the case of the employee, why are employees hired by these managers who think so little of their ability, and why, when a second hiring takes place, are yet more highly compensated people hired and ignored? The answer is that managers often think they are managers because they are the smartest person, and they wanted to make the decision in the first place. The truth seems to be that managers are often least suited for making technical decisions and were promoted to manager because they were lousy programmers or they didn't offend anyone for the longest period of time. Flip.
Messengers get shot all the time. Purportedly, Bill Gates expects bad news to travel faster than good news. This is a good idea because bad news, like garbage, starts to smell very quickly. Unfortunately, especially in large corporations, messengers get shot so often that the best way to ensure a short career is to carry the baton of bad news too often. It is important to remember that it doesn't matter whose fault it is; messengers get shot. The reason we shoot messengers is because people are basically emotional and bad news is a drag. As emotional animals, we do all kinds of things that are bad for us because of the impact they have on our emotions: drink too much, take drugs, pierce our tongues, shoot messengers, gamble, blame wealthy people for our problems, love people who abuse us, and the list goes on.
A leader has to lead even if no one follows; an effective leader is actually capable of persuading someone to follow (even if the direction is wrong). Any time one mentions Adolf Hitler great personal risk is taken, but Adolf Hitler was an extremely effective leader but a tragic example of one that went in the wrong direction. According to his physician's journal, Der Fuhrer was also addicted to methamphetamine and described his oratorical tirades as a sexual experience. Emotion explains why mass murderers such as Hitler, Stalin, and Pot got away with it. These men appealed to some emotional aspect of their respective audiences (Hitler appealed to impoverished post-war Germans, Stalin by continuing to blame the Romanovs for Russian poverty, and poverty undoubtedly helped Pol Pot along his merry way.) I am suspicious of leaders who lead to someone else's detriment. If someone says hey we have to stop this madman because he is deleting files on the weekend, I say give that leader a listen. If Martin says hey we have to do something about Ralph because Ralph doesn't use the same number of white spaces as I do, I flip the bozo bit on Martin. Martin's priorities are not even in the ballpark.
Every one-on-one meeting after lunch on Friday is bad news for you. Projects are cancelled, people get fired, and everything else that a manager has been convinced that you are doing wrong will be related to you on a Friday. In fact, Friday meetings are so notoriously bad that I am only working half days on Friday from now on. That way, I won't be there to give or receive bad news and Friday can go back to being a joyous occasion.
Every programmer secretly knows that he or she is the best programmer. For this reason, every idea you or I have is most often inferior, occasionally as good, but almost never better than the idea of the programmer we are talking to. Hence, there is a lot of bozo bit flipping. To counter this tendency, I try to use a couple of simple factors when evaluating an idea. Has someone smarter or more successful than I am supported this idea? Is it simple or elegant? Does it make sense? What have the experts written about it lately? Finally, if the idea comes from a bozo, then.... Well, you understand.
Programmers hate to read anybody else's code because it is always crap. If someone volunteers to review your code, there is malice afoot. No one is going to review your code because they like you, like your code, or want to tell you what a good job you are doing. People volunteer to review code because you are their bozo, the bit has been flipped, and they want to tell you why they are the better programmer. Constructive code reviews seldom happen because programmers hate to read someone else's code, and everyone already knows that only bad news is likely to be delivered in a code review.
There really are programmers who are ten times faster than everybody else, but who are they? And, do they get paid ten times as much?
Emerson wrote, "Every man I meet is in some way my superior." Programmers don't read Emerson. The current adage is that all men and women are created equal. This is actually part of a very old proverb, but in our age of political correctness the rest of the proverb has been lopped off. The original proverb is that all men are created equal but by practice grow apart. This means that you and I were equal to Bill Gates and then life happened and now God goes to Gates for a loan. Emerson more than likely knew the original proverb and still believed that each man had at least one quality that was superior to that quality in him. And, yes, you and I are probably superior to even Bill Gates in some way. Unfortunately, if we flip the bozo bit, we are unlikely to ever discover those superior qualities and our lives are diminished.
Programmers are emotionally attached to their code, but don't want you reminding them of it. Pardon me, ladies, but programming is as close to childbirth as a man is likely ever to get (except for passing gallstones). We love our code like a woman loves her own children. This is why we find negligent mothers, and those that besmirch our code so loathsome; it seems unnatural and offensive. Can you imagine if mothers indicated that other people's children were brats as often as programmers think someone else's code is crap? I guarantee you that if each mother had to raise someone else's children as often as one programmer has to read and maintain the code of another, that there would be a whole lot less understanding between mothers. George Carlin wrote a book called Brain Droppings. Lines of code clearly and intimately show how we think. If one is a pedant, it will show up in your code. Blocked comments and in .NET the #region directive will be everywhere. If one is a slob, commented and useless code will be left lying about like dirty underwear and empty beer cans. Lines of code are our brain droppings. The metaphor is accurate. Don't read my crap and I won't read yours.
Many programmers are intellectual bullies and egomaniacs. It is commonly believed that we programmers are mostly geeks that were picked on in grade school and are now paying the rest of the world back for their transgressions. To some extent, I have witnessed and occasionally practiced this bullying behavior, although I am trying to grow out of it. Oddly enough, programmers seem to practice geek-on-geek violence by disparaging each other's code as crap.