Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

If you're an active reader here, try to think about how many times you've heard (and even agreed) when someone here has told someone else to start looking for a new job. Personally, I've seen it a lot more than I expected: it's almost starting to sound cliche.

I get that there are bound to be a number of companies that are bad at developing software or managing a software project, but it almost seems like it's getting worse and more frequent, maybe we're just hearing from them and not all of the places that have decent work atmospheres/conditions.

So I ask:

In your experience, and through your developer friends do you find that it is common that companies have bad development environments and if so:

  • Why do you think it's common?
  • What do you think could be done to fix it as a developer, as a manager, as an industry?
  • Do you think it's improving?
share|improve this question
4  
I think what you're noticing is partly an artifact of people finding a place to discuss it amongst their peers. I'm not sure if the reverse of it could be documented, as posting about how great your job is would be rather off topic :) –  Tim Post Apr 3 '11 at 15:37
    
@Tim Post: I thought that might be an issue, so I half-mentioned it in the question. Still though, I've been going on the assumption that the visitors here are skilled and passionate programmers who are more able to find/demand good development employers. Yet, I still see lots of people come here who have valid complaints that what some would consider the minimum of reasonable conditions are not met. I mean... we're talking 1-3 points on the Joel Test. –  Steve Evers Apr 3 '11 at 15:44
3  
I actually think people tend to throw out the "you should quit" advice a little too soon around here, but maybe that's just me :-) –  Dean Harding Apr 4 '11 at 0:30
2  
Oh yeah! Most liquor store owners are lousy programmers. –  Job Apr 4 '11 at 1:11
    
as ever, sturgeon's law applies –  jk. Mar 31 '12 at 9:33

14 Answers 14

up vote 61 down vote accepted

Is it true that most companies don't know how to write software?

Yes, it's true. Most companies don't know how to write software.

Why do you think this is the case?

Most software companies hold their development teams accountable for two things: Cost and Time to Market (TTM).

Regrettably, most software companies don't hold their teams accountable for Technical Debt.

This leads to a quagmire because:

  • Increasing levels of technical debt increase the difficulty of bug fixes and new features.
  • Which increase cost and TTM.
  • Which leads management to crack the whip and demand unpaid overtime, because the development team is failing on its two key metrics: Cost and Time to Market.
  • Which leads to more Technical Debt!

What do you think could be done to fix it as a developer, as a manager, as an industry?

Two things:

  1. Management needs to understand and account for technical debt.
  2. The software industry needs its own equivalent of Harvard Business School (HBS). Managers need to read software-specific case studies about project failures and learn from past mistakes. Right now, managers emphasize cost and time to market because that's what they know how to do. Software projects have their own nuances, and it's high time that we manage them accordingly!

Do you think it's improving?

No - In the aggregate, I think things will have to get worse before they get better.

share|improve this answer
21  
It's counterintuitive, but focusing on quality first gets you productivity as a side-effect. Most teams spend most of their time dealing with defects, be they design defects, usability defects or code defects. Focusing on shipping features faster optimizes the smaller share of the work at the expense of the larger share, it's intuitive but dead wrong. Focusing on quality makes everything go faster. –  Joeri Sebrechts Apr 3 '11 at 18:11
1  
@Joeri Sebrechts: I agree. I think your argument goes hand in hand with @Uncle Bob. 's argument that 'Speed Kills'. programmer.97things.oreilly.com/wiki/index.php/Speed_Kills –  Jim G. Apr 3 '11 at 18:15
7  
This is an example of "Good, Fast, Cheap, pick any two". Companies want it fast and cheap. So it ends up being crap. –  user21007 Apr 3 '11 at 22:47
13  
@user21007: Not really. You are correct that most companies pick fast and cheap and skimp on good. However, I disagree with your statement that you can't have all three. If you pick only good and ignore fast and cheap, they tend to come along for free, since well-designed software developed by a good team with a good process actually tends to end up being delivered on time and on budget. Most of the time developing software is spent changing it which is much easier, faster and cheaper with well-designed software. Sometimes the fastest way to get there is to go slow -- Tina Dico. –  Jörg W Mittag Apr 4 '11 at 2:05
3  
+1 for "software industry needs its own equivalent of Harvard Business School" comment alone; a great answer. –  Tony Apr 13 '11 at 21:03

I see this as a pattern in some start up companies. I'm not saying that all venture capital is bad, however the pressure it buys you is directly related to the patience of your investors. I think that the "just get it out the door" mind set kicks in and really bad practices and environments follow.

