From my personal experience (~40 years of software development), there are a few things that can point to good software development practices:
- Is software a profit center or a cost center? If it's a profit center, the company will invest in tools and will look for quality code; if it's a cost center, they'll apply a short-sighted "low cost" mindset. See also:
- Do senior management have a technical background?
- Is there a career path for engineers, or is the expectation that you must go into management to advance in your career?
- Is there a design review and code review culture? Are there good development tools?
- Are people encouraged to move from group to group over the years?
It can be tricky to figure this out from the outside. For example, when I was at IBM in the late 80s, a lot of the senior management came from sales or marketing, even within the development organization (this was somewhat balanced by managers having a staff "Technical Advisor", who was at a similar pay grade to the manager). [This was also a period when IBM started undergoing massive change, and many of the "old guard" programmers were swept away or retired - I didn't stay to see whether the transformation was successful]
At another company (a now defunct startup), I encountered a culture where people were implicitly encouraged to take design and quality short-cuts, even though the company's main product was a network deployment framework where the selling point was high reliability and minimal data loss. At one point, I completely reimplemented a terribly designed module ... and got zero credit for that while the person who did the original system got promoted (I also did the re-implementation in 6 weeks, compared to the original team's 6 months). None of this was visible from the outside when I interviewed.
I've only encountered three companies that encouraged good software development (from personal experience - I've been told about good practices at other companies):
- BNR (the now-defunct Canadian equivalent of Bell Labs), with a very strong design review culture and rigorous testing
- a Canadian real estate company with ~300 offices (no longer exists) that treated its computer systems as a profit center and had an engineer as its technology VP.
- Google (although, as Dr Ousterhout points out, there is significant variability between groups) - it has good code review and tools cultures, but a somewhat weak design review culture; this is balanced by having very good people in charge of key components of its systems (Google's performance review system has a lot of false negatives, but not many false positives).
It's not enough to be a tech company -- Yahoo! had a poor software design/code/test culture when I was there (again, with large variability between groups). And Yahoo! wasn't the worst I've seen -- at one startup, some consultants held the company hostage by refusing to follow good software development practices.
While I generally agree with Dr Ousterhout that it's difficult to change an organization's style, it's not impossible. Despite my lack of management skills, I've been able to do this (at least, at a project/team level), but I introducing new ways of thinking and there was little resistance:
- code reviews (at IBM Toronto Lab and IBM Santa Teresa in the 80s)
- rigorous source code control, bug tracking, build/test cycles (at a startup in the early 90s)
- replace "waterfall" development with an iterative model (as a consultant)
As a piece of career advice - if you find yourself at odds with the company's development culture ... leave. If you're any good, there are so many opportunities out there, that it's not worth fighting to change things (you probably won't win and you'll just get stressed and bitter).