Thursday, August 27, 2009

Software Development Bumper Sticker Practices

I loathe bumper stickers. I don't understand what a person is trying to accomplish by defacing his or her vehicle with these bumper stickers. In this blog post I examine how bumper stickers and the misuse of best practices have much in common. This post is not intended to offend owners of bumper stickers - I'm sure that there are people out there with bumper stickers who have them for reasons other than those described here.

I have long been a fan of best practices and rules of thumb that make sense. In fact, I have written three articles on best practices (JSP Best Practices, More JSP Best Practices, and Basic JPA Best Practices). However, as Bill Jackson and many others have pointed out, effective software developers must be willing to think for themselves and deviate from best practices when appropriate rather than blindly adhering to "best practices" at any cost and regardless of circumstances.

A "best practice" that is employed without regard for why it is advantageous and without recognition that things are usually too complicated to always be done "one way" is very likely to end up as a "bumper sticker practice." A "bumper sticker practice" suffers from many of the same problems associated with bumper stickers on vehicles.


Two Sides to Every Story / Trade-offs

Political bumper stickers with pithy statements pushing a position or degrading an opposite position can be particularly irritating and useless. The worst offenders are the bumper stickers that try to boil complex issues down to three to seven words that fit neatly on a bumper sticker.

These types of bumper stickers remind me of the software developer who rigidly applies a "best practice" without really trying to understand if the practice is appropriate or if the particular circumstances reduce the value of the "best practice." For a developer in this example, touting their favorite best practice at every turn might make them feel good about themselves, but that doesn't necessarily make the decision correct. Instead, software development is full of trade-offs in design and implementation and the most effective software developer is able to and willing to look at alternatives to their favorite pet practice.


Pride / Showing Off

It is difficult to think of why a person would place a bumper sticker on his or her vehicle about his or her child being an honor student at such-and-such school except out of a sense of pride. Likewise, it is common to see people place bumper stickers on their vehicles advertising the university they went to (or at least cheer for in athletic events).

It is easy for a developer to fall into the trap of throwing around "best practices" phrases, calling design patterns out by name, and doing similar things in an effort to impress others. Like the bumper stickers, others are often far less impressed with these tactics than the person might believe.


Obsolescence

I have seen bumper stickers for political candidates many years after the particular election to which the stickers applied. I have seen this in cases of both candidates who won the particular election and even candidates who lost that election. I do not really understand why a person would keep a bumper sticker advocating a candidate whose election is won or lost for years after election, but it does happen.

Likewise, a favorite "best practice" can be difficult to shed even if its value is overtaken by advancements and time. The best of the best practices are often relatively timeless and will stand the test of time, but some of the "lesser" best practices are more prone to be the recommended approach one day and fall out of favor compared to new and improved ideas that come along later. The most effective developer is able to continually evaluate "best practices" against current trends and circumstances and is willing to learn new ways to do things. New isn't always better than old, but it is a mistake to not be willing to take advantage of new developments.


Indicative of Aggressive / Forceful Nature

In Bumper Stickers Are Dangerous, Jonah Lehrer cites a study linking increased aggressiveness in driving behavior with owners of bumper stickers. This does not seem particularly surprising, at least in the case of political bumper stickers, because apparently the primary reason for having such stickers is to foist one's opinion on others.

Many of us in the software development community (and I intentionally include myself with "many of us") don't need much encouragement or incentive to have and share our strong opinions with others. I actually have found that strongly opinionated software developers are regularly good at what they do, though being aggressive and overbearing does not always translate to being a good software developer. Any software developer, good or bad, can easily become more aggressive as they defend and throw around their favorite pet practice. I have seen developer who almost seem to want to pick a fight about a favorite practice. I don't understand this mentality whether used with a best practice or applied to a bumper sticker.


Is There Substance Behind the Sticker / Practice?

