Great Place for First Job Out of College, but You Hit Walls
Pros
If you are hard-working, you do get promoted here. You need to be ambitious and willing to take on more work than expected if you want to get opportunities to work on different projects. Work life balance is great (if you do the bare minimum, see cons below). The pay was decent (low considering the cost of living in CA), and the benefits are okay. There are a few senior-level software developers there that have a passion for what they do, and you can learn a lot from them, but the ones with talent, you need to seek them out. I got lucky and was able to get on several different projects that allowed me to gain more experience and become more marketable for searching for other software engineering jobs. For a while, it kept things interesting. The 9/80 schedule is nice and there is some flexibility in your start time as well, which you cannot argue that.
Cons
There are far more terrible senior software developers there than there are good. You cannot look at the current code base to see how things should be done. You will see plenty of examples of how poorly something can be implemented, which helps absolutely nobody. "But it works!" ... yeah ... about 95% of the time. The other 5% of the time it falls apart, and the 95% of the time it is up, it uses astronomically more CPU and RAM than should be necessary to accomplish the same task. The excuse is that the logic is a small piece of functionality, or it does not get used often enough, but the problem is, this mentality exists in almost virtually all code and it compounds into a mess. You need to spend a lot of time researching and reading material on your own time in order to actually learn how to do things the correct way; otherwise, you will wind up hurting your chances to move on to another software company. A lot of the times you are thrown into a project and not given the proper training nor the time to do the job properly (going back to research and reading on your own time). The company and senior management loves people that get the job done the fastest, even when the job is done poorly and inevitably requires a complete redesign and code refactoring. There are too few good, passionate senior-level software developers, and you will likely have to seek them out if you want to see how something should be done. It is highly probable you will only work with them on one or two projects, then go your separate ways and be apart for a long time. It took a few years before I got to start working on a project with one of them. This means that, inevitably, you will hit a wall where you are no longer learning anything new, but are stuck fixing other developer's terrible, terrible code to get things working efficiently and properly. Every great senior software developer there spends most of their time fixing garbage. The only exception is when you are starting a project on your own time or from scratch. The first part of my career I had plenty of opportunities to work on my own projects or start new projects (and some of those are terrible because I was forced to use a design that was inherently flawed, even when I brought up what issues it would cause). The last few months there, I was doing nothing but fixing other developer's poorly written code. If you hit that point, it is time to bail. You will not learn anything valuable, and all you will accomplish is falling further behind in your career, which would make looking for a job outside of defense more difficult.