When under serious pressure, people are told to:

  • Work much longer hours
  • Skip stuff like writing tests
  • Not bother with continuous integration
  • Not worry about formal specifications
  • Delay re-factoring code until it explodes when anything new is added
  • Write documentation 'later'
  • Accept punishment for delivering late instead of incentives for delivering early
  • Trust that five new programmers on the team will help at the last hour
  • A whole lot of other badness

Investor micromanagement (often using CEO's / CTO's as proxies) is also a major issue for many. This is one of the biggest reasons that I avoid VC funded companies that have yet to turn a profit.

Stack Exchange is one of the few exceptions, they seem to have rather patient investors, and was founded by a core of really good people who know what happens when you don't do things correctly the first time.

Still, in my experience, well organized VC funded start up companies that provide positive environments are more the exception than the norm, and I think we're seeing quite a bit of evidence of that here.

On the flip side, you really don't hear people talking about how great their jobs are, just like you don't hear about the millions of uneventful car trips every hour. You just hear about the wrecks.

Also worth noting, 'venture capital' can also mean micro finance in some situations. The pressure doubles when 'investments' come from savings or retirement accounts. This usually also means the company is running on fumes.

share|improve this answer
    
+1 re: Investor Micromanagement via proxy. It starts off as a friendly suggestion to the company founder by the board to get a good project manager with a friendly offer to help interview the candidates, and they end up picking someone who has good business sense, but doesn't understand how to manage a technology company. After that, your list of bad practices is trotted out practically one week after another, until the company either starts to founder, or ends up so far out of the founder's hands as to be ridiculous. The moral: either pick your VC's VERY carefully, or find another way. –  S.Robins Mar 31 '12 at 5:49

"A company" knows nothing about writing software. People know how to write software. Problem is, most companies don't employ management who know how to effectively find, hire and retain people who are good at writing software.

share|improve this answer
6  
Isn't that because knowing how to write software (that works perfectly) is Hard (think astrophysics hard) and they don't offer enough money and respect? –  Christopher Mahan Apr 3 '11 at 19:13
    
I think this is a key factor, management knows business, but not software. Yet they are making software decisions, a recipe for failure. However, it looks good short term (reducing costs/expenses and gaining revenue), so it seems like great idea. It takes awhile to uncover the issues, and who knows if they same people are even making the decisions by the time its uncovered. They hope to cash in on the short term riches. –  Andy Wiesendanger Apr 4 '11 at 19:35
    
@AndyWiesendanger: Maybe sometimes "management knows business but not software". I've certainly seen that. But I've also seen many technical companies promote their best engineers to management. And that presents a different dilemma: if the best engineers are now managers, who does that leave writing the code? –  Kevin Mar 31 '12 at 2:45
1  
@Kevin: Where I work, our boss is a developer. I think he'd probably be the first to say he's not "the best engineer" there, but he's definitely good enough to be on our team. What he is, though, is someone who understands both the code side and the management side well enough to do both effectively, and I think that's a really good model for the sort of person who should end up managing developers. –  Mason Wheeler Mar 31 '12 at 2:53

I have found throughout my career that most companies are so inept at what they do, they remain in business only out of spite for their employees.

Obviously that is not true, it only appears that way. This is because you will always have the strongest opinion about things that have the most direct affect on you. While no company or department or team does everything perfectly (and some do come closer than others), it is simply perspective that makes you believe that your company is the worst at "x".

share|improve this answer
    
Another proof of this: read a newspaper or Wikipedia and compare your general judgment to your judgment on the articles written on your areas of expertise. –  reinierpost Apr 4 '11 at 8:09
1  
Something to note: a company does not need to be good at what it does---it just needs to be better. If everyone is bad, then a bad company would find no difficulty staying in business. –  Tikhon Jelvis Apr 5 '11 at 5:13
    
@Tikhon: Not even that, a company just has to have good enough marketing/BS artists to appear better. I've worked for many clueless companies that only stayed in business because the owner was a good con-artist who could convince people his company was good. –  Wayne M Apr 19 '11 at 14:59

Yes, crappy development practices are quite common.

Why? Management sees software as a car. Doesn't matter what's under the hood as long as it moves forward. So if software runs, why bother improving it? We all enjoy visiting different websites every day, not even thinking wheter software running it is state-of-the-art or kittens-killing-nightmare.

