I've left Q a while back now and have been working at one of the silicon valley superstars for a while now. In Q I was a software engineer doing mobile firmware in the superstar company I do software engineering in the backend and I'm on the younger end of the age/career maturity spectrum. Based on my empirical observations below is a list of why Q will just decline/shrink steadily and become a new failure tech company.
1) There is no such thing as code reviews. This is such a joke, people can just submit code without any review. And what's worse there is no company-wide coding/readability standards, not even incremental readability. The result is simple, new people take forever to ramp up on written code and the overall system; productivity is at rock bottom.
2) No test automation. This is another joke, there is no unit test or e2e testing standards, every team has some battery of tests that won't capture most if any bugs/issues that take forever to run and take switching back and forth between IDEs, languages, MATLAB, etc. To test what you've done is an enormous pain. Coupled with no code-reviews this results in the HEAD of a codebase being at a very unstable state. Every time a new release is needed some point in history needs to be vetted for days before it can be released. And even so the customers will find stuff that weren't identified in tests
3) No centralised issue/feature request/bug tracking. There is JIRA I guess, but if nobody in the team cares about what's in there for their team, it doesn't make a difference.
4) Algorithm development is at a complete amateur level. There is input data, there is an expected output. An algorithm at Q is defined as an aggregation of hacks tailored for specific I/O pairs. Nobody takes the time to acquire a holistic view of the big picture and create a generalized solution to an algorithmic problem. Hacks for specific situations pile up, making onboarding of new team members difficult if not impossible and even worse people get out-of-sync with what's going on in the overall team, and turn into isolated islands that have no idea of the bigger picture. Over time team members turn into new hires. The bigger the project gets, the worse this situation becomes which is very natural as it cannot scale like this.
5) Staffing. Every team is bloated with a large number of managers with near zero time-management abilities. In fact in our project there were more managers than developers doing the work. I've personally attended some of their meetings on a need basis. And my observation is that whatever state was before a meeting prevails after the meeting. These people are just burning time at high pay grades adding little to no value to the company.
6) Unless your title is Staff or above, your opinion literally just gets ignored. I was actually an exception to this earning respect for opinion earlier on, but then major suggestions about enforcing code cleanliness, testing standards, documentation, etc were just ignored in favor of getting some solution out that works at a basic level.
7) Very poor segmentation of workload. Projects never start with defined roles to specific managers/teams. Everybody has their hand in everything. I personally was doing work for 2 other teams other than my own. Some managers are like zombies just calling people, attending meetings, arranging demos, etc.
In summary, team/project/people management is at a rock bottom. Somehow completely undeserving people have been promoted to manager/director/VP positions and the Peter principle is at its worst in Q. I'm totally astounded that this company has achieved the success that it did which peaked a few years back.
A second point is with all high performers getting lost to attrition, there is an absolute 0 chance of fixing things now.