When I see a bumper sticker expressing a "clever" five word opinion about a particularly complex social, economical, or political concept, I wonder if the owner really understands all the complexities of the issue (or at least understands that they exist because it is difficult for anyone to understand the entire issue) or if they truly believe everything is that simple. My impression is that the owner often lacks the sophistication, knowledge, and life experience to truly understand these complex issues or else he or she would be embarrassed to paste a naive and simplistic bumper sticker on his or her vehicle.

The same can be said for some developers who throw around the latest "best practice" and buzzwords. It is disappointing to find out that in some cases the developer really only has a simplistic view of the problem space. In such cases, he or she does not really understand why a "best practice" is recommended or why it works in most situations or recognize situations in which it is not a best practice.


Inside Information Reduces Effectiveness

I occassionally see a bumper sticker with a phrase or clause for which I don't understand the point being made. My guess is that in many of these cases that it not the effect the owner of the bumper sticker wanted.

The same effect can occur in software development with best practices. In my opinion, a "best practice" is one which most experienced developers would agree is generally the best approach for a particular situation. A practice cannot be a best practice, in my opinion, unless it has been proven and confirmed by a large percentage of experienced developers in a wide variety of circumstances.


Distractions

Bumper stickers can be distracting. Some have text so small that another person who might want to read it must tailgate the vehicle to see it. If there are enough small words crammed onto the sticker, another driver trying to read it might be dangerously distracted. I have found myself somewhat distracted in a slightly reluctant way when I have seen a vehicle completely covered with bumper stickers. Almost like a voyeur, I want to read all of those stickers to see what that person is advertising about himself or herself or to laugh at a particularly clever one. I have often felt that bumper stickers are as bad as any commercial advertising when it comes to being visual pollution.

We should not allow our rush to apply a best practice distract us from doing the difficult but necessary work of truly understanding a problem and considering the alternatives to satisfying that problem. We want best practices to help us improve our software rather than clouding our judgement and polluting our decision-making ability.


Letting Others Think For Us

One of the saddest things about bumper stickers is when the owner is so proud of himself or herself for the cleverness of their bumper stick when it is not even their original thinking. Anyone can read an article, column, or blog and regurgitate the cleverness they read or heard there. Adding real value requires effort, creative thinking, and adding person contributions.

Software development is no different. Effective use of best practices includes learning from one's own experiences so that one can better understand why a best practice is generally good and how it addresses particular problems. Also, best practices should be continually tweaked and should evolve based on community contributions and discussion. Best practices will become even better practices through the combined effort and experiences of the software development community.


How Do We Prevent 'Best Practices' from Becoming 'Bumper Sticker Practices'?

I think we as developers can take certain precautions to prevent "best practices" from becoming "bumper sticker practices." These precautions can be categorized as understanding best practices and applying them judiciously. We are more likely to turn a best practice into a bumper sticker practice when we don't understand a best practice or apply them indiscriminately. Here are some things I try to keep in mind when considering application of a particular best practice.

Understand 'Best Practices' Concept - To me a best practice is a practice that is widely recognized by experienced developers as a practice that generally is superior to alternative practices.

Understand the 'Why' of a Best Practice - A best practice is most effectively applied when the developer understands the necessity for the best practice (improved maintainability or some other desirable feature).

Understand the 'How' of a Best Practice - Understanding how the best practice addresses the particular problem is key to understanding when it truly is a good practice and when it is an irrelevant or bad practice.

Understand Best Circumstances and Worst Circumstances for Best Practice - Although a "best practice" should, in my opinion, be the preferable practice for a majority of situations, there are few, if any, practices that are always the most appropriate in all circumstances. Effective application of a particular best practice requires understanding which situations the best practice is less desirable than alternative practices or even downright detrimental.

Keep in Mind the Value of Others' Experiences and Opinions - One of the most galling aspects of some political bumper stickers is the implication that the owner of the sticker is smarter than people who don't agree with him or her. Not all political bumper stickers are designed to imply that, but many are. Even when I believe strongly in a particular best practice, I try to be open-minded enough to consider if an alternative approach works better in a given situation. There is no reason to be too stubborn about a particular practice if other practices are better.

