Ego-Driven Development
deliberate-software.com
deliberate-software.com
The answer is yes, they (CMSes) are all terrible. :)
"No dedicated QA for externally-facing software: Someone who is experienced at breaking software should have a crack at it before it goes to users. Developers (including me) are too enamored with their own work to really take the time to break it, so someone with a sense of pride in finding problems needs to be given the task."
Having dedicated QA is not always good. In fact it is often counter-productive.
"Low Joel Test score: The Joel Test remains a great indicator of institutional ego. A team that scores low on the Joel Test does so because someone along the way decided that, "nah, we don't need that here, we are special", and almost certainly they are not. I have yet to hear of a team with a legitimate reason for a low Joel Test score."
The joel test is actually quite out of date. Specifically the stuff about fixing bugs before writing features, hallway usability testing, testers, having a 'spec', and having a bug database are all not necessary or good to have in all cases.
Maybe 'dedicated QA' is a bad but a developer must at least be point man for test, even if the responsibilities aren't 100% of their workload. One could argue that having a horde of peons to click randomly is counter-productive, but teams >6 or so need a specific dev responsible for automating test. Its too specific a domain, and intermittently demanding, and to force all devs to split the duties.
Other than that, I will just throw stuff in Trello, so I don't really have a bug database per say
Often I don't need a "Content Management System", but I need a way to "Manage Content". The 'system' part is... pretty much in every situation I've seen, a straightjacket with little room to be extended, or something which requires a lot of time/effort to be proficient with. I've still not yet found a good middle ground.
Assuming content management is the key goal; I tend to use either a static generator (limited, purpose-built, ultimately simple) or Drupal (approaching becoming a framework that happens to ship with a CMS, has a learning curve from hell).
For someone that needs more than the simple use case, my suggestion is to delegate to a guy who has spent a long time and cleared the hurdles to proficiency with one of the flexible-at-expense-of-complication CMSes. Though, I'm one of said guys, so I'm biased.
Obviously, Drupal's not exactly pretty (and PHP is a lot of fun to hate) but I find that it comes with code I don't have to write to scratch enough of my customers' itches for me that it's hard not to love it anyway.
In order to "save development time" and implement "best practices" a company decides to use an "out of the shelf" package from a big name vendor (IBM, Oracle, Microsoft, etc) and customize it to their needs. Some initial customization is done and some shortcuts are taken to make the project go live.
Fast forward a couple of years. The custom code added by the company complicates upgrade paths and vendor support. The business demands more and more functionality which the package does not support "out of the box".
The customization initially implemented turns out to have been technical debt in disguise. They bypassed the recommended usage of the package or platform which resulted in performance problems. Eventually they end up having to re-work everything "the right way" in order to get vendor support or fix the performance problems.
This is specially prevalent in corporate IT departments in large corporations.
Moral of the story is that "off the shelf" platforms are not a silver bullet. If you don't understand the platform and the business requirements you will have problems later on.
I don't know how many times I've fixed performance problems of "off the shelf" packages by simply writing code which replaces the OOB code with a couple of SQL queries/stored procedures and only does what the business needs, bypassing features which the customer does not need in the present.
This is incredibly specific to one way to do QA. Arguably I'd say it's a bad way to do it, much as you can find really bad engineering practice, in which case I agree with you: bad practice is bad practice. :) People complain about how hard it is to hire good developers, and this goes double or even triple for people in the test industry, frankly.
So much depends on what the project actually needs. If developers are doing a great job of handling QA-related issues themselves, great. But sometimes you need someone to help you clear out technical debt, rig up some test infrastructure, help refine a release process, etc. And sometimes the risk of regression is so high and the product is so big that you do need an army of testers.
Likewise, for any sufficiently large project, having a dedicated person who keeps an eye on the big picture -- a clean & accurate bug DB; tracking customer reports/issues; finding & narrowing bugs -- can be an asset. This goes double when the tester's job is to be a product expert, and when the tester is reasonably technical.
And yes testers should be more or less embedded with developers. "Throw it over the wall" is invariably a terrible way to handle releases. Testers should exist to enable deploy early, deploy often, not to inhibit it. And so on. But see above re: hiring good testers. It's hard.
It's funny, though, to hear you "hope" you start getting better automated test coverage. :) It happens pretty often that QA is the sole owner of automated tests, which has its own set of potentially bad incentives.
... and rightly so. A junior programmer might be better off always following "established best practices", but I expect any developer worth their salt to be able to know when to break the rules.
If it isn't really a detriment, I'd say its not really EDD. EDD can also be just blindly following best practices past the point of utility.
The reality is that there isn't really such thing is a 'best practice.' There are only practices that have been found to be 'less wrong' than other ways, and perhaps even 'useful.'
Whatever your development practices are, the important thing is that you have and maintain the flexibility to adapt to what the particular situation needs.
Generational differences abound and manifest in management trends as people reach an age of influence. Born in the 50/60's - you're more likely to be a lone-wolf type. Born in the 80's/90's and you probably consider teamwork and connectedness to be instinctual. Not claiming either is correct but certainly projects beyond a certain scale can only be completed by a structured team. Too, those who prefer to work alone are not automatically egomaniacs.
As to the generational differences, I had not noticed only the older devs wanting to "cowboy" while the younger devs "cooperate". Usually, it has been a variety of both doing both. I will have to keep my eye on that though.
1. No documentation
2. Over-engineering
I believe EDD affects everyone from the large corps right down to the one and two-person teams. Take a look at highest upvoted hacker ideas here: http://www.todaystopthing.com/hackerideas/top
They tend to satisfy the "technically challenging" and EDD trap. Now check out the flop ideas: http://www.todaystopthing.com/hackerideas/flop
Some of these products exist and are profitable. "Simplifying" a problem/solution doesn't make it any less of a project worth pursuing. Great read +1.
As for hardware setup, the best I have used is: machines with cloned monitors, two mice, and two keyboards, both side by side so the developers can talk in low tones and not bother anyone else. I do this now at work, and it is a lot of fun, and it really averages to be that we get done more than twice what we would work normally alone.
Once you really are switching every few minutes, and you learn to trust the other guy to figure that crap out himself, then you can stop watching his semi-colons and start watching ahead for what you are going to do when you get your turn to drive. I have worked with someone like that, and the effect was profound, we would get done sometimes 4-5 days of low bug count, high quality work each day. You have to learn to disengage just a bit and start actually thinking about how his work fits in the big picture, and what you are going to do next, not his spelling errata.