I met Peter Griess last night and heard him talk about his career. Even though he still has plenty of years ahead of him, he has already worked for NetApp, Yahoo, and now Facebook. He was part of a nine-person startup that worked on some interesting social email apps that eventually got acquired by Yahoo. Along his career he has seen very different kinds of cultures in these various software engineering departments, and as I was listening to his talk, I thought about the many software companies that I have covered over the years.
I would break them down into three different kinds of cultures (the names are my own construct):
Why work for them: Not all departments are as evil as others. For example, being a data scientist at IBM right now is probably one of the best gigs going. If you can deal with the silos and the hierarchies, then this is a good place to learn some solid skills. Griess told me there is another reason too: "You can go really deep on a specific project. Not all projects lend themselves to rapid iteration: those with deep technical challenges often require a fair amount of thought and supporting infrastructure (which often must be built specially) before they will work at all."
Why work for them: If you want to get experience with an international company and find out how to support legacy products, these guys are the places to be. If you want lots of exposure to mergers and acquisitions, they have the cash. If you want your own office and peace and quiet while you code, this is the place for you.
Why work for them: Obviously, most of you are probably focused on this type of company right now, or want to start one yourself. But you have to have the fortitude to roll with the punches and be able to adapt to the constant flux of changes.
I'd love to hear from you about your own experiences in different engineering departments, and if you think there are subspecies to the three that I mentioned.