What can be done about it? Well... from my personal experience it appears that competition is the key. Only when some other competetive company can do something better/faster management starts asking questions "why?". And even when they start with wrong decisions (more workload, layoffs) they eventually come to conclusion that they have to improve software development process in order to stay competetive.

Is it improving? Yep, albeit quite slowly.

share|improve this answer

Yes I think it's common because many companies aren't pure software companies like Google or Microsoft.

Many will have an IT department where software development takes place, and many developers will work at such companies. These companies write software to support whatever business they are and they will write it badly and in anyway so that their business survives. Most will not appreciate or care for good software development methodologies, the latest tools and technologies, nor finding talented developers and treating them well.

I'm not sure I formally believe in any "fix". I believe more in general improvement of developers, managers, and the industry as a whole in how everyone does their work and shares what they know. Community and education is how to improve the world of software development. Books, user groups, online communities, etc.

Yes, I think it's improving. This thing called Agile is getting more and more popular. TDD is getting popular, hopefully to become a standard everywhere. Frameworks are getting better and better.

Whatever problem we are trying to fix, a developer is creating a solution for in a better way. Whatever problems arises from that, someone is fixing too in some way. All very recursive.

share|improve this answer
    
Ummm ... there are signs that some pure software companies have issues too. Take Windows Vista for instance ... –  Stephen C Apr 4 '11 at 11:15
1  
It's not uncommon for big software companies to develop less than stellar products that doesn't achieve expectations. It happens. Look at Google Wave & Buzz or Netscape's browser as examples. But these companies generally treat their developers well with the pay and supply them with the tools and technologies to do their work well. Companies such as Facebook, Google, Microsoft, Apple, all generally have good development environments that most other companies should strive for. –  spong Apr 4 '11 at 14:40
    
Google and Microsoft are not "pure software companies". They do primarily focus on software, but they develop non-software products as well. –  Bernard Apr 4 '11 at 18:25
    
@Bernard I suppose Google makes pens, tshirts, and stickers too. Microsoft does some hardware like home routers and keyboards/mice. :) –  spong Apr 4 '11 at 19:06
1  
@Stephen, I don't think Vista wipes out all MS has done. And they've certainly done software a lot better than a lot of other people. Good answer @sunpech. –  Andy Wiesendanger Apr 4 '11 at 19:37

I think a lot of it is just not having a clue. I interviewed a few years back at a startup, I asked them what source code control system they used. The CTO said "What's that". It went downhill from there! They made me a decent offer, I turned them down. (I spoke to a friend, his office scored a 0 on the Joel test!)

Even my current place scores only about a 4 on the Joel Test. I think a lot of it is an education system. A lot of this stuff like (CI) is not taught in university. Or many managers are old enough to have graduated really before things like CI came onto the market.

share|improve this answer
    
A lot of it is just people who are ignorant and unwilling to learn, but rise to management roles either through tenure (being with the company 10 years), ass-kissing (being a yes-man/Smithers to the owner) or being family/friends of the owner. So they are "in charge" but don't understand enough to make competent decisions. –  Wayne M Apr 19 '11 at 15:03

First of all, I think there is a sampling error here -- people are much more likely to ask a question when/if they run into a real problem. Chances are that before they ask here, they've already tried to solve the problem(s) in the relatively straightforward ways. Truth to tell, for every question that gets asked here where people reply with (some variant of) "find a new job", there are probably 1000 similar questions resolved without any difficulty at all.

Second, I think in a lot of cases, software is almost incidental the reason for saying somebody should get a new job. Just for example, I recently said (or implied) that somebody should get a new job because he asked about how to hide what he'd done from his coworkers. In this case, the "work he'd done" happened to be code he'd written, but my reaction would be essentially unchanged, if it was something else entirely (e.g., he designed houses or cars or airplanes, and needed to hide his designs from his coworkers).

share|improve this answer
    
Maybe not 1000 - but there is definitely a reporting bias as you say. Another consideration is that in some cases the company is not actually wrong - just that their policies don't gel with the individual's own ideas about development. It's just as important that a developer can find a company to fit their own sensibilities for job satisfaction as it is for other environment and remuneration factors. –  HorusKol Apr 3 '11 at 23:34
    
@HorusKol: Admittedly, 1000 was just picking a number off the top of my head, but you get the idea in any case -- what we see here is a small percentage of cases for which the normal, obvious routes haven't worked. They don't really say much about the state of the industry as a whole. –  Jerry Coffin Apr 3 '11 at 23:59

