Pros
- relatively nice campus; good, convenient location - good overall compensation and benefits - hard work somewhat recognized and even rewarded - work-life balance seems to be getting better; flexible working hours - overall friendly environment, with good collaboration among the teams and not much politics at the level of individual contributors - some very smart people and sometimes quite interesting things to work on (scalability, data mining, search, ...) - experience with the entire dev. cycle - from requirements to code release (see cons, though) - empowered to address directly most of the project-related issues (see cons, though) - some helpful processes in place (see cons, though)
Cons
- upper management does not have good understanding of technology and software development in particular - thus not really able/willing to fully commit to the related long-term investments - too formalized performance evaluation process - probably in attempt to make it accurate and unbiased, even at the cost of depriving it of the real substance - being a large and not-so-attractive company anymore, the quality of employees can sometimes make a collaboration more challenging and inefficient - project planning and task scheduling can make one feel just as a relatively expensive piece of equipment that needs to be "optimally" deployed, and immediate managers don't pay enough attention to the individual needs and strengths; further on, the excessive movement from one software task/module to another sometimes leaves no one directly in charge of the software quality and its conceptual/architectural integrity, and can make developers feel too distanced from the results of their work, and consequently less passionate and responsible for the future of that software - actual software development process is too much controlled by project managers, with a tendency to micromanage and put a premium on hitting sometimes arbitrary and/or inconsequential deadlines over the engineering concerns - very feature-centric and fragmented software development, with insufficient attention to the inherent software development issues, and lacking the adequate processes and resources for the general software improvements - from simple refactoring to infrastructure upgrades - being empowered as an individual contributor is a mixed blessing - sometimes there is too much of "distractions" from getting the most important things done, and lack of support from a software manager with enough clout, will and attention to step in and argue for your side when really needed - some of the cons mentioned contribute to the insufficient software quality, making the software hard to fix, maintain and evolve, with too much time spent on dealing with production issues - and that often leads to a vicious cycle of not having enough time to spend on vital improvements and technology upgrades - lower management, although technically competent, mostly lacks a clout and/or backbone to make significant changes to the prevailing software development culture - in spite of opportunities to work on some interesting things, the cons mentioned make the job of software developer less satisfying and impede the professional growth as well