When it comes to working in IT it isn’t very hard to find an issue where people disagree. In fact, I think we have turned disagreement into an art. I believe that it is probably unrealistic to think a team of IT professionals will ever come to a point of agreement. If that’s true, what do we do?
Frankly, I think we all love to disagree. I base that theory on a few things like the volume of blogs, editorials and articles written where the title is X vs. Y. Simply replace X and Y with one of many different methods of solving an IT problem. You can easily fill in the variables because we are surrounded with a boat load of examples.
Linux vs. Windows vs. Novell vs. Macintosh vs. Intel vs. vs. vs.
One of my favorite database controversies is the selection of the primary key for a table. On the one hand you have those who insist you should always use a system assigned surrogate key, preferably an auto-incremented number. The other hand consists of those preferring a natural key, if one is available, even it it consists of more than one column in a table. People hold one or the other position passionately, substantiating their stance on war stories of experience, and experts who hold their same point of view. What I find funny is that I can find experts holding to either point of view, each with their own valid reasoning, and substantiating war stories.
My point today is not to introduce controversy, or arguments for the selection of your primary keys. My focus is on the process of working together effectively when we don’t agree. Why should we bother? Should we just surround ourselves with others that agree with us? Should we select someone, or a group of people, and have then establish the standards for us all? Do we live in chaos where every person does what is right in their own mind? I’m not sure I have the perfect answer. But I do have some thoughts on the question.
First, I think it is important to keep your position from becoming personal. If you find yourself calling some other person or position stupid or lazy, you may as well leave the conversation.
Second, have you never changed your mind on something controversial? If we need the freedom to change our mind, how can we insist that others conform to our current way of thinking, if they hold another position? Do they then have to change their mind when you do?
Third, I think we need to focus the discussion on things that provide a framework to assess different opposing options. For example, why is it so important what method we use to determine our primary key? What are the goals we are trying to attain? What is it we are trying to accomplish? I think that if we have a direction we are going, and we can characterize what it is we are trying to achieve, then we will have a framework within which to assess different strategies to get there.
Most likely there will not be any one position that is the only right choice. That’s why you need boundaries defining what your System is supposed to do. You’ll have boundaries such as load, acceptable down time, hours of operation, timeliness for feature enhancements, cost of ownership, security, accessibility, supported platforms, automated capabilities, replication, distribution, and much more. With those kinds of clear boundaries it’s much easier to compare what database storage technology is required, what kind of primary key you will use, if you need to have interfaces, if you need to have enterprise architectures, if you will be self hosting or consider the cloud, etc.
In short, it isn’t wrong to have opinions or strong feelings. But, it may be wrong to hold those as absolute in all situations. Or worse yet, you may be wrong yourself.
Cheers,
Ben