It's clear to me that every development team has needs. Here is my take on what a development team needs to be effective. I find these to be true for me, personally, and for the teams that I have been a part of. When a team didn't have these things, they suffered because of it. Developer happiness suffered. Productivity suffered.
- We need a clear vision of what is needed, with enough of the why to steer us through the myriad decisions we make daily.
- We are human, so we need a system that supports our weaknesses and magnifies our strengths.
- We need safety nets, so we have the courage to do what feels right, sometimes: code versioning, database backups, resource backups, and someone who can step in for us while we chase a problem.
- We need feedback loops. For just about everything. Feedback drives improvement. We need feedback on the project, feedback on the team, on our practices, on management, and we need feedback on our personal tendencies.
- While it is important that we improve, we will not be able to correct all of our weaknesses. Therefore, we need practices that correct for them.
- We need frequent feedback on what is and, maybe more importantly, what isn't needed. We're engineers. We want to tinker and improve.
- We need a system that tells us when to stop.
- We need a system that quickly identifies blockages and includes support for clearing them.
- We need the opportunity to achieve flow.
- Single person flow is deep, but fickle. Pair flow is easily achieved and robust.
- We need to take advantage of group think. We need healthy debate.
- It is unrealistic to assume a lone developer can cover all the permutations and edge cases. Just as it is unrealistic to assume a lone developer can come up with a list of all the technical debt in our app. Creativity is a group effort. It takes input from another, other ideas, to spur the mind to come up with more areas of concern.
- Development requires continual learning. To keep up, we need to learn from each other. To learn about this project, to improve coding practices, and to learn how to use our tools effectively.
- To support this change, we need what any group needs to change, drive and a champion for change. Drive is provided by a clear vision and group support. The champion fights back entropy.
- To support individual change, we need reinforcement that is relative and immediate.
- We need to respect and support the other members of our team. To do that, we need enough interaction, while coding and not coding, to want to support each other. We need enough interaction to be able to earn respect.
To take it to the next level, we need:
- An opportunity to brainstorm about the feature. Creativity is a group affair, don't sell yourself short. If you want something spectacular you need a group and a safe place to brainstorm. This carries into the coding portion as well.
- To get out from behind our desks and learn from others; our customers, other development shops, other industries?
- To ensure we are choosing practices that encourage the core XP values: Communication, Courage, Feedback, Respect, and Simplicity.
How does your team rank?