Live data from Hacker News

How to Pick Your Battles on a Software Team

spin.atomicobject.com

61–70 of 141 posts

Re: How to Pick Your Battles on a Software Team

#61
post #51

Earlier quoted context omitted.

> Even a great team can be dysfunctional. By definition it can't. > It's crazy to pretend like a software team will not have disagreements from time-to-time. Sure you can have disagreements. So then you all present your arguments figure out which way forward is the best with as little ego thrown in as possible and move on. Right now I'm involved on the side with a project where a ton of decisions have already made. I…

Completely different context, but still a creative team, look at musical groups like the Ramones, Fleetwood Mac, many others who could hardly stand to be in the same room together offstage but still managed to make some great music. Dysfunctional groups can still do great things.

I don't actually think it is all that different. The point you are inadvertently making is that when it mattered (on stage and while practicing) they were performing well as a team. That they didn't like each other outside of that didn't matter much, just like I don't need to personally like my colleagues in some IT project and that I don't need to hang out or spend time with them outside of work.

In fact, I think that 'work / life balance' is precisely there, because teamwork costs energy and spending time away from each other is as important as spending time together, and there is more to life than code.

A couple of years ago I spent some time re-factoring a huge code-base that had totally gone off the rails. The guy that ran the project and I clashed quite badly when it came to the code and our approach to it (but since he asked me to help it was fairly clear that he was out of his depth from a programming perspective). When I got there there was no version control, the code was a giant hairball and literally nothing worked.

We spent the better part of two years untangling the mess and at each and every turn he'd dig in and make progress just about impossible. I tried very hard to keep my cool in all this and to just resort to facts rather than ego and I think that's the only reason that we did not end up in an actual fight.

Being a team player can be super hard, especially when everything is phrased in terms of 'your way or my way'. It eats up a huge amount of energy that could be used more productively and it tends to make it hard to leave the job without taking it home every day.

Re: How to Pick Your Battles on a Software Team

#62
post #59

Earlier quoted context omitted.

Applying this advice could quickly turn a functional team into a non-functional one.

Really? It seems like picking your battles can only help make a non-functional team a little more functional.

No, it will still be confrontational and that's not how you approach these things.

If you have issues with how the team makes the decisions you have to tackle the problem at the root, rather than to make each and every decision a point of conflict.

Re: How to Pick Your Battles on a Software Team

#63
The article strikes me as immature responses to immature behavior from others. It's a How-To for creating a caustic environment.

Try this:

  def leadership():
    while true:
      have_clear_goals()
      articulate_goals_clearly()
There is other stuff to good management, sure. But this will go a long way.

The section on "when someone makes it personal" really irks me. It should never be personal in a healthy organization. You can vigorously debate the design, the implementation, or any other issue, while keeping the focus on the issue. It never needs to be personal. If it ever gets personal, a manager must step in and immediately squash that and make it clear "That's not how we debate things here. Personal attacks are unacceptable. Focus on the issues."

But, really. Just have clear goals, then most decisions will make themselves. Debates can be settled by measuring alternatives against the goals. If, when measured against the goals, there is no clearly winning solution, then which one you pick probably doesn't matter, so everyone should stop wasting energy on decisions that don't matter and focus on the ones that do.

Re: How to Pick Your Battles on a Software Team

#64

I'm in the middle of this problem and not sure If I'm doing something wrong. In the next month we are going to launch a new product, I'm full stack dev and I'm bit frustrated with my colleagues. I did all the devops and all developers(5) has his vagrant per branch, each vagrant box is deployed in one box so they can show to another colleague without trouble (I built a server with the subdomain with the $TASK-ID.subdo…

If something is the best way to do, then the one who is proposing it has to convince others usually. More often its about showing them how it can save lots of time in the future. But the reality is that people don't want to spend time unless it has a big business impact and the time it takes to learn/modify is justified by the cost.

Re: How to Pick Your Battles on a Software Team

#65

Earlier quoted context omitted.

You can fix it but it will take time and you will need to be very patient. (1) let go of your frustration, it is not helping you, if you can't GOTO 3. (2) pick the best of your colleagues and try to lift him/her up to your level with arguments , not with force (this will take time and oceans of patience) (3) if that does not work, start looking for other employment, no matter how much you like your boss (4) if it doe…

I think it's not clear if he is the project manager or not. If he has a project manager, then we have to ask why he isn't helping focus the team. Or are they are product a team that is expected to organize themselves. I agree strongly with #1. #2 I think it might be good to approach it by asking more questions. If people say it is hard, ask how can we achieve the goal of writing more tests without it being a burden?…

Hey,

Not I'm not project manager, I'm single remote dev. My manager try to the other devs write test, but they said to him that is impossible or too complex. So at that time I spend 2 days and I wrote the test and I wrote a long email with links, howtos, benefits, etc.. Nowadays they still say that it's too complex and no value added. My manager can't say test in all places: they complain about it and I tried the #2 but it didn't work.

#2 worked well with the vagrant box, at first days was too complex, now they loved.. but with test and pep8 code style is a long battle. I think that I'm trying to change how they use to work, and they don't want to change how they work.

I always use to explain that, as a friend, is good for all, but I can't get it.

#1 Yes, me too, but when you reviewed 18 PR in 2 days without good code indention, half of them didn't work and 70% was mark as resolved in the task-manager I need to run a marathon every morning to keep away my frustration. Maybe was that last week I was on holidays and these days I only fixed problems.

Re: How to Pick Your Battles on a Software Team

#66

How about some good old consensus? Battles are not the way to go, regardless of the stakes. If you feel the direction a project is going in is not to your liking you can always quit. As soon as you start phrasing things in terms of battles, winning, losing and so on you're going to end up very frustrated and potentially toxic to the rest of the team. A good team member knows how to make their objections heard without…

>How about some good old consensus? I have never myself seen true consensus work anywhere. It ends with a) one person caving and being resentful, or b) abandoning consensus because everyone realized for important things that it took too long or it never got done. Even on small teams, it's been a goal, but often we have to say "ok, well you're outnumbered, so unfortunately we aren't taking that direction."

