Background:
I've worked in an Indian startup where the engineering VP was directly in control of his team of 11 members. Even if he appointed team leads, they never had any decision-making capability or real responsibility as a lead. He used to give people "excellent" ratings for more than a year, and when he wanted to fire the same person, he'd give them one bad rating and put them on a performance improvement plan and fire them. He was less qualified than his subordinates and didn't know good software practices. He didn't like it when the product team tried poking around about why our implementation was taking 9 months, when it should've taken 3 months, and he would hide details from them. Toxic culture. I left.
Now I've been hired as a consultant by a company that's almost gotten out of startup mode and has a proven product. The problem is, the manager whom I report to, is similar to the earlier VP. He does not know good software practices like design patterns. Code is written haphazardly. There are barely any test cases written. No code reviews, so developers end up writing code where a single function can span 400 lines and have variable names like "lki". Instead of using the IDE, they still run programs from the commandline. The manager takes all decisions. His team leads do not know full details about the work they themselves do (even though they've been there for 5+ years). He expects everyone to follow only what he says. This company is very particular about rules and audits etc. This is what made me think that things would be well organized. But seeing the code, I see it's a nightmare.
Before joining, I had mentioned that I could help with better software practices, and he agreed to it. But now he says I'll be given that chance "later on". Right now, he just wants me to use the code the way it is, because they have deadlines to meet. The product is scheduled for delivery a year later.
My questions:
Is it like this in most companies? Where the "team lead" position is given just for the namesake of it, and the managers do not invest any effort in ensuring that the employee learns and becomes a better software engineer or manager? In such companies (where the team leads are just puppets and the managers themselves are unaware of good software practices), is the promise of "later on", just a carrot dangling on a stick?
I'm asking because I need to figure out whether to stick around and "just get work done", irrespective of how the code is structured, or whether I could hope to look for companies where things are better implemented and I have a chance to grow in terms of knowledge and managerial skills.