Pros
Free coffee, free pop, good camaraderie within teams, some good people are still working there.
Cons
Management by decree. The management team over me changed, and they didn't want to hear about the previous regime. Those of us who had been through a rough time were not given any credit for hanging in. Some small improvements in morale came - and then came employee evaluation time. The management had been told that they were too generous in evaluating us - so there was evaluation deflation. Any small mistake was turned into an excuse to lower our raise and bonus. Attacking symptoms - the management went after any slip ups like they were intentional attempts to sabotage the company. When extra hours were put in debugging and solving problems, that was expected behaviour. But any attempt to change the processes so that the mistake *couldn't* happen again was treated as "adding risk". Minimal Unit Testing - due to the design of the product we were working with, unit testing was not feasible (lots of generated code) so the unit testing was done by the customers after release. Quality has been abysmal and management has not been able to drive quality by using "agile"/"scrum" while ignoring root causes of the quality issue. Morale / turnover: at this point, enough good people have left that the ones that remain are grimly holding on while in many cases updating their resumes. In a technical job evaluation, I was told that I was to be a member of an orchestra - following the conductor's lead. When I suggested the manager meant a jazz ensemble, where I would have some freedom to improvise within the structure of the requirements, the manager explicitly said no, that freedom had to be stamped out so that the manager could have predictability and lowered risk. My response to that is now: lowered risk of success, lowered risk of having engaged employees, lowered risk of innovation, certainty of abysmal performance. Have fun with that!