The post got me to thinking about visibility and honesty in software groups. The actual issue isn't so much visibility. The issue is that agile assumes a self-governing group. The only way a self-governing group works is if you have self-governing people. However, that's not the only thing needed to make a real team work effectively.
So, how do these self-governing groups (like agile teams) work effectively?
First, the group must share risk. Either the group succeeds or the group fails, and the entire group has to believe that. If this doesn't happen, you foster competition among the group, and that will destroy the group's effectiveness. After all, if you're competing with me, why would you stay an extra hour to help me finish a task? But if the group will fail with the task undone, then you'll stay the extra hour to help finish.
Second, the group must have mutual respect. If you think you're better than me, you'll behave accordingly. And I'll react accordingly. All of a sudden, I'm doing the easy tasks and doing them less well than you would - all because you seem better than I am. But if we respect each other, than we'll each push the other to our limits, and that's good for the whole group.
Lastly, the group must have the ability to discipline or expel its own members. This provides the group with sustainability. A group that cannot solve its own problems, even with its own composition, is a group that is governed by some external force (thus defeating the self-governing portion of our group definition).
So, if you want a self-governing group, get good people. Get people who are motivated and able to govern themselves. Then put them together and stand back.
Magic will happen.