Continual Learning and Hands-On Experience - Continual exposure to new ideas, concepts, patterns, and languages can be useful in reaffirming understanding of current best practices and in identifying new development best practices.

Know When to Say No - Although I believe that a best practice is one which has earned agreement among experienced developers about being a superior practice in general cases, software development is full of trade-offs and widely varying situations. Our favorite best practice can remain such if we don't misuse or abuse it and end up having a bad experience because of it. Sometimes we just have to let go.

Focus on What Counts - The value to appropriately used best practices is that they can allow large groups of developers with varying skill levels to write reasonable applications meeting many different architectural and design requirements. However, we cannot become so distracted by our best of intentions to apply a best practice that we miss the finer points of a particular problem.

Best Practices Can Be Contradictory - As evidence that software development is full of trade-offs, there are times when two best practices contradict each other. This tends to occur when one "best practice" is best in terms of a certain quality while the other "best practice" is best in terms of a different (and possibly opposite) quality. For example, a "best practice" for maintainable code can sometimes contradict a "best practice" for performance concerns. With software development being so full of trade-offs that even best practices can be contradictory, it is not surprising that we cannot blindly, naively, and uniformly apply the same practice to all circumstances.


Conclusion

I am a strong believer in effectively applied best practices. I believe the collection of best practices can provide significant benefits to the software development community when discussed, debated, applied, and reapplied. New concepts can be woven into past experience to constantly adapt and improve upon our collections of best practices. Best practices are most effectively applied when the developer understands the problem the practice addresses, understands why the practice is superior to alternatives for that particular problem, and understands that no one practice can be "best" all the time in all situations. When best practices are applied without understanding these things, they can quickly turn to "bumper sticker practices" with all the worst characteristics that can be associated with bumper stickers.




Addendum: My True Feelings about Bumper Stickers

I started this post with the relatively strongly worded statement, "I loathe bumper stickers." To be fair, I loathe political bumper stickers and have only a mild dislike of most other bumper stickers. I also must admit to laughing out loud at some particularly clever bumper stickers that did not seem to have any of the most negative characteristics described above (unnecessary flaunting of one's accomplishments/pride, aggressive forcing of opinions on others, trivializing significant and complex issues, etc.). These bumper stickers (like "My kid beat up your honor student" and "My other car is a piece of crap too") are funny. I'd never put them on my vehicle, but they are funny nonetheless.

Likewise, there are good "bumper stickers" in software development. I like the short bumper sticker-like quotations in Jon Louis Bentley's Bumper-Sticker Computer Science. I also like Joshua Bloch's Bumper-Sticker API Design, but note that he goes past my biggest problem with bumper stickers (naive, simple, and pithy statements) to actually describe each point. Both Bentley and Bloch can also get away with a little "bumper sticker" cleverness because there is no question that they speak from experience and knowledge in the computer science arena. They have contributed to the literature and discussions consistently and prominently. In other words, I know there is substance and depth behind their statements.

3 comments:

Colorado Reader said...

Hey Dustin, I recently put my first bumper sticker on my car. It says "(my other car is a cdr)" and definitely falls in the category of "Inside Information Reduces Effectiveness" as far as bumper stickers go.

Still, I chuckle every time I read it even if any time I talk about it, I have to explain it.

Alex

@DustinMarx said...

Alex,

If I was ever going to place a bumper sticker on my car, it would probably be one like that. I have seen some that are pretty funny and some that provide a perspective on a person's personality (often their degree of geekiness). I had a really old, beat up car a few years back that I almost placed a bumper sticker on that said, "This IS my other car."

@DustinMarx said...

James Morle's Right Practice is an interesting and insightful read related to my post here. Here is a sample section from this post: "Best Practices are a misnomer. At best, they should be referred to as Default Practices, because they are simply valid starting points for the implementation of a piece of technology."

Dustin