How bad software gets written. So following up on
this,
→[More:]
I used to wonder how bad software happened. I'm not talking something that's balls-to-bones bad, totally ill-conceived and misbegotten, I'm talking about software that mostly works, but sometimes doesn't. Software that has a mostly smooth surface, except for a couple of snags, but they're snags you can't avoid and cut your finger on every damn day, and they're so annoying that eventually they're all you can see.
Since becoming a developer, I don't really wonder anymore.
It's not malice and it's (usually) not incompetence.
First off, in a company of any size, there's a lot of time and feature pressure. Marketing needs bullet points so they can convince customers to upgrade to the next version, and there's never enough time to do everything on that list, so there's not a lot of incentive to open up something that was more or less working in the last version and start messing with it.
Secondly, if a developer does get the chance to pick what to work on, he's going to pick something that's interesting to him, probably something deep in the code, which benefits to the user not immediately or easily visible. Even worse than this, an unsupervised developer might start to get clever... "sure, standard Windows tabs are nice, but they're boring, you know what would be really cool? If all the items kind of flew around the top of the screen, and you grabbed the one you wanted with the mouse and pulled it down!"
Third, developers and testers don't use the software like real users. A developer bangs out some code and it works for 99% of the cases, most of the testing and fixing is spent on those 1 percenter edge cases that most users will never see. Every release I get a totally disproportionate number of bugs and feature suggestions about making weird and rare options in the installer nicer. Why? Because the QA department has to uninstall and reinstall the product on multiple platforms every day. A real user will probably do this
once, ever.
Another part of this is that we developers pretty much have no idea what we're doing. If we're making, say, widget tracking software, it's a good bet we're not doing a lot of widget tracking on a day to day basis. We don't have the domain knowledge, and we just don't really use the software that we write. We code it up, try it out, it seems to work ok, we're happy. This, by the way, is why there are so many really good text editors and bug tracking systems and whatnot out there. These are programs software developers use on a day-to-day basis.
Nextly, a lot of developers just don't like doing user interface stuff. There's kind of a stigma attached to it. It's not seen as real programming, it's almost, kind of...
artsy. It's just moving buttons around in a designer, right? You do the real, hard work of adding a fancy new "fooulator" feature, then on the last day, probably on a Friday afternoon, you find an empty spot on in the UI and wedge a "Fooulate!" button in there.
Anyway, sorry everyone.
Any other coder types out there got stories?