Pros
There are tons of opportunities to contribute. I'm pretty junior as developers go, but I've been involved heavily in creating the mobile web product, reengineering the checkout process, reorganizing the home page, and creating several features from scratch. Senior devs are good, and management within engineering is good. They take the time to partner with you, sit with you through code reviews, talk about business implications of features to excite you, and to generally show you the ropes of being a startup engineer. They encourage you to try out new technologies (Famo.us, Angular, Elastic Search) and bring them into the stack where appropriate. There are regular feedback sessions that align expectations. Dev team is fun. We play ping pong all the time and chill after work together. The CTO goes out of his way to get us toys (kegerator, xbox one, etc) for particularly hard pushes that impact the bottom line. Last point - the tech team seeks out best practices and does its best to implement them. We run on 2 week sprints and use Pivotal Tracker. We have retrospectives that genuinely improve our sprints as we move along. I feel like my suggestions are taken seriously.
Cons
Location is terrible - you'll need to have some form of transportation or be okay with 45 min of bussing around to get to the place. Consequently, food choices at lunch are limited, though there are a few healthy and tasty options around. Firing isn't always done the most diplomatic way. We've had to cut slack, but I'm not sure the way we did the cutting was the best. We hire Indian sub contractors to do some portions of our code base that aren't customer-facing. My biggest complain with our tech process is that we use these sub contractors - communicating with them can be hard, and even as a junior dev I can tell some of their code is wonky and hard-to-read. Their involvement is pretty limited, and I deal with there code spaghetti pretty rarely.