Un-Dynamics of Software Development, or, Don't Bite the Flip Bozo, Page 3
Everyone talks about constructive tension, but they still don't want you to disagree with them. Constructive tension is when you and I disagree in a civil manner—like how Congress is supposed to act—and this tension yields the best alternative. Unfortunately, because each programmer is the smartest person in the room arguments ensue, and constructive tension is out the window.
The loss of civility results in destructive tension, name calling, back stabbing, bozo-bit-flipping, and character assassination. As with people, all ideas are not equal. Over time, some ideas are demonstrated to be better than others. This is why I like Brooks' idea of a surgical team. In the operating room, the surgeon leads and everyone else follows. On a software project, this means the technical team lead or the architect has the final say. Consensus is for politicians and car builders, and often results in ungainly compromises and mediocrity. Consider abortion laws: No one is happy with compromise made. Another example is exhibited in some cars that don't make any sense, like that mini-van, truck, SUV sort of car that looks like an ungainly turtle; a committee designed that and every constituency got something in. I will bet that the original Mustang, Corvette, and Thunderbird were all designed by one guy.
The benevolent dictatorship will always yield a better product than a committee. Unfortunately, only one person at a time can be dictator, and in our modern world this seems very un-PC.
Here is a summary of the truisms:
- It is still the Wild, Wild West out here and anything goes.
- When someone says the schedule is going to be missed, they are never lying.
- Change is a constant, but people will seldom thank you for changing their code.
- A lot of bad software is being written by people who don't read.
- People believe too much of what they read.
- Authors are not smarter than the rest of us; they just read more.
- Managers should not make technical decisions, but do.
- If a manager says I am not technical, be prepared to spend a lot of time explaining things to them so they can make decisions they shouldn't be making.
- Managers hire experts and ignore them all the time.
- Messengers get shot more often than not.
- Leaders have to lead; sometimes you will look behind you and find that someone is actually following.
- You are the best programmer.
- Programmers hate to read another programmer's code; if they volunteer to review your code, it is not to do you a favor.
- There really are programmers ten times faster than everyone else.
- Every man is in some way my superior, as long as he doesn't keep reminding me.
- Programmers are emotionally attached to their code, but never say this out loud.
- Many programmers are intellectual bullies and egomaniacs.
- Everyone talks about constructive tension but doesn't want you disagreeing with them.
- Benevolent dictators build the best software.
- Decisions are, more often than not, emotional.
- The mean time between the time you start speaking and someone flipping the bozo bit on you is ten seconds.
Software Survival Rules
To survive the hostile environment in which we work, I have compiled a few simple rules here. (I only mention a few because I have to save some for the made-for-TV movie.) You can avoid having someone flip the bozo bit on you by following a few simple rules:
- Don't say anything.
- Begin your statements with yeah, no a lot so that it sounds like you are being agreeable even when you disagree.
- Deliver the no at the end of the sentence. This is a technique that Jerry Hirschberg says the Japanese practice to great effect.
- Act like you are thinking about someone's bad idea before telling him or her it is crap. The crappier the idea, the longer you should wait before responding; hopefully, they will discover the inferior quality of the idea before you have to say anything.
- If you need a friend, get a dog.
Do I follow any of this gutless advice? Absolutely not! I can safely say that I don't listen enough, say no right off the bat, call crap crap, express exactly just how bad I think an idea is, and own a dog but try to make friends as best I can. That's why I am encouraging you not to do any of those things. That's why I freelance. Open, frank honesty and having an opinion will result in your being asked to drink hemlock. Don't do it.
On Being Savvy
Software development is a political enterprise. Writing code is easy. Building consensus is hard because there are a lot of bad ideas that are loved by their authors.
A friend of mine kept reminding me to be savvy, but savvy sounds too much like trying to survive politically. In reality, what I prefer to do is work a lot of places, stealing the best ideas from each place, and hanging out long enough to do the fun part, leaving the routine tasks and committees for someone else. It is a bit selfish, but I recognized a long time ago that I just wasn't savvy enough to climb through the shark-infested political waters of a big corporation and consequently would never thrive. And, if I did get comfortable, I figured I'd get down-sized or right-sized just about the time I was too old, too tired, or too lazy to be marketable in this rapidly changing technological environment.
The Perfect Software Company
There is a perfect software company. It is where I work. The coffee is excellent. The chairs are comfortable, the computers are wicked fast, and we take a lot of video game breaks. The humidor is well-stocked with Cohibas, there is a killer library, and naps are encouraged. The furnishings are handsome, and the décor is pleasant. There are no cubes. The Managers sign checks and buy whatever software, computers, books, gadgets, and video games are desired. Schedules are not set until requirements are defined, software release dates are only announced after the features are done and rock solid. There are no suits. No ties. No cubes, and no timesheets. The work hours are very flexible but long, but I show up because I have more fun there than anywhere else.
Many times, decisions seem to be made by consensus and offenses. By this, I mean people agree to things they don't believe in to avoid conflict and take offense over the smallest details (for example, someone tells them their code is crap). To me, politicking is the hardest part of software development. Comparatively, the technology is easy.
Many best practices are documented by people who went before us. These best practices are ignored more often than not because there is no standards body. It is like I imagine the Wild, Wild, West used to be, anything goes. Ultimately, software engineers will have to be licensed, but I hope to be retired before that happens.
About the Author
Paul Kimmel has written several books on Visual Basic, including the recently released Visual Basic .NET Power Coding from Addison Wesley. Pick up your copy at www.amazon.com. Paul is also available for short- and long-term consulting, public speaking, and .NET training. You may contact him at email@example.com.
# # #