Archive for the ‘Uncategorized’ Category

A Wiki is no place for a conversation

Wednesday, August 27th, 2008

In my experience, when it is suggested that a conversation be moved from a mailing list to a Wiki, nine times out of ten the conversation ends immediately without making it to the Wiki. When a conversation is transferred to a Wiki, nine times out of ten the conversation dies within a day.

Please don’t disrespect your co-workers and end a good discussion by asking that it be moved to a Wiki.

A Wiki is no place for a conversation. Just take a look at the conversations on the C2 wiki and see what an utter mess they are. Nobody can follow the conversations, yet we all know they contain valuable information. The most important technical criteria for encouraging participation in online conversations are distribution, presentation, chronology. In my opinion, conversations should be distributed in a push fashion, presented as discrete responses (ideally as a threaded conversation), and should appear chronologically so that people can see the history of the conversation. If these things don’t hold true, people don’t contribute to the conversation. These criteria are much more difficult to achieve in a Wiki than through a mailing list.

In addition to the criteria that promote participation, making your conversations searchable and archivable is usually a good idea. If you are asking for a conversation to be moved to a Wiki because you feel like its important and you want it to be captured, then you might consider using forum software (or an online newsgroup) instead of plain e-mail distribution.

In case you didn’t know, I’m running for president

Monday, August 4th, 2008

JavaRanch Promotion

Thursday, July 3rd, 2008

Peter Johnson and I are doing a promotion for JBoss in Action on JavaRanch. We are officially answering questions related to JBoss and the book from July 1, 2008 - July 4, 2008, but I’ll probably hang out there for a while after in case more questions come in. Feel free to stop by the JavaRanch JBoss Forum if you have any questions.

You know you’re not agile when…

Friday, September 28th, 2007

… you have a job description like this:


DESCRIPTION:
Career Growth! Terrific opportunity in a growing software company for a Java Developer. Must have experience with the design, documentation and implementation of Java 142. Must be strong with implementation of Java. Must also have experience with Spring or Struts. Any experience with Eclipse, Hibernate or Oracle is a great plus. Job duties will include taking a 220 page document of specs and implementing them accurately and efficiently. Will travel to various local client sites. Interviews are taking place right away.

Man am I glad that I’m not working for them! A friend sent me this today and we both had a good laugh.

Removing features

Sunday, April 15th, 2007

I’ve heard that about 45% of features and functions in software go unused. As a developer, I have control over removing unused functions and I do so quite diligently through refactoring and the courage that I have to modify my code through the practice of test-driven development.

But I believe that unused features can have a significantly worse effect on the quality of a software system than unused functions. The more code you have in your system, the more complicated your architecture becomes and the harder it is to maintain. But the dilemma that many developers have is that they are being asked to add features by product owners who might not have a good feel for the repercussions of doing so. In other words, as a developer I can control how many unused functions I have in my code, but I cannot control how many unused features I have.

I have often wondered if product owners should be as diligent with requesting feature removals as they are with feature additions. In order to do this, they would need to have some insight as to which features are being used and which are not. I feel that this is where a separation in responsibilities between the development team and the product owner is necessary. Developers should be responsible for calculating which features are used and at what percentages. Product owners should be provided with that information and make decisions on feature removal.

Of course, it is often hard to justify or rationalize feature removal because it doesn’t seem like progress. But it is progress; progress towards the simplest system that meets the needs of the user. Building simpler systems ultimately costs less money. Product owners have the tricky job of knowing and balancing good business decisions with good software decisions.

The TDD Process

Tuesday, January 23rd, 2007

I didn’t find one that I liked exactly, so I just thought I’d post an image that represents the flow of the TDD process.

[click on image to enlarge]

The effects of refactoring and sprinting on quality

Monday, January 15th, 2007

Martin Fowlers discusses the term Technical Debt as what is introduced into your code when you take a quick, yet messy approach to developing something. Another way to think about technical debt is as the inverse of quality; in other words:

technical debt = 1 / quality

A word that I’ve often heard used to describe the action of incurring technical debt is sprinting (not to be confused with a sprint in Scrum). This is an analogy to sprint running (in the track-and-field sense) where developers are rushing to write code, often at the expense of quality, testing, documentation, and their own sanity.

I’ve had development managers ask me to have teams sprint in order to increase velocity and thus meet a deadline. The usual “recommendation” is to skip refactoring or testing in order to accomplish this goal. In response, I’ve drawn the following graph several times to communicate the effects of doing this, so I thought I’d document it.

[click on image to see full size]

The 1/Q line represents the inverse of quality (or technical debt). When you are continually refactoring, as shown in the first part of the 1/Q line, the quality stays within a reasonable range. The velocity also stays within a reasonable range. When you start sprinting your quality goes down (technical debt increases). As seen on the graph, the velocity increases as the sprint begins. Unfortunately, the poor quality will eventually catch up with you, making it difficult to add new features or fix bugs, thus the dip in velocity right before the 1/Q line levels off. If the sprint continues for too long, you can likely get to the point where adding more functionality is just too difficult without recovering some of your debt.

But here’s the kicker, even if you did no development and focused just on refactoring (hence the drop to 0 velocity on the graph), it would take quite a bit of effort to get to the level of quality that you used to have. If you don’t recover from the technical debt, you shouldn’t expect to return to your previous velocity.

Refactoring helps you maintain a consistent level of quality in your code. You should try to avoid sprinting as much as possible, but if you do it, don’t do it for too long.

Pair Programming Etiquette

Friday, December 15th, 2006

