I’ve been at Thoughtworks for 12 years. Who would have imagined? Instead of writing about my reflections from the past year, I thought I would do something different and post twelve key learnings and observations looking back over my career. I have chosen twelve, not because there are only twelve, but because it fits well with the theme of twelve years.
1. Tools don’t replace thinking
In my years of consulting and working with many organizations and managers, I have seen a common approach to fixing problems, where a manager believes a tool will 'solve' the given problem. This can be successful where a problem area is very well understood, is unlikely to have many exceptions and where everyone acts in the same manner. Unfortunately this doesn’t reflect many real-world problems.
Too many times, I have witnessed managers implement an organization-wide tool that is locked down to a specific way of working. The tool fails to solve the problem, and actually blocks real work from getting done. Tools should be there to aid, to help prevent known errors and to help us remember repeated tasks, not to replace thinking.
2. Agile 'transformations' rarely work, unless the Management understand its values
Many managers make the mistake of thinking that only the people close to the work need to 'adopt Agile', without realizing that the other parts of the organization need to change at the same time. Coordinating this in enterprises takes a lot of time and skill, with a focus on synchronizing change at different levels of the organization. Organizations who adopt Agile in only one part of their organization face a real threat. As the old saying goes, “Change your organization, or change your organization.”
3. Safety is required for learning
Learning necessitates the making of mistakes. In the Dreyfus model, this means that people, particularly in the Advanced Beginner stage, need to make mistakes in order to learn. People won’t risk making mistakes if they feel they will do a bad job, lose respect from their colleagues or potentially hurt other people in that process. As a person passionate about teaching and learning, I find ways to create a safe space for people to fail, and in doing so, make the essential mistakes they need to properly learn.
4. Everyone can be a leader
I have written about this topic before, but it is such an important observation. I see a common mental model trap where people feel the need to be given the role of a leader, in order to act like a leader. People can demonstrate acts of leadership, regardless of their title and can do so in many different ways, simply by taking action on something without the explicit expectation or request for it.
5. Architects make the best decisions when they code
In the Tech Lead courses I run, I advocate for Tech Leads to spend at least 30% of their time coding. Spending time with the code helps build trust, respect and a current understanding of the system. Making architectural decisions without regard for the constraints of the current system are often bad decisions.
6. Courage is required for change
I miss people talking about the XP values, one of which includes Courage. This is required for acts of leadership, taking on the risk to fail and the risk/reward of attempting something new. Where there is no risk, there is often little reward.
7. Congruence is essential for building trust
Beware of the age old maxim, “Do as I say, not as I do”. In reality, regardless of what you say, people will remember how you act, first and foremost. Acting congruently is making sure that your actions follow your words. Acting incongruently destroys trust. Saying “no” or “not now” is better than promising to do something by a certain time, only to not deliver it.
8. Successful pair programming correlates with good collaboration
Although not all pair programming environments are healthy, I do believe that when it works well, teams tend to have better collaborative cultures. Many developers prefer the anti-pattern of (long lived) branch-based development because it defers feedback and sources of potential conflict. I consider (navigable) conflict a healthy sign of collaborative teams. Deferring feedback, as is the case with code reviews on long-lived branches, tends to lead to more resentment because it is delivered so late.
9. Multi model thinking leads to more powerful outcomes
One of my favorite subjects at University, was Introduction to Philosophy, where we spent each week in the semester studying a different philosopher. Over the course of my career, I have come to appreciate the value of diversity, and to see a problem through multiple lenses. Systems thinking also recognizes that facts can be interpreted in different ways, leading to newer ideas or solutions which may be combined for greater effect.
10. Appreciate that everyone has different strengths
Everyone is unique, each with their own set of strengths and weaknesses. Although we tend to seek like-minded people, teams are better off with a broader set of strengths. A strength in one area may be a weakness in a certain context, and teams are stronger when they have a broader set of strengths. Differences in strengths can lead to conflict, but healthy teams appreciate the differences that people bring, rather than resent people for them.
11. Learning is a lifelong skill
The world constantly changes around us and there are always opportunities to learn new skills, techniques or tools. We can even learn to get better at learning; there are many books like Apprenticeship Patterns and The First 20 Hours which can give you techniques to get better at this.