Introduction / Motivation
I get several questions from people in local meetups or conferences about issues they are facing in the company they work. 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 had the same feeling a couple ( or more 🙂 ) times in my career.
I have thought about it a lot and I spent many working hours and efforts trying to do the same but I 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 company types. 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 do 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 civilizations, that we value more individual contributions than team contributions. In the extremely competitive world we are living how many times have you heard of exceptional teams. We all know about super-heroes, gurus, 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 to work in pairs to achieve your goals then you might be in the wrong place. Don’t confuse what I’m telling with the fact that people are willing to answer a question or help you for 10-15′ finding the solution of a particular problem that you are stuck on it for 2 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 basket-ball. Great players shine in great teams. Put Messi in a below average team and let’s see how well he will be performing. 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 shit
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 code-base : 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 gives a shit 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 again the same topic in a few months/years! No matter what’s the root cause, the result is the same. Their asset ( software , source code ) 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 – also gave 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 on a company that belong to one or both of the above categories you should step back and thing very seriously about your future. These companies are harmful for your career and your skills. They force you to work in silos and / 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 know 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!