Programmers throughout the world keep wondering why some companies are such great places to work & other ones are like local embassies of hell on earth. Obviously the answer isn't easy & trivialising it with unproven, populistic assumptions is just oversimplifying whole stuff. Let me deal with the most common ones first:

  • company doesn't have to be a pure software house to rock - an internet retailer, travel agency or insurance company can all be great places to work for programmers
  • you can learn a lot & do interesting stuff in both: 5 ppl large start-ups & multi-national corporations; scale & company's culture can both have serious impact, but it's always people you coop with that build the work environment
  • it's possible to do memorable things & solutions that smash markets using any kind of methodology (well, it helps if fits the project context...) & tools that are not the last week beta version of the sexiest JavaScript framework on the market

So, where's the catch?

What's the most important, missing factor then? To give you the answer I need to elaborate a little bit more. First, let me introduce a very simple classification of companies that do in-house software development:

  1. [Symbionts] - companies where people (not just top mgmt) understand the role of IT in their business (how it impacts / drives it, what kind of additional abilities it provides, why & when it may be an obstacle, how it can bring the competitive advantage) - they usually already treat (or are very close to ...) IT as part of their core domain. Examples?

    • companies that sell / provide their services on-line; especially the ones that target individual consumers as their main client segment
  2. [Skeptics] - companies that have serious spendings on in-house software dev, but they still consider it an addition: an option, something that has to be done because competitors do it as well & maybe one day something good will come out of it. People in these companies rarely can even imagine IT as part of their core domain. Examples?

    • companies that sell their products in a traditional way (PoS), but are adopting on-line sales as an alternative approach; especially if they deal with more conservative customers (not that eager to do business on-line) or they already have a strong market share they'd rather defend in a risk-averse way
  3. [Conveyor belts] - companies that do in-house development even if there are clear indications that it's not (& can't or shouldn't be) aligned with their core domain at all - maybe it was due TCO calculation, maybe because of some historical reasons. But in the end they still do it. Examples?

    • companies that require IT landscape overhaul, can't spend much enough to build a capabilities (& manpower) internally, but refuse to buy / outsource it

I'll skip the last group, because I don't think it really requires any comment ("run! Run! RUN!") so let me focus on first two. Why is it that great to work in Symbiont type of company & what are Skeptics lacking?

@ Symbionts ...

  • people understand that actual success (has to be measurable!) of software product has real impact on company's future; that the key of software they do is not to meet requirements written in a document, but add more value to the end-users & customers - by doing something faster, better, easier, more convenient

  • business people more eagerly cooperate with development teams - because they see & understand (even if it's the high level understanding) how developed functionality translates on business reality - services they provide, sales of boxed of-the-shelf products, etc.

  • both business & IT people share SAME targets & goals - they play within the same team & one group can't succeed without the other contributing; business people try to express the unsatisfied needs & available activity niches while IT people strive to map those into palette of capabilities of modern technology

@ Skeptics ...

  • there's a deal-breaking bareer of trust: IT is perceived as a company-within-company that focuses on getting sign-offs, not giving an-f-word afterwards & always doing their stuff wrong & too slowly; OTOH business people don't know what they want, etc., etc., etc. But still they (IT & business) are CONDEMNED to cooperate, because they are one company - in such circumstances it's quite easy to accuse the other side of not trying hard enough

  • IT doesn't feel co-ownership for the business services / product offered, so they usually reduces themselves to requirement implementing factory: "just tell me what you want", "we've only done what were told to do". It's perfectly fine for business drivers, who don't see any point in moving IT from its ancillary role - they are just tools, expensive tools.

My advice

Don't get yourself into trapdoor of working for Skeptics. Mostly likely (unless the mindset of key people changes ...) you'll be stuck within a system you don't want to belong to - thoughtless codecrafting without a deep sense of purpose & a single spark of real idea about how to make a difference.

Look for job where you'll have a chance to work with people who actually WANT & CAN (because of their capability & position) change something, add meaningful value, dare for things others didn't even think about. Smart technical people are not enough, there has to be a mutual understanding & agreement of healthy, constructive cooperation to power up the software development.