Pros
The people are great; sharp and social. Low-pressure 70% of the time. Good reputation with customers and brings in interesting projects. Steady work with competitive pay and good immediate management. Immediate management offers recognition and bonuses for good work; you'll feel appreciated. The chance to work on novel projects and do real algorithms work.
Cons
Our customers have low expectations, and so do we. The focus is always on the one next thing, never on creating something sustainable or lasting. Constant crisis mode is the norm. Serious cases of reinventing the wheel abound. Management is penny-wise, pound-foolish. IT is a joke and they buy inadequate hardware for their Ph.Ds and Engineers. Upper management is terrible at communication or appreciating the money we bring in. Last year after we exceeded our targets they effectively cut everyone's wages by 10%, stopped offering comp time and swapped to a terrible insurance company to save the company money. They don't seem to realize they compete for engineers with other software companies, not just the defense sector. You will end up doing work above your pay grade. Everything is constantly under-staffed, and they don't fire people who don't pull their weight. Your choices are watching a project fail or busting yourself to see it succeed in exchange for a pat on the back. Every promotion is simply a recognition of work someone is already doing. It does mean that if you want a promotion you can just start doing the job; in a couple of years the title change will probably happen. There is too little team lead and architecture experience to support the algorithm development. Most people have been at the company for less than 5 years. Office politics can get messy. It helps to have thick skin, a suspicious mind and a healthy ego.