What you're not finding here are people indicating that they were put into situations where the management "claimed" they would except bad software for whatever reason, and then fired developers for not delivering quality software.

Those willing to take on technical debt don't have the ability to calculate the amount. Maybe ignorance is bliss?

Too often developers are told this is what a good job should be like (Joel Test?) but aren't challenged to fix it. Does upper management really care about source control, testing, documentation and any other kind of best practices?

The problems developers or developer managers have is when confronted with the question, "How long will it take?" we assume they mean, "What's the fastest can you deliver?" Instead of considering all the short-cuts and ignoring quality software we try to please. The sooner we stop falling into these personal traps and give honest answers to these requests, the better our jobs will be.

share|improve this answer
    
+1 "How long does it take" sometimes means "how long to do it right", but developers assume the pressure of implementing as fast as possible. –  Kevin Mar 31 '12 at 2:53

I'm not sure if this is true for everyone, but the few development companies I've encountered have started off by someone seeing a need for a good software solution within their industry and building it. Once they do that, they feel they are qualified to build software for other industries, and a business gets formed.

Also, I think that most software companies start of small and when there is only a handful of programmers working on each project, they tend to ignore things like source control, code review, industry standards, etc providing their partners are OK with it

I'm not sure of how to fix it because there will always be terrible companies out there, but having an online resource for how a software company SHOULD be run (and why) is a huge help. Sometimes all you need to do is point the person in charge to a reputable article and they'll turn into a believer

share|improve this answer

Most companies are not in the software business*. For them, software development is a necessary expense, not a strategic process, and therefore they don't pay as much attention to it. Such companies tend to go for the safe solution (currently Microsoft, used to be IBM), and their software development practices tend to be adequate for what they do, but hardly good.

Many companies in the software business are relatively new, and have grown rapidly. Software practices that will work well enough when it's Fred and Joe sitting back-to-back in a small room frequently don't scale well.

Also, software isn't really like most other business processes. It's design work all the way, requiring some creativity in virtually all aspects. It's much more similar to graphic design or making building plans than it is to accounting or any sort of manufacturing. There aren't a large number of people who went through the business doing things in a modern way (say, with distributed version control). Not that that explains why so many companies could learn things from Brooks' "Mythical Man-Month", but there's still some unfamiliarity.

*By "in the software business", I mean a company that relies on software as a central and vital part of the business model. This includes companies that sell software, and also companies that sell goods and services through a process that heavily uses custom software for a competitive advantage.

share|improve this answer

When unexperienced teams become too obsessed with quality/process etc., they stall. They cease to produce anything, and instead have endless meetings and discussions about which process is better, how much detail should go into the specs (usually: the more, the better), which indent style is the One True Brace Style etc. A lot of cargo cult is involved in those discussions.

Then the project dies. Or a manager cancel all that discussion and tells them to just create anything, not regarding quality at all.

share|improve this answer
    
what are you saying, that there is a middle ground? –  Kevin Mar 31 '12 at 2:55

Why do you think it's common?

Economics

What do you think could be done to fix it as a developer, as a manager, as an industry?

Understand that there are economic influences at play and then try to do your best within the economic constraints that are placed upon you

Do you think it's improving?

No. I think it will always be a problem. It's our job to make sure we do the best we can with the resources provided

When you're working for a company quite often the goal is to produce and sell a product or provide a service and the IT systems are just part of the business infrastructure to do this. I think programmers also have to accept some responsibility for shoddy development practices.

share|improve this answer
    
I didn't downvote but maybe you can you elaborate on what you mean by "Understand that there are economic influences...". As it is now, it's an ambiguous non-answer. –  Steve Evers Apr 4 '11 at 14:33
    
@SnOrfus I guess I was trying to say that the people at the top in a company are making decisions based on money with no appreciation for the development process. They're never going to understand the process because it's not their job so we as developers need to produce the best software we can based on the time and money affored to us. For me this is a more difficult challenge as a programmer than any technical challenge –  John Shaft Apr 4 '11 at 14:52

Depending on your definition of "write software" and "good", knowing how to write good software (of any significant and useful complexity, which is increasing at an high rate) may or may not be within human capability.

Being able to write software so much better than everybody else that most of them think you are good at it is possible, but obviously only applies to outliers in the field. It's also a moving target.

Since most companies/managers don't manage software as something nearly guaranteed to fail in some manner, they fail.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.