Avoiding traps in software development with systems thinking
medium.com
medium.com
For example: http://www.theeffectiveengineer.com/blog/what-makes-a-good-e...
1. Optimize for iteration speed.
2. Push relentlessly toward automation.
3. Build the right software abstractions.
4. Develop a focus on high code quality with code reviews.
5. Maintain a respectful work environment.
6. Build shared ownership of code.
7. Invest in automated testing. ...
Author of that blog post also wrote excellent book on that subject.
Software development seldom occurs in a vacuum and no technical solutions exist to problems that are caused by stakeholders having contradicting priorities and/or bad incentives.
You could take 100 teams that are experiencing this kind of dysfunction and show each member of team an article like this. Most individual team members would easily be able to understand it. Yet in the aggregate they seem unable to do anything about it.
It could be taking a lesson from somewhere else and mis-applying it. It could be he doesn't care. Also -- and this is wild -- it could be the best behavior given the circumstances and our OP just isn't aware of all of the extenuating circumstances.
Many times teams/orgs in bad situations are filled with intelligent people acting as wisely as possible, within a narrow scope. It's only at the macro level, when you add it all up, that it becomes totally whacked.
Building something from nothing is tough, and so is turning an elite team into multiple elite teams. It strikes me as the latter gets less focus in SV since it is much less frequent and goes against the entrepreneurial grain. It’s easier to bash large companies than to think about how to actually build one.
I recognize that I’m likely missing relevant factors, but some of the key problems seem to be a flat org, no VP of engineering, and no encouragement of cross team work.
When managing people, you really need to meet with more than one level below you. In a flat org, with 20 people reporting to the CEO and 40 people reporting to each of them, there is no way for the CEO to meet with all 800 people. The CEO just ends up having to blindly trust his or her direct reports that everything is good. A few bad ones can result in large sections of the company rotting from within.
Promoting cross team collaboration is tough. A company needs to emphasize this in how it promotes / rewards people and crafts the org chart. Easier said than done, but no VP of Engineering and directors promoting loyalists with no emphasis on helping other teams doesn’t help. Having multiple directors involved in promotions may help.
I like the CEO and think that he does care. He may be able to fix things, but unfortunately I don’t see it happening. I am tired of hearing everyone complain and find myself getting angry at nice people that I like due to bad incentives. My only option is to vote with my feet. He can trust his ‘Generals’ but thankfully this isn’t the military and I can leave. The grass may or may not be greener, but I’d rather take a chance on change than the status quo. Putting in my notice was an amazing relief.
No chance of a coup?
"automation" can be a trap that leads to band-aiding core problems; rather than figuring out why your application has so many dependencies on the operating system and makes deployment so complex, you might try to hide the mess under Docker. Now you have the original problems, plus a big dependency on a lot of complexity.
etc, etc.