I’ve often felt that there should be an etiquette guide for pair programming. Here is a first stab. I’ll update this list as I think of more.

Navigator:

  • Wait until the test is passing to nitpick on coding standards.
  • Ask nicely for the keyboard to “show” what you mean.
  • After “showing” what you mean, offer the keyboard back.
  • If they don’t take your advice, let them finish doing the task their way and then show them after they’re done.
  • It is good to inform the driver of keyboard shortcuts and refactorings but don’t interrupt the programming flow too much with advice that is not directly related to the programming task.

Driver:

  • Don’t ignore or get frustrated when your pair tells you a better way to do something.
  • Auto-format so your navigator can read your code easier.
  • Don’t be stubborn about giving up the keyboard when your navigator seems to know what they’re talking about.
  • If the navigator is confused by what you’re doing, talk them through it by having a whiteboard conversation.

Hey Mom, buy your music from me

Thursday, December 14th, 2006

I somehow got suckered into going to a multi-level-marketing (MLM) meeting not too long ago. No, not Amway… BurnLounge. Burnlounge is an MLM scheme where you pay around $500 to start your own music store in order to sell to your friends and family. Burnlounge allows you to customize your own front page and provides you with a URL like:

http://burnlounge.com/yourMusicStoreNameGoesHere

When your friends and family go to your Website, they can buy music from you for the great price of…. drumroll… $0.99 a pop. The music selection and prices are all controlled by Burnlounge, so what is the rationale behind your friends and family buying from you rather than from iTunes or any other site that sells music for the same price? Because they’re family and family would rather buy music from you than Steve Jobs. Yes, until they get sick of you and your cousin and your sister all competing to try and sell them music, at which time they’ll just go to AllOfMP3.com and buy music for 1/5 of the price anyways.

But they quickly moved away from the conversation about price, because they want you to believe that the competitive aspects of the business (price, services, selection, etc.) are inconsequential. Like any other MLM scheme, the focus isn’t on selling the product (music in this case), it is on building a self-sustaining network of people who are selling to their friends and family and building their own networks. This is called a pyramid. But they don’t call it that, they want you to naively believe that “a series of concentric circles” is something different than a pyramid.

I sat through 2 hours of listening to one speaker after another attempt to appeal to the human affect/emotion rather than the human intellect/logic. If you’ve ever been to a MLM meeting you’ve heard the ridiculously stupid rhetoric before: “This isn’t for everybody. Some people get it and others don’t. Those of us who get it will become successful.” And unbelievably, tons of people were suckered in by this inane form of reverse psychology. Or better yet, “Look at all these rich and famous people who are involved. They’re all doing it, so it must make sense.” As if rich and famous people never jump on the bandwagon or make horrifically stupid business decisions. A quick look through a list of common logical fallacies would show that they violate almost every single one. There is almost nothing logical about they way they present their business model.

And I am so glad that I’m a tech geek, because I could hardly believe the horrifically misleading or patently false information they were feeding this crowd of unsuspecting, non-technical folk. For example, they promote the fact that their music is available in WMA format, and fail to mention that this will only play in Windows Media Player. They also fail to mention that their music will not (as far as I could tell) play on an iPod. Ya, let’s just ignore the fact that the iPod has about 80% of the market share in portable MP3 technology, and fail to inform prospective store owners of that.

Then they were pitching DRM as a benefit to their consumers!! DRM is a technology designed to limit the product owner’s rights (you know, they one who paid for the product) in order to protect the intellectual property rights of the artist. That’s like saying that Toyota added technology to their cars that would prevent you from changing the paint color, tuning your engine, or adding aftermarket parts, and then touting that as an advantage for the customer.

Or better yet, they appeal to common practice by saying that McDonalds is successful because they have thousands of stores not just one; so, logically it must make sense to have thousands of music stores online. Hmm, last time I checked Amazon, Ebay, Circuit City, and Gap all have a single online store. Wow, how do they succeed!?!? Could it have anything to do with the fact that McDonalds sells a tangible product and must have multiple stores to position itself in different geographies in order to distribute their tangible product? An intangible product, such as a copy of a song, can be distributed globally with a single distribution channel. How could people fall for this ridiculously illogical argument.

The bottom line is that if you’re going to get involved in a business your focus should be on selling your product not on building a network of salesmen. You should be thinking of ways to compete against your competitors. And honestly, its not “your business” unless you can directly control the competitive nature of your business. Can you add new services? Can you change your prices? If not, then you are just a sales person for somebody else’s business.

Universal just doesn’t get it!

Monday, November 20th, 2006

I just read that Universal Music is suing MySpace.com over copyright violation, saying that MySpace encourages its users to illegally distribute copyrighted materials. Universal is arguing that:

“Our music and videos play a key role in building the communities that have created hundreds of millions of dollars of value for the owners of MySpace,” the company said in a statement. “Our goal is not to inhibit the creation of these communities, but to ensure that our rights and those of our artists are recognized.”

Yes, and MySpace, through its “copyright violation” has played a key role in creating hundreds of millions of dollars of value for the owners of Universal. Call me crazy, but how does Universal not realize that MySpace is a massive marketing engine that is promoting their music.

People post songs on their profiles and their friends can listen to those songs when they visit. This is called “sampling” and it promotes Universal’s music. Sampling of this sort is going to be one of the most significant ways that digital content will become popular in the next 5-10 years. People share music and music becomes popular because of it. When music becomes popular, musicians sell more music, concert tickets, t-shirts, etc.

The record companies have got to take off their blinders and realize that they need to help promote this, not fight it. These types of lawsuits and lobbying hurt technological innovation and damage our culture.