Don’t Trust the Team

Don’t Trust the Team

At a major government agency, I once asked the chief of their Agile methodology if one should “trust the team”. I was referring to software development teams. His answer was an unequivocal and unilateral yes: One should always trust a team to make the right decisions, and if they don’t, then they will learn from their mistakes, and that is the best way to learn.

I had heard this attitude many times before, and it has never sat well with me. While I have been a strong advocate of Agile methods since 2000, I have felt that Agile’s principles were guidelines - not absolute rules. The Agile Manifesto says,

Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.

But this does not say, “Trust the team in all things, and allow them to fail”.

Somehow, people have made a huge leap from what - I believe - the Manifesto intended. I believe that what was intended is that a team lead should not micromanage them - that you should get “out of their hair”. But that does not mean that you should just sit back and cross your fingers.

Teams often have very bad judgment. This can arise from inexperience. For example, one thing I have noticed is that programmers choose tools based on what makes their job easier - not what is best for the organization. Junior programmers generally prefer type-unsafe languages such as Python, Javascript, and Ruby. Their reasoning is that it generates fewer errors when they compile their code. That is true, but errors still lurk undetected. But to a youngish person in a hurry to get their story done, a typesafe compiler can try one’s patience, since it requires your code to be much more solid before it will complete a compilation.

The creator of the Python language, Guido van Rossum, was hired by Dropbox to help maintain things, since Dropbox had written their platform in Python. They found that “when the company grew, new engineers could not understand the clever but 'short and cryptic' code written by and for earlier developers.” This was because of the lax rules of the Python language. For example, to learn what kind of object a Python method returns, you have to dig into that method’s code - Python methods do not explicitly declare a return type.

Today Dropbox uses Go, Typescript, and Rust - all strongly typesafe languages. They learned a lesson - the hard way - that most experienced programmers know.

My point is that programmers don’t make the best choices about technologies. They pick what they know, and they pick what makes things easy, and they jump on fads: everyone seems to be using JSON? - then I’ll use that too. Young programmers also have not typically learned some hard lessons that experienced programmers have. There are many such lessons, since few of the practical aspects of programming are taught in a computer science curriculum.

I often summarize the situation as,

A team of smart programmers just out of school can rapidly create a huge mountain of unmaintainable code.

Programmers make bad design decisions too. A particularly horrendous example is described in an article about the incident in which an Uber self-driving car killed a bicyclist. According to the article,

  • “...the system design did not include consideration for jaywalking pedestrians”
  • “...the constantly switching classifications prevented Uber's software from accurately computing her trajectory and realizing she was on a collision course with the vehicle”
  • “The system used an object's previously observed locations to help compute its speed and predict its future path. However, ‘if the perception system changes the classification of a detected object, the tracking history of that object is no longer considered when generating new trajectories’ ”

As an experienced programmer, these things all sound like horrendously bad design. It tells me that no one did a system-level walkthrough of “failure modes”. It reminds me of systems that I have seen that were “coded” without being designed.

It tells me that whoever was in charge just let the programmers code away, with no oversight.

In the Uber case someone died. If someone is working on banking software, the worst that can happen is that a million customers’ deposits are erroneously tabulated, or that their data is exposed to hackers - not so bad!

That’s why I don’t trust the team. I don’t even trust myself. That’s why when I lead teams, I talk through designs with them. I make sure that a suite of high coverage test cases is created for critical business transactions, and that those test cases are not written by the same people who wrote the application code - because if it is, then a misunderstanding of the requirements will be present in both the code and the tests. I make sure that design decisions are recorded in a wiki to journal the evolution of the design. I look at people’s code, and I look at the test cases, and I make sure that every kind of functional and non-function need has tests and that the test coverage (not just code coverage) is assessed in some way. And that is just for starters.

Pairing won’t fix this. When people pair, they are focused on solving a problem. They are not focused on quality. They want to get the story done. To maintain quality, one has to have explicit quality practices, such as design level review, inspection, and - most importantly - discussion.

I use discussion as a weapon against defects: I have people walk me through their approach, and I challenge it: How do you make sure that data is consistent? What if an eventually consistent change uncovers an inconsistency? Where are the places in the app where that might happen? What happens if an event arrives out of the expected sequence? What if that message is missing a field? What if these two transactions against overlapping data happen at the same time? What if that service is unavailable for five seconds - will it trigger a sequence of failures that could have been recovered from?

To be able to trust the team, either their reputation precedes them - that is, they are known a-priori to be highly experienced and competent - or, you have trained them yourself so that you know what their capabilities are: then you know when you can trust them, and when they need some oversight. If you have a team with junior members, you should not simply trust them outright.

