I have worked as a consultant for 3 years, and a few more years before that as developer, tech lead and team lead on product companies. Like anyone else that achieves seniority as a developer, at some point I realized that technology is not the problem, the problem is people. Dealing with people is difficult, it requires time, and sometimes there is nothing you can do about it. As it happens, I like to read (history is fascinating) and to keep on top of news, and I can see the same issue everywhere. This is not something that is unique to our profession.
One of the things I have realized with time, common to nearly everyone, is that, unless there is a massive clear benefit that they see, external change is something that gets resisted. Is it maybe because we humans developed long ago a bias against change? Is it because when change is external is a loss of agency that we dislike? (certainly I am on that camp).
Whatever the reason, this has been my experience: the more a change is forced, the more opposition it gets. Conversely, the smoother a change is, the less resistance you get.
This is also true (within my experience): the more a change removes the perceived benefits of the current system, the more opposed the change will be. Conversely, the more the change removes the perceived drawbacks of the current system, the more alluring it becomes.
Finally, some people will be entrenched on their views, maybe because previous bad experiences, or because what they do is part of how they see themselves fit on their world view.
As a consultant … well, as a worker of any type, you need to understand the above. Furthermore, you need to understand for every person on the project where do they sit on these different scales. And based on that how you approach each person must differ. Not only that, but you need to understand and help control the dynamics within the team/company, so the change can be brought forward. As an example, having a devout convert trying to preach to their reluctant co-workers tends to create friction … I know because I have been one.
Sometimes bringing the change is easy, and things move smoothly. Sometimes it is a grind that could take months. You need to be prepared for the latter, while hoping for the former. You also need to be prepared at some point to stop an engagement if it is clear that the change cannot be brought forward. The latest is usually people at higher levels that don’t want to change, don’t want to hear you out. Sometimes you could get lucky and an unforeseen event beyond your control forces to bring the change or provides the new set of data points that you needed to push the change ahead. But don’t rely on those (in fact, hope those don’t come often, don’t want more lockdowns)
Some examples of people that could/have caused issues on my past:
- The developers that believe that testing is for the testers, they are above that.
- The operations people that believe automation or cloud will kill their jobs.
- The person that is not bothered by production issues, because means more money due to out of hours support.
On all cases your job is to shift their beliefs and attitudes (sometimes is showing data, sometimes alleviating fears), so bringing the change becomes easier. This is hard, this usually takes time, this is what is difficult in software development (well, everywhere).
Having said all the above, I am still learning. So much to be learn on human interaction and behaviour. So much to be learn in how to apply that knowledge.