Pros
Work life balance; rarely worked more than 40 hours a week unless a deadline/release was approaching. No dress code beyond not wearing shorts. Very smart and driven peers. Learned a lot from them. Hours weren't strict as long as you got there before 10am (although this is changing). Team lead was very technically adept, so they were able to keep our workload reasonable (pushed back hard on unfair business requests). Most of the people beyond my immediate peers were also very nice and helpful. The work was interesting; a year went by pretty quickly. Pay and benefits were competitive for my position. An extra week of pay and 2 weeks of severance when I was laid off.
Cons
False sense of standing within the company; my performance reviews were all outstanding and my monthly one on ones with my manager were all completely positive. We were working towards a path for me to move up to a Full Stack position and eventually Senior position when possible. Or so I thought; literally at random layoffs were announced and I was one of the lucky few that was chosen with no prior indication or warning. I was even told that it had nothing to do with my performance and it was simply a budget issue. Miscommunication/mismanagement of resources: A few of my peers who were laid off had literally just been hired about a month or 2 ago (after contracting for 9+ months). If layoffs were looming about, why give these people a position only to pull the rug from under them right after? Seems like a huge waste of time and resources for the company and individuals. The kicker is that some of these positions that were laid off were transferable to other teams; in fact some of the new listings I see on glassdoor for this company are for similar positions. So you let go people who were already vetted, and familiar with your code base to bring in new ones to do it all over again? The code bases between projects were largely similar, and transferring resources over presumably would've been no problem. Seems like a strange decision, but maybe there's a method to the madness. Lack of business requirements: After the initial release of our main project, there were plans for expansions that we dedicated our time and resources on. However, due to poorly defined requirements, about 2-3 of those planned expansions stalled or failed. If these expansions were needed and deadlines were agreed upon, why were the requirements not solidified? That's should be the first thing agreed upon! Again, a waste of time, money, and resources. Another strange experience was the planned addition of a new feature by a third party into our application; after spending weeks trying to get this feature implemented, some of my peers discovered the third party application providing this feature did not actually work as intended at all. It turned out the company was lying and their software didn't do much of anything. How was this third party company not researched and these features not vetted before committing resources and money to them? Who is driving these decisions? From what I understand, there is a possibility the layoffs are going to come in waves and there could be a few more underway. I would in all honesty find a more stable place to work if you value security at this moment in time (June 2018); no point in spending time and energy getting a position here if its possible they let you go a few months later completely through no fault of your own. At least for the low to mid level software development positions; I think that is how the layoffs were prioritized, since the positions laid off on my team were all the low and mid level people.