Slashdot videos: Now with more Slashdot!
RE: "Which factory e.g. did annoy you in particular, and why?" Joel explains it better: http://discuss.joelonsoftware.com/?joel.3.219431.12
My suggestion is, start with pushing for process and get tests written for existing code. Try to convince people that the reasons for your release problems are the absence of good process and good tests. Explain that tests are a way to automate the drudgery of manual testing and will save time - so that it is comprehensible to management. Once those two are in place - you can safely rewrite the code without breaking existing functionality - thus avoiding being blamed for your "meddling". You can then start pushing for code refactoring next. Eventually - it will be possible to display the tangible benefits of a well-structured code based. It'll be a long hard slog.
Sometimes though - the people around you are too calcified in their thinking to want to learn or to do things "better". In that case, find another job.
Over-engineering is a problem yes, but just as commonly, under-engineering/non-engineering is an equally big problem. Both lead to bad code.
I've not been infected in years, with no realtime anti-virus, and that's by following a few simple ground rules.
1. Do not run junk software from unknown sources. If you must, then run an AV scan manually to double check. (or use a virtual machine)
2. Keep your browser up to date, use a browser secure by design (e.g. Chrome and of late IE - although IE is still more likely to be targeted by malware) and avoid installing crappy plug-ins.
3. Avoid visiting untrusted sites and executing untrusted crap off them (see 1)
That's it really.
If an occasional virus gets in, find the process, kill it, and delete the executable and startup hooks. Most are that dumb. For the rest, format and reinstall.
That is why this Aisha story comes up so often.