If I have seen further than others, it is by standing upon the shoulders of giants.
Programming is not about coding it is about working with people. Sounds easy, isn’t it?
You put people in one room, and somehow it all should magically work out.
The problem is that most people do not even come across as they intend to. I am not even talking about solving complex issues. So, effective collaboration takes time and effort.
To be productive we should and have to stand on shoulders of others not only technology-wise but also communication-wise. And team framework could be a great assistance here.
Team framework is an established set of practices that creates a solid base for an effective collaboration. It is the way to productivity and happiness of each team member.
This set of practices should solve next problems:
- Prioritizing values
- Resolving competing values (for example, excellence vs pragmatism, flexibility vs predictability)
- Resolving conflicting views (for example, what to test and on which level)
- Reducing time on discussing how things need to be done
I see Extreme programming as a perfect starting point for team framework. Although it has never got the popularity it deserves, parts of the methodology can and should be applied.
A philosophy of this methodology is based on the values of communication, simplicity, feedback, courage, and respect.
Communication is crucial for creating a sense of team and effective cooperation. Clear, honest communication relieves tension and improves credibility.
Improving communication helps achieve simplicity by eliminating unneeded or deferrable requirements from today’s concerns. Achieving simplicity gives you that much less to communicate about.
Feedback is a critical part of communication. At the same time, the simpler the system, the easier it is to get feedback about it.
The courage is another crucial value that touches all areas of the software development process:
- The courage to speak truths, pleasant or unpleasant, fosters communication and trust.
- The courage to discard failing solutions and seek new ones encourages simplicity.
- The courage to seek real, concrete answers creates feedback.
For software development to simultaneously improve in humanity and productivity, the contributions of each person in the team need to be respected. “I am important and so are you.”
Application of the values in day-to-day life is done through the practices. And practices don’t make sense without the values which backing them up.
Here are the most important practices:
1. The whole team
People need a sense of “team”:
- We belong.
- We are in this together.
- We support each other’s work, growth, and learning.
2. Energized Work
When you’re sick, respect yourself and the rest of your team by resting and getting well. Taking care of yourself is the quickest way back to energized work.
3. Pair Programming
Pair programming is a dialog between two people simultaneously programming (and analyzing and designing and testing) and trying to program better.
- Keep each other on task.
- Brainstorm refinements to the system.
- Clarify ideas.
- Take initiative when their partner is stuck, thus lowering frustration.
- Hold each other accountable to the team’s practices.
- Share knowledge.
4. Test-First Programming
Writing a failing automated test before changing any code has next benefits:
- focusing on one piece of code (business logic)
- producing loosely coupled, highly cohesive code
- gaining trust of teammates
- achieving clearness and effectiveness (code, refactor, test, code, refactor)
5. Incremental Design
Design that is done close to when it is used is more efficient. As your expertise grows in making changes to a running system in small, safe steps, you can afford to defer more and more of the design investment.
I truly believe that having this kind of framework will make software development more enjoyable and effective.
- Extreme Programming Explained by Kent Back and Cynthia Andres
- Clean Craftsmanship: Disciplines, Standards, and Ethics by Robert C. Martin
- The Clean Coder: A Code of Conduct for Professional Programmers by Robert C. Martin