Debugging Teams: A Summary
I recently picked up a copy of
Debugging Teams: Better Productivity through Collaboration by
Brian W. Fitzpatrick and Ben Collins-Sussman. I found the book really helpful, and as an exercise made some summaries of the parts I found useful. Most of this is going to be stream-of-concious style and I make no promises of readability.
Engineering is easy. People are hard. - Bill Coughran
Software is a team sport - not an individual accomplishment. People look up to geniuses, but a genius works within a team.
People are insecure about their creations. Keeping creations secret is not the same as keeping control. A secret represents a gamble:
- Fundamental mistakes are harder to catch
- More are faster than one
Tight feedback loops are essential:
many eyes make all bugs shallow
Things engineers need:
- (uninterrupted time to focus) writing code
- High Bandwidth, Low Friction team connections
The pillars of healthy interaction and collaboration:
- Humility -- essential for self improvement
- Respect -- means caring about others AND yourself
- Trust -- that others are competent, even if you've been burnt before
- Timeline (discovery - investigation - resolution)
- Primary Cause
- Immediate Resolution
Being open to influence means that you are more able to influence, but it's essential to choose your battles
Being vulnerable can make you appear stronger, and the easiest way to do this is admit when you have made mistakes
Having a strong culture means that you can overcome any introduced negative cultures. You want to recruit others that are aligned and avoid those unaligned. What it means to be aligned is to seek those with shared experiences, values, and goals.
Culture should be resilient to negative change, but open to improvement. This is what makes interviewing for culture essential!
A culture is formed by a strong team identity and a collective pride in what is produced. New members learn the culture by observing, working, interacting, and especially through how the team handles conflict.
Great engineers seek and cultivate great culture in a feedback loop. A great culture encourages engineers to share ideas and have a voice in decision making. Part of this is great engineers wont join, and wont stay, if they always ride the bus and never get a chance to drive.
Engineers see communication as an obstacle to overcome
Investing in communication is an increase in productivity and team happiness. This is done through various channels:
- mission statement: define the team direction and limit the product scope
- meetings: few and far between. Keeps the group small when making decisions. Some tips:
- invite only the required people
- ensure that the agenda is distributed beforehand
- end the meeting if the goal is achieved
- keep the meeting on track at all times
- schedule meetings near natural interrupts like lunch
- design docs: owned by 1, written by few, reviewed by all
Part of communication is avoiding noisy minorities. Start the communication small and expand as needed (and don't early optimize and over-engineer)
No team can function without a leader - explicit or implicit
A carrot and stick approach to management is not only ineffective but harmful to creative people. Rather aim to create trust and allow natural pressure to have people want to live up to that trust. The impact a manager has is hard to quantify.
Things to avoid:
- Ignoring problems (for example, low performers)
- Hire pushovers (surrounding yourself with yes-men)
- Ignoring the human element
- Manage people like children or prisoners
- Most of all -
resist the urge to manage!
On the other hand:
- be humble - apologise when wrong
- be less vocally sceptical, and be calm
- have clear goals - especially a mission statement
- delegate, but participate. Don't be afraid to take small but shitty jobs
- ask questions
- build consensus and break down roadblocks
- be honest
- shield the team from the outside
- acknowledge that failure is a learning scenario - not the end of the world. Focus on the small successes in the meantime
- teach and mentor
- track happiness
- know when to be loud, and when to save political capital
Team motivation can be cultivated through:
Refuse to tolerate poisonous behaviour. Identify the threat:
- no respect for time
- sense of entitlement
- ego (know when to close debate on these people)
Find the facts, and focus on the long-term. Don't compromise on short-term gain.
- Pursue extra responsibility.
- Act like an adult.
- Question things.
- Remember that people aren't psychic.
- A fear of failure means that there will be no risk taken.
- Don't let managers be bottle-necks.
- Acknowledge the current state and focus on the change.
- Ideas spread - don't focus on getting credit for everything.
- Simply removing does not work - focus on replacing with something better.
- Luck is simply creating and noticing opportunities.
- Be aware when you are gaining and spending political capital.
- For emails to be effective they should be short and sweet - three bullets and a call to action
- Do what's right - never be afraid of being fired
Software is release when it is ready and usable. Focus on the user and the user experience, namely:
- identify barrier(s) to entry
- respect users time
- have robust feedback mechanisms
- measure usage, not uses
- improve latency and speed - it matter more than you think
- create trust and delight in your product
|||The difficult part here is how to get people to realise that documentation is not asking for permission - its opening up for ideas. A fine line indeed.|
|||Its great to see so many of my companies values show up in lists like this.|
|||Why not 5 minute abs? That is, TWO bullet points and a call to action...?|