Scott Nimrod raised a point with which most software professionals have at least some familiarity:
I have yet to join a company where developers themselves actually demonstrate agile behavior.@mfeathers @cleancoders @raelyard @jezhumble— Scott Nimrod (@Bizmonger) February 23, 2016
Though it seems much of the world claims to be Agile, Scott’s right – really practicing the tenets of favoring collaboration over negotiation, change over plan, individuals and interactions of processes and tools is rare in my experience. It’s easy to get caught up in the whirlwind of tools and processes and the daily grind and forget that we are working in human businesses for the purpose of enhancing human existence.
In response to my assertion that there are places one just doesn’t belong and that we are better served sometimes to sever ties, Scott asked:
@raelyard @mfeathers @cleancoders @jezhumble What's the difference between not fitting in versus being an agent of change?
— Scott Nimrod (@Bizmonger) February 23, 2016
It’s an interesting and difficult question.
I object to the use here of the word “change”. It’s an inconsequential nit to pick, but worth mentioning, that change doesn’t necessarily mean improvement. If someone tells me something would change my life, I often respond with something like “so would a debilitating disease.” I’d like to rephrase the question as “By what criteria can I measure a situation to determine if it’s something that can be improved and if I want to be an agent of improvement?”
If you find yourself in a difficult situation with a team seeming unwilling to improve, how do you decide whether it’s possible to fix the situation? How do you decide if trying would be a waste of your time?
Often in sports, exceptional and talented players experience being a part of a losing team. There are always people thinking such players need to show their dedication to winning by finding a way to play with a more successful team. This assumes winning is the highest goal in an endeavor, an assumption worth questioning. Even if winning is the ultimate in success as an athlete, the position that getting there via the easy path of joining an already successful enterprise overlooks something: the reward of improvement.
It is rewarding and fulfilling and awesome to take a suboptimal (and potentially bad) situation and make it better. Being the/an agent of improvement in a turnaround making lives better might be the best opportunity we have to find fulfillment and joy. This should not be dismissed.
Still, toiling in futility on a dead-end project going nowhere with a group of developers, managers, and other staff unwilling to move in a more positive direction is life-sapping and will-destroying. I wrote a post for Simple Programmer about the importance of doing the things in your life that build you up, enhance your energy, and make you feel alive. The corollary is also true: You need to avoid things that make you feel weak, that drain your energy, that make you feel less human.
Here are some thoughts about questions you can ask yourself to determine if you can help turn around an organization or if you are better off moving on:
- Do you even like these people?
- Do you have a role that will enable being an agent of improvement?
- Is the domain interesting?
- When you speak with team members, how do you feel?
Do you even like these people?
If you find that being around the people with which you are working is an exercise in enduring something unpleasant, it’s not a good place for you. Even in an exciting domain and with the potential you could have an impact on making things better, you can do better. It may not be possible to have the impact you want if you’re not even sure you want to make life better for the people around you. You need to like them to be in a positive situation.
Do you have a role that will enable being an agent of improvement?
If your job is to sit in a cubicle and bang out code, you are able to do the best you can with that code. You can practice Test-Driven Development and set a shining example of doing things that right way. This can have an impact, but if you aren’t able to have conversations with other team members and help them to grow, if there aren’t opportunities to review and share why you’ve made the choices you have, your efforts are likely to unnoticed. If you’re not able to talk about why to make improvements, chances are you should move on.
Is the domain interesting?
For a fun problem worth the work, the pain of a less-than-ideal team can be diminished. If this is not the case and you’re grinding away on something like Facebook for Ferrets, you need to really like the team and feel empowered to make an impact to make it worthwhile.
When you speak with team members, how do you feel?
Programmers often think they’re empirical machines with an ability to be objective in every situation. This ludicrous notion is, of course, false. Developer are no less human than anyone else and emotion matters in our every action and every decision. Get in touch with your feelings, young Padawan. The best indicator you have for how things are going is how you feel. Does interaction with this team bring you a sense of optimism, or one of impending doom?
Coming to a conclusion
If you find any of the above things are not working in favor of your situation, I advise you to seriously consider cutting bait and finding a better way to spend your time. If, on the other hand, you have genuine good will toward the people in the group and you think you can make an impact, it is often worth giving it a chance and seeing if it can get better. Remember that only you can decide if a situation is right for you and if the reward of your efforts will be worth the frustration. Also remember that you are not always the beacon of virtue and there are times when you have something to learn from other team members as well.