It is a problem if there is no communication. To bypass all formality only hides the real problem is not solving it. It is not easy to know who is right. That is part of my job when one person is in a fight with the rest of the team my job is to listen to everybody and help to get a decision thru. I have seen all combinations, the team is right the lone ranger wrong, the lone ranger is right and the team is wrong, all are right and one path needs to be decided, all are wrong and I help them to find a different solution.
> c) Those who see a bigger picture do not care to or cannot explain it and/or keep it a secret.
Again this happens and it is a big problem that needs to be addressed. To hide it doing things rogue stile only perpetuates the problem. Sometimes is better to get everything to a halt until information is shared than to tag along for years of painful fights.
> e) Software architects
Yes. I am one. And my main problem is the arrogance of other architects, not the managers, product owners or developers in the teams. :P
As greedo mentions in another reply to my points, you really can't have "lone rangers" on a team who do this without a valid excuse.
The point about architects was somewhat joking; of course there are good ones (such as yourself judging from your comments), but in my experience most of them are at best a useless burden and at worst an utterly destructive influence on teams.
There is no right and wrong. There are only opinions and stylistic preference. There are solutions that are better and there are ones that are worse. But when you black box it and look at it from the outside, it either works or it doesn't.
Everything is a spectrum, but there are also clear parts of the spectrum that contains death, and clear parts of the spectrum that are better than the others.
Works is not an acceptable standard. Imagine if we built bridges with the criteria that “well I crossed the river on it, so it works”. What tonnage can it support, how many years can it stay viable, does it fail gracefully if we drive something heavier than intended over it, what amount of wind can it take... none of those things are captured by “it works”.
Similarly for code. If your answer is “well something changed, so we need to refactor” or “well that wasn’t in the requirements so we can’t do that” then your solution didn’t work in the first place, because works implies scalability, extensibility, reliability etc.
Those are not style or opinion. Making anything “work” in the now is trivial. Building things that are not fragile to change and time is engineering.
My team just had an coworker leave for another team. This coworker was very smart, very hardworking, and very dedicated. But he continually chafed against any sort of documentation or communication. He also chafed against any established standards or policies; pretty much did what he wanted, and was never really called on the mat for these issues.
He got away with this because he was a "rockstar." He could solve some pretty hairy problems fairly quickly. But explaining these fixes to others was difficult for him, and many of his solutions were MacGyver-esqe. He had come from a small shop where he wore many hats; we're a large enterprise with lots of teams. This means that communication is probably the most vital skill for team success.
Since he didn't share or document his changes and fixes, the remaining team members are now left trying to divine what he did. While I blame him for a lot of this behavior, I primarily blame his manager who continually tolerated it. Ironically, this manager is shocked and confused as to why he lost his rockstar.
Someone will say "false dichotomy", to which I say, "maybe".
Undocumented code and decisions are just a more slowly accumulating cost, it is no less costly than bad or failing code.
This is a reason I love having outspoken and extroverted devs. The guys who love to talk so much that they will explain in extreme detail and at length.
I was reading through an old bug yesterday, and the guy who had done some work in that area had left a 5 paragraph explanation of what had gone wrong, what he thought may have caused it and some things he was planning on doing. Having that written down was invaluable when I got to the thing a year later.
Process rigour is not the goal. Communicating what is strange and different is. If you have guys who do that naturally, great. If not, you need some process.
In my experience, the devs that talk the most, know the least about how things actually work. They churn off trying to explain something and are either subtly or blatantly wrong, and you've got to reel them in before they get down the rabbit hole and misrepresent reality too badly. It can be catastrophic if they are interfacing with management or customers.
It seems to be a manifestation of the classic "baffle them with bullshit" strategy for dealing with ignorance or incompetence.
Coming up with innovative solutions to complex technical problems requires you to be in the weeds, and think non-linearly (e.g. using intuition); while communication requires abstraction to (preferably) only the most important elements, and linear composition of the ideas into speech or text.
You can make such actions visible (and hold people accountable after the fact), but blocking engineers from taking action is a no-no!
a) Arguments don’t work because team doesn’t listen and/or doesn’t want to change because they wish to stay in their comfort zone.
b) The responsible manager is incompetent and/or does not understand the things he/she’s responsible for and/or is a micromanager which kills any spontaneous action.
c) Those who see a bigger picture do not care to or cannot explain it and/or keep it a secret.
d) Sometimes the best option is to just do it (and improve it later) instead of going through a slow and energy consuming process of gathering consent etc.
e) Software architects