Have faith in the team - yes. Have confidence in their ability to develop and grow - yes. Advocate for them - yes. Be their biggest fan - yes. But trust a team containing recently out of school members to build whatever comes along, without any mentoring, assistance, or oversight? Hardly.

A team lead who sits back and “lets the team fail” is not a team lead. A team lead’s role is to help the team to succeed - not by doing things for them, and not by micromanaging them, but by mentoring them. And if the team needs expertise that they don’t have and their team lead does not have either, then the lead should bring someone in who knows that area to mentor the team about that. Discuss, collaborate, check, question, suggest. Always in a nice way of course, and always with encouragement - but don’t just sit back!

It seems that nobody cares about the technical dimension of an agile team. Great article. Please, read to the end before starting trolling!

回复
Niel Magsombol, SPCT

Enterprise Agile Coach | Exec Leadership Coach | Keynote Speaker | Author

5 年

Cliff Berg great points based on sound practical experience in the field

回复
Steven Z.

Principal at SRZ Consulting, LLC

5 年

Three powerful words: trust, but verify. Sometimes failing is too costly to allow.

Samer Adra

Lead Software Engineer, VP

5 年

faith == trust. That's a criticism of the word choice. Good points though. Teams should be empowered to solve problems, but the solutions should be challenged and strong technical leadership is a must.

Joseph Hurtado

Over 15 years of experience as Tech Project Manager, Product Manager, & Software Development Manager. We offer consulting services to deliver software, and make your company faster and more efficient | AI & Tech strategy

5 年

I think we all agree the spirit of the Agile Manifesto was right, however the dogma that has awaken since is not.?One of those pieces of dogma is taking "self-organization" to the extreme. Of course it is good that a team figures out things on their own, and build things by?self-organizing? HOWEVER, it is not right to make this advice become Leadership is useless, and a Managers add no value. Nothing could be further from the truth. Good managers, like a general in a battle are invaluable. They have seen a thousand battles, they have scars, and knowledge to prove it. Those leaders, the ones who truly know their stuff can lead a team to victory, and protect them from costly mistakes. To finish I was reminded of 3 quotes that show the importance of leadership, some words to remember: - "The art of war, then, is governed by five constants ... (1) The Moral Law; (2) Heaven; (3) Earth; (4) The Commander [the leader or general]; (5) Method and discipline [where the teams are.]" Sun Tzu - “I cannot give you the formula for success, but I can give you the formula for failure, which is: Try to please everybody.” - Herbert Swope -?“A leader is one who knows the way, goes the way, and shows the way.” – John C. Maxwell

要查看或添加评论,请登录

Cliff Berg的更多文章

  • They Know a Collapse Is Coming

    They Know a Collapse Is Coming

    The CIO of Goldman Sachs has said that in the next year, companies at the forefront will begin to use AI agents as if…

    78 条评论
  • Agile – I Told You So

    Agile – I Told You So

    I think it is no longer controversial that the Agile movement is in decline. When I made a post about it a year ago…

    51 条评论
  • The Most Brilliant Programmer I Have Known Couldn't Work at Google

    The Most Brilliant Programmer I Have Known Couldn't Work at Google

    During the late 1980s I worked at a 30-person startup. The company was founded by the two fellows who had been the lead…

    31 条评论
  • The Most Guaranteed Way to Improve the Bottom Line

    The Most Guaranteed Way to Improve the Bottom Line

    Culture eats strategy for breakfast, but it’s leaders who generate the culture – leaders at all levels, not just at the…

    2 条评论
  • Empowerment, Not Self-Organization

    Empowerment, Not Self-Organization

    Have you heard people say something to the effect of, “Self organization is not really entirely self organization”? I…

    11 条评论
  • Join a Community that is About Learning

    Join a Community that is About Learning

    Things like leadership, product development, technical practices in DevOps, and more. Free workshops for learning.

  • Anyone Can Learn DevOps

    Anyone Can Learn DevOps

    Are you looking for ways to expand your skills, to be more effective in your organization? One way is to learn more…

  • Use a Capability-Focused Approach — Not an Agile Framework

    Use a Capability-Focused Approach — Not an Agile Framework

    Article here: https://www.agile2academy.

    3 条评论
  • Why Team Performance Is the Wrong Thing to Focus On

    Why Team Performance Is the Wrong Thing to Focus On

    Many companies today are obsessed with teams. The “old” approach of static departments and hierarchies is out.

    12 条评论
  • Leadership Is the Key Skill Today

    Leadership Is the Key Skill Today

    Join our free “Intro” to our acclaimed course, Constructive Agility? for Leaders. (Formerly Agile 2 Foundations) It…

    5 条评论

社区洞察

其他会员也浏览了