Pros
Most people working on the projects are enthusiastic and want to do good work. Medical insurance and stock purchase plan are great benefits. Plenty of opportunities to take on additional work/stand out.
Cons
The particular branch I worked at used to be a private company where the owner typically would give raises out based mostly on hours in the office. This has directly translated over into the current culture, and I think that a 12 hour day was more common than a 8 hour day. There are some nice benefits like free pop, coffee, and fruit and compensation is ok in a vacuum; but for the amount of work that is expected, it becomes a lot less attractive. Management also has a problem identifying how much work can go into a release and will fight tooth and nail to keep as many features in a release as humanly possible without consideration for work life balance of the developers. Any time reserved for contingency, refactoring, and defect repair are typically turned into feature time approximately one month before the scheduled final release date so that everything can get done. I've sat in large meetings until 7 or 8 at night because the dev team didn't think a feature could be completed in time, but management refused to cut any other features out of the release. Compensation-wise, there is limited flexibility at best. Negotiating more vacation is off the table and reviews go in yearly cycles, so if you've been doing extra work and miss out on the promotion/raise you want you are SoL for the entire next year. Expect an inflation-adjustment raise at best. Finally, the code base is treated like its a distributed, micro-service focused system when in reality its just a monolith with extra steps. Any small change could blow up the entire application without notice and the dated design is mostly a product of taking the word of every single small government agency as gospel. This creates conflicting designs, confusing business logic, and an inconsistent experience across the entire application.