Wednesday, January 07, 2009

Leaf Blowers

Have you ever seen those guys who cut grass that use a leaf blower?

As I was taking my usual walk the other day, one of them was blowing leaves and grass clippings across the sidewalk into someone's flowerbed - out of sight, out of mind.

That kind of behavior really gets to me. And it's not just landscapers that exhibit this lack of judgment.

I am seeing this kind of behavior with software engineering and application development professionals - especially as the complexity of coding increases.

Here's what I mean.

Software code can be generally thought of as either internal or external with respect to other aspects of a system, specifically if your company is a software vendor. The external code is the code that the source is available and the internal code is the code that the source is private.

What I've noticed is that internal code, if you decompile it, oftentimes looks like the flowerbed where the leaves and grass clippings were blown. It seems that some software engineering professionals allow their code to get cluttered with bad or ill-designed code that has been swept under the mat of abstraction and encapsulation (to use object oriented terms), and left there - out of sight, out of mind.

I urge software professionals and vendors to clean house. Your code needs some spring cleaning. Dust out the cobwebs and sweep under the mats. And then, put in place some best practices (continuous integration with unit tests would be a good start) that will help keep the leaves out of your flowerbed.

Just promise me one thing... Don't be a leaf blower.

2 comments:

Farida said...

Hey Bill,
Look what came in the mail today. I guess you put the topic out and others started mentioning it too.

Check out this free chapter http://go.techtarget.com/r/5513382/5547875

from the book 'Clean Code: A Handbook of Agile Software Craftsmanship'

Shuba Kope said...

That is a really neat analogy Bill. To not be a Leaf Blower.

And, I agree completely. I often wonder why there is so much emphasis given to technology and communication and rarely to the art of software engineering? Developers take pride in knowing a lot of technologies but rarely practice good housekeeping and design patterns when developing code.