Archive for March, 2009

Ignorance is Bliss

Throughout our lives, we study and practice the skill we find useful for an incredible amount of time, expecting to be ready when the moment comes that we have to use them.

Despite still agreeing with the practice/study paradigm, I’m starting to notice that knowing everything is not the best solution in all the situations. This thought came to my mind again when reading a recent article in the Sport magazine, about which conditions made possible to the British cycling team to win so many medals in the last Olympic Games (if you want to know more about it, you can read it here).

What caught my attention was the description of the research and development group, responsible to discover the best technologies to be used in the cycling competition. The group actually collaborates with many people outside the cycling industry, like F1 teams, and aerospace and defense companies. When asked to explain why, the head of development answered:

We really value ignorance. So we got to ask people who really know nothing about cycling. An aerodynamicist will ask: ‘Why do you do it like that?’ We’ll look at each other and say: ‘I don’t know.’ That really opens things up

This is also described by Richard S. Wurman, in his book Information Anxiety, where he describes common problems in understanding, citing the expert opinion syndrome:

We tend to believe that the more expert opinions we get, the more informed we will be. But we tend to forget that expert opinion is by no means synonymous with objective opinion. Unfortunately, most experts come with a bias that makes obtaining truly objective information almost impossible.

And when it comes to software development, this situation can be easily seen in coaching, either externally or internally. It is not rare to see coaching being done with a biased opinion, where coaches arrive with a ready-made solution that they want to apply, despite the conditions being face by the team.

Solving problems, complicated or not, has to be done with a clear mind. We have to assume our ignorance when facing any new situation, so we can understand it better and provide the best solution.

Distributed Source Control and Set-Based Design

That distributed version control systems are the current flavour of the moment, everybody already knows, so I’m not here to talk about the N reasons why you should not use svn/cvs anymore.

But what I hadn’t notice until recently is that git (or any other DVCS) actually allow you to do one very important thing in software development: set-based design

As Mary Poppendieck pointed out:

Toyota and 3M use the same concept for product design.  They explore the entire solution space and find intersections that everyone finds acceptable, gradually adding detail and converging on a solution.  This approach is called set-based design, and contrasts sharply with point-based designs which start with a single solution that undergoes a series of optimizations.  In most cases, set-based design produces the best design in the shortest amount of time with the least amount of communication.  It’s strange that this principle, so obvious when you are scheduling meetings, seems counterintuitive in the development environment

The eureka moment came to me in my latest project (in which i’m using svn), when I was thinking about exploring an alternative path to some code that was already implemented, but I thought it could be redone in a better way. How to do it with svn?

I could enter the obscure world of svn branches and merges, where I would have to fight hard to get my code back in one piece, but that didn’t sound inviting at all, and that’s why I haven’t actually implemented the second option, waiting to be more certain about it.

The interesting thing is that since I’ve been using git for the last year, I always took it for granted, and didn’t actually realize this benefit from DVC systems.

So, if you are thinking about why change from cvs/svn to a distributed system, add this point to your list.

Does it Really Work?

Last week during TW London Last Thursday event, I had the pleasure to see this presentation from Dave Robertson and John Johnston (or at least part of it), about how Agile and User Centered design are more a match, sharing goals and values, than different approaches to software development.

If you have some time you should really watch it, it is worth the time.

The overall presentation is really good, but the reason I’m posting here is one specific point that was mentioned, which I believe really hit the spot, and that’s when they say we should rethink the word work in the “the simplest thing that could possibly work” sentence.

This point goes back to the Agile Vs Usability discussion and it is very correct IMO, because it reiterates that development teams should not deliver any code just because it was quick to develop it and the client is happy (although he shouldn’t be at all) since it didn’t cost a fortune.

And what is interesting about this subject is how agile teams don’t usually accept low quality code standards (code without tests, lots of hacks, etc..), but easily accept low usability standards, not understanding that is also their responsibility to define what a good user experience is.

What I’m NOT trying to say is that the user should be left outside from the application design. He should definitely have his opinion (and a strong one), but should also receive advice in UX standards as much as he should in code quality, making sure that he understands what he loses when is trying to save money on each particular feature.

T-Shaped People vs Generalists

I’ve been reading Mary and Tom Poppendieck’s new book on Lean Software Development, and in one of the already released chapters, it mentioned the term T-Shaped people, which I had never heard in this context, and suddenly clarified a concept I have in my head for some time.

Since Scott Ambler published the essay Generalizing Specialists, it has become a trend in software development to talk about how generalists are better than specialists for a team, which (in a misinterpretation of what Scott meant) has leaded to a common anti-pattern, where persons become generalists in a lot of stuff, without having a deeper knowledge in any any area.

This way they know a little about a lot of languages, tools  and methodologies, but when it comes to make a difference, these persons are no assets to any team, since they don’t have any deep knowledge on any subject.

This was already covered by Jay Fields in this post, and what I want to point here is how the T-shaped term makes so much difference.
According to IDEO’s Tim Brown, in the  the article is called “Strategy By Design”, here is how a T-shaped person could be described:

“We look for people who are so inquisitive about the world that they’re willing to try to do what you do. We call them “T-shaped people.” They have a principal skill that describes the vertical leg of the T — they’re mechanical engineers or industrial designers. But they are so empathetic that they can branch out into other skills, such as anthropology, and do them as well. They are able to explore insights from many different perspectives and recognize patterns of behavior that point to a universal human need. That’s what you’re after at this point — patterns that yield ideas.”

And that’s what happens in software development. Once you have a deep knowledge in some language, for example, it is easy to branch out to different ones, since you can recognize the same (technical and behavioral) patterns, which will lead you to soon become competent in that area too.

But this situation does not happen if you always stay at the novice level, without never mastering anything you do.