Looks like a lot but I think most of it is centered around some core issues which can be fixed with some small shifts in approach, rather than massive company-wide red flags.
The product is burdened by a sprawling legacy codebase and some poor product and technical design decisions. This is due to its development largely being driven by making changes because a customer asked for it and would likely pay for it and thus it would get rushed out, rather than taking the necessary time in building a product that works brilliantly, benefits all customers long-term, and can be customised by the customer on an individual basis.
In many ways it's clear that we are all pulling together but in there is far too much siloing in terms of what we do, especially around product improvement which is somewhat "exclusive" in that only a small number of people get a chance to innovate and be involved with product design and development (most just maintain and build more and more on top of the legacy codebase) and this can make it hard for developers to feel like they are truly part of a growing, improving product. There is also no visible management of this process - it all takes place behind closed doors.
More transparency and involvement with regards to strategy would go a long way as would dramatic improvements in internal communication - more often than not developers will find themselves completely in the dark about what's going on until the very last minute, and generally aren't able to have an input until it's too late.
Staff training is quite lacklustre, especially how we handle new developers. Having a recruitment strategy of hiring inexperienced junior developers who struggle to get to grips with our code, and having no proper training program is a serious waste of time and it can take ages for a developer to get to the point where they can truly contribute and may leave some feeling overwhelmed and unsupported.
Staff turnover has dramatically increased in the last couple of years, which is alarming.
Hiring young "hot-shot" talent who have great technical skills for us but easily move on when they get bored of fighting our codebase and legacy systems (and possibly get paid more) means that we keep getting and losing good talent rather than establishing top-notch and long-serving staff members on the engineering side. This might have something to do with with how career progression beyond Senior Software Engineer has very little upward room and there are a lot of roadblocks that may not be possible to get past.
I feel that we don't do enough to harness and encourage the potential and talents of many of our staff members.
Finally, I feel that the directors have too many things on their plates - they're trying their best but it's hard to do it all. The lack of dozens of middle managers is not a bad thing - flat structure actually is a pro here - but delegated responsibility and trusting in your experienced employees is important and could be better.