A lot of software is produced in a very bad way. But in my line of business (looking at tech companies) the ones that really get it outperform the ones that don't by a very large margin and there are enough of them to make a real difference.

The machinery of consensus forming requires that people know what they know, and more critically, what they don't know. If a team is unable to determine the strengths and weaknesses of the constituent members then that's a recipe for trouble and this will lead to the frustrations that you outlined.

Let me give you one example of such a situation:

A while ago the front-end of an aging website had to be re-built, it's days were numbered but there were many good reasons to invest some time, money and effort into it but not to go overboard. The programmer hired wanted to do a 'good job' and came up with a whole raft of changes that were totally out of scope for the size change we had in mind.

Instead of forcing the issue I opened the books, calculated roughly how much it would require to do it the 'right' way and how much it would cost if we just did what was needed. In the end the decision was mine but I felt confident that we had achieved enough common ground that to do things 'wrong' no longer felt as bad as if it had felt if I had just told him that since I'm paying this is how we do it.

The project finished on budget, on time and was a pretty good success financially and we both benefited from that.

So yes, it is possible, but it will require an investment in time to educate your team members rather than to 'cause people to cave and become resentful' or to 'abandon consensus'.

Re: How to Pick Your Battles on a Software Team

#67
post #17

I agree with the author's advice, but a part of me can't help but feel that "picking your battles" is a sign of a poorly functional team. The entire premise behind "picking your battles" is that battles are expensive, and hence, you can't afford to fight every battle. But in a highly functioning team, bringing up suggestions and points for discussion shouldn't be expensive. It should be natural and fluid, with every…

If the stakes are non-trivial, it's normal to have disagreements about how to proceed, and ultimately a decision needs to be made.

If you have an environment where everyone is just getting along and there's no conflict at all over major decisions, either no work is getting done, or the observer is blissfully ignorant of the conflict going on. Part of being a "highly functioning team" is that people pick their battles and don't bicker over unimportant things. "Battle" doesn't mean a screaming match -- just a disagreement that needs to be resolved in one way or another.

If you look at really poisonous workplaces, you'll usually find that there's alot of micro-management/supervisory control over all decisions, and the minions adapt by fighting over bullshit to "look good" in front of the micro-manager and ultimately get their way. Also, bike shedding (aka Parkinson's law of triviality) is a handy technique for concealing bad news.

Re: How to Pick Your Battles on a Software Team

#68
post #22

Honestly, if there are that many battles in a developer's day, it's a sign of mismanagement. Some bad company leaders think that the right thing to do is constantly have people negotiate over silly details.

> Honestly, if there are that many battles in a developer's day, it's a sign of mismanagement. Or a bad hire.

Maybe. The article outlines some behaviors that a good manager would immediately squash. Most people will conform themselves to the prevailing culture. When bad behavior is confronted honestly, squarely, and articulately by a manager, the offender usually conforms to the healthier cultural norms as articulated by the manager. Only if the bad behavior is confronted and still persists can you call it a truly bad hire. In which case it should be dealt with. No amount of productivity justifies being a jack-ass.

Re: How to Pick Your Battles on a Software Team

#69

The article strikes me as immature responses to immature behavior from others. It's a How-To for creating a caustic environment. Try this: def leadership(): while true: have_clear_goals() articulate_goals_clearly() There is other stuff to good management, sure. But this will go a long way. The section on "when someone makes it personal" really irks me. It should never be personal in a healthy organization. You can vi…

This!

I have observed at least 100 teams over the last 5 years. At any given time I'm coaching 4-10 teams. Every six months or so I get new teams.

The number one problem I see is a lack of clear consistent communication of leadership's intent and values.

Disclaimer: I might be hypersensitive to this because of my military experience.

Complex adaptive systems of humans are always searching for systems with which to signal fitness and interpret fitness signals from others. If leadership does not pound these into the organization from their unique vantage point then the system will adopt its own in the vacuum. Rarely does such a scenario turn out optimal for all participants (for reasons beyond the scope of this comment).

Re: How to Pick Your Battles on a Software Team

#70
People (and I include myself) are lazy and will present that laziness via technical arguments and pretending not to understand/remember what you are saying. It's the steady string of previously debunked straw-man arguments or orthogonal unrelated objections that is the tell tale signal. If you keep pushing you are just burning relationship currency.

If you dig in for every single little thing your going to be the bad guy org wide because people don't have enough context in most development workflows and aren't going to put in the effort to understand the technical or timeline issues at stake. You will just be the one who makes a fuss all the time. I've watch some solid people get pushed out due to this.

As long as the harm is minimal I'll point it out and let it slide if the objections go off the rails even if the cost to do it right/better is less than the value realized from doing it right/better. Discussion isn't free. When the cost of dragging the discussion out is commensurate to the harm or value realized then that is when I will tax both myself and others involved in the discussion to address it.

This is one reason to have these discussions before code is written and people are invested in not having to make changes. If you are brutal and break things down into small chunks delivered regularly the latitude for things to go sideways is reduced and discussion is more productive.

Post reply on HN