I get several questions from people in local meetups or conferences about issues they are facing in the company they work at. I usually give talks about development practices and there are always some fellow developers who agree on what I’m telling them, but they find it very difficult to apply the ideas in their working environment. I have had the same feelings a couple (or more) times in my career.
I have thought about it a lot and I spent many working hours and a lot of effort trying to do the same, but failed. Then I realized that it’s not me who’s the root problem but the company itself. It turns out that these companies have similar characteristics, so I decided to write this quick post to help others save their energy and make better decisions without waiting for a long time. I’m talking only about software companies but maybe similar concepts apply to other types of companies. I grouped bad company smells in two major categories:
Team Spirit? What’s That?
I don’t think you will ever find a company that is not promoting team spirit, collaboration, and all these cool and sexy words, but how many really care about teams? How many software companies have a team culture? How many of the so-called “agile” companies have strong collaboration, self-motivated, and self-organized teams that work as a unit? The truth is, especially in western cultures, that we value more individual contributions than team contributions. In the extremely competitive world we are living in, how many times have you heard of exceptional teams? We all know about super-heroes, gurus, and experts, but how many such “teams” do you know?
Many software companies are not an exception to this rule. If you find yourself working at a place where you don’t feel comfortable working in pairs to achieve your goals then you might be in the wrong place. Don’t confuse what I’m saying with the fact that people are willing to answer a question or help you for 10-15 minutes finding the solution of a particular problem that you've been stuck on for two days. That’s good but not as good as team spirit. If individual performance has more weight than team excellence then, again, something’s wrong. Yes, you do need to evaluate people to make sure that they evolve within the team, but if you evaluate ONLY individual performance then nobody will ever bet on team spirit anymore. It’s like soccer or basketball. Great players shine in great teams. Put Messi in a below average team and let’s see how well he will perform. One more clarification: Co-location is completely different than collaboration. I’ve seen and worked with distributed teams that act as a unit and perform much much better than collocated teams.
Quality and Technical Debt – No Time for This
It’s very sad that there are still (many) companies out there that do not realize the importance of software quality and the monster hidden in the codebase: Technical Debt. If you never hear terms or you don’t apply practices like “code reviews”, “technical debt”, “continuous inspection”, “code quality” in your daily development activities then it’s more than obvious that nobody cares about them. These companies are extremely dangerous because they completely ignore them. I doubt about their long-liveliness. There are also some others who “realize” their value but they don’t have time to apply them before they have more important things to do. Yeah, let’s discuss the same topic in a few months or years! No matter what the root cause, the result is always the same. Their assets (software , source code, etc.) is so diseased that it’s going to be very hard to get it back to a healthy state. I have written several articles about technical debt and code quality – as well as given numerous talks – but this topic is beyond the scope of this post. If you want you can have a look here or here.
If you think you are working for a company that belongs to one or both of the above categories you should step back and think very seriously about your future. These companies are harmful for your career and your skills. They force you to work in silos or they force you to keep writing crappy code. Clearly you are not on they right track. Happily, our industry provides so many opportunities so there’s no excuse that you can’t find another job. Do it now before it’s too late. Stop wasting your energy on things that do not advance your career and stop waiting for these companies.
I have warned you! The choice is yours!