Pros
You don't have to know a tech stack to work with it, so it's a great resume-builder and skill-broadening environment. There is almost certainly a developer in the company that can help answer any conceivable development question, if you seek them out and they are responsive.
Cons
There is no individual accountability; the attitude is that we're all friends and can trust each other, so there's no process in place for conflict. HR is nonexistent. Very strong self advocacy is absolutely necessary to do well here. Management is spread too thin to proactively or even reactively attend to employees' wellbeing, such as an uneven or too heavy workload, difficulties working with clients and/or other developers, feeling unwelcome or harrassed in the workplace, etc. Microaggressions are not dealt with. No clients are turned down for any reason. Many clients are difficult and some are outright rude and dismissive to the developers. There is no project management, so developers, who are not trained to deal with clients directly, suffer the treatment with no recourse. Many employees resort to working overtime when confronted with unrealistic expectations, because they are not trained to deal with clients and are told only to make them happy. Management will not stand up for employees against a client. Salaries are inconsistent across experience level, tech stack, tenure. There is no salary transparency. It is a "flat" organization, but that doesn't mean individual developers aren't treated and compensated very differently. Junior developers are not given any kind of structured mentorship and the seniors surrounding them are not given time or resources to mentor them, leaving the juniors at the mercy of the individual project, which may or may not have quality code or best practices to learn from. Code quality is inconsistent. Time estimates given by management are almost always low, and deadlines and scopes tend to creep unless the developers on the project happen to be good at deflecting such things. There is almost never budget for testing or QA, and teams are frequently scrambling just to get projects done. There is no formal communication between teams and no processes to ensure we don't make the same mistake more than once across many teams. Small projects frequently change hands with no documentation or recorded institutional knowledge.