Pros
I was at the company during a critical turning point. It went from a growing startup to a flourishing, stable company. In that time, the R&D department (and maybe others, but I don't know) changed a lot. Here are the consistent pros that I saw: * There's a feeling of making a difference and a strong mission to contribute. It's an environment you can be proud to be a part of. * I trust the C-level executives. They make a point of making sure that every one can see why they make the decisions they do. They don't have offices, just desks in the bullpen like the rest (even after we all went mostly remote) * There are never a shortage of projects * The company takes the bi-annual hackathons seriously and they've led to some significant changes, so if you have an idea, you can be heard * Thanks to the explosion of growth, there's a lot of leniency given to new hires and (again, in the R&D departments) a culture of teaching and mentoring in regards to coding styles and development etiquette. * There are bi-annual cultural surveys and the results are taken in and attempts are made to address short-comings, even if they aren't always successful. There's a clear attempt to iterate positively toward being the best company it can be. * The company is strong and I don't see it failing any time soon.
Cons
Overall, the company is pretty great, but there are some cons. Everything I say here is based on my experience in R&D. I can't say anything about any of the other departments. * The pay scale is a bit on the lower end. Not only are raises entirely based on merit (not sure if that's a positive or negative?), but they purposefully set the barrier for bonuses very high and each year I worked there, they increased it. My last two years, we only barely hit the threshold at the end of Q4. I'm not sure how much higher they can go before we loose them completely. * Not all of the managers should necessarily be managers. They like to promote from within, which is great, but just because a person can code doesn't mean that they should manage. This is particularly true for the direct superiors. * While there is a learning culture, there isn't a great structure for reviews and professional development. There's only one official review a year. Your manager might do more, but it's certainly not guaranteed (see previous point). This can make it difficult to not only discover your weak points so you can work on them, but also gauge your development * Particularly in the data areas, there isn't yet a culture of rigorous code testing. Officially, new code needs to be reviewed before it can be pushed to the master branch, but more often than not, there isn't time. While there's testing for whether what you've written will break the build, it's not for things like integrations and data management. If you don't think to add your own failsafes, they won't exist. This is something that is actively trying to be improved upon, but historically, progress toward true data quality control has been very slow and difficult to adopt. As is it stood when I left, clients were as likely to find issues as the programmer. * While the departments are growing, it seems like we're hiring to sustain almost as much as we're hiring for new positions. Most people have been in the company for less than a year and a good number seem to leave after a couple of years or so. This is slowly changing, but department retention feels very low, even from millennials' standards. It has slowed a bit since the start of the Great Resignation, but it still felt like there was someone leaving every month. It made it difficult to trust that someone has your back if you ever need help with legacy code or when you're out of office and something blows up. It has encouraged a culture of good documentation, but it's not the same as knowing that your team is stable even as it grows.