Dec 26 2007
Bear programming
Kuniaki Igarashi posted a nice presentation on Omoiyari-Driven Development, with the core idea of programming while keeping in mind how other developers are going to use and understand your code. This practice aims to reduce misunderstandings among team members. I have a strong belief that communication and communication-related problems play a key role in software development, and although I would not consider being thoughtful of others as an idea that can lead development, I certainly agree with Kuniaki that it is a very important practice. I wrote several articles about related techniques, including Documentation for telepathic developers and The Poka-Yoke principle and how to write better software.
I am pointing to this presentation mostly because of the secondary “Bear programming” practice, which revolves around explaining the problem first to an imaginary team member (or in this case a real stuffed toy bear) before raising the flag and asking for more help. When a team member asks a question that clearly signals that he misunderstood the issue or the underlying infrastructure, I always try to lead that person into expressing the problem better or drawing it on paper. Very often that team member will reach a good conclusion himself - expressing it on paper or to another person just helps to clear the issue in his mind. This is, in my experience, much more effective than just giving an answer straight away. Bear programming speeds up the process a bit and includes a virtual person for people to talk to.
A stuffed toy is, however, no replacement for an experienced team member - and if agile development has thought us anything it is that there is no replacement for direct person-to-person communication. Asking for help is a good thing and I would not want to prevent people from doing that. But this can be a very useful practice to prevent junior team members from wandering off into the wilderness when they hit a problem. I would suggest using Bear programming, but with a different trigger - before starting to develop some utterly complex workaround, explain the problem to the bear. If that does not help, then raise the flag and call someone to assist you. Using the commander’s intent template can also help a lot to improve the shared understanding - so if you are often getting these problems ask yourself whether you can explain stuff better in the first place.
Add to Del.Icio.Us bookmarks




Thanks to writing about ODD. (^^)
> much more effective than just giving an answer straight away
It’s a good idea to use bear programming. I’d like to use it!
My trick is to pretend that we’re going to open source the project. It never happens, but it forces me to avoid shotcuts.
- As much as possible, do it right. Refactoring internally is fine, but a published API is strict.
- Simplify the client code and configuration. Avoid making users suffer and increase adoption.
- Make code clean and dummy proof. Be strict on what you expose to users.
- Consider use cases outside of what’s currently required. Generalize the design.
- …
-Protect your reputation, don’t make it suck.
Basically, instead of having a virtual person you have a virtual mob readily bugging you with support questions!
Never heard of bear programming - pretty hilarious. On one hand, encouraging self-sufficiency is good…although communication is good as well. If everyone only talked to their bears, and developed in silos, I think there’d be many problems with architectural consistency/coherency.
also known as rubberducking for obvious reasons.