1) Code review and code style is not strongly enforced which sometimes can cause trouble or make it difficult to understand legacy code
2) Test in production culture -> there is no QA at Uber so everyone is QA. You are responsible for your own bug but many times people are not careful enough and cause outages in production
3) Technical debts
4) Sometimes people get fired simply because s/he isn't in good relationship with direct manager