Recently there have been a few posts about people who... misrepresent themselves when it comes to knowledge and authority. A common question that came up in the comments of those posts was to specify who the guilty party is, if not by name, then a description.
First, I want to be clear about the separation I am making. I am seeing a lot of bad code, and I posted some choice tidbits here in the past. Some of it is inexcusable in a software professional, some of it is valid, because the author is not a developer.
I don't have any issue with bad code coming from people who are not developers (but if you call yourself an architect, and you can't code, get thyself away and ponder your sin). I can either work with them to make sure that they will be developers, or limit the amount of work they need to do on the system.
What drives me into sputtering rages is seeing so called professional developers and architects who couldn't find a clue if I hit them with it. Some random stories, all by professional developers and architects, to make sure that I am clear about who I am talking with.
- Senior Java Architect calls a high level meeting to discuss my "unreasonable behavior", I am not willing to give him access to the application database. My objection to the needless coupling is "unreasonable, and there is not other way to do it". My suggestion that I'll expose a web service that will be called from his application is "obvious impossible" because "java can't consume web services from .NET" and anyway "java doesn't support web services"
- The Project Manager whose stated goal is "have very stupid code, we want to hire stupid people, they are cheap" for a business critical application.
- A team that suggested "hot new tech" that they "have several experts on" that can "make miracles with it" which turns out to be a single guy that read a blog post about it and "really we intend to use this vital project to learn this technology"
- Senior Developer who designed a three tier system for serving a page. A request arrives, the page puts a message in a queue and then does a synchronous receive from another queue. Another machine that process requests. The message is an SQL statement, with no parameters allowed. There is no concurrency control in the app, so two pages making two totally different requests can get each other's results. I couldn't follow the reasoning for the decision, but apparently it has something to do with performance.
- Developer who built the "thread per row" batch process, and actually had a bigger server bought to handle the "big application" that processed "lot of business critical data (15,000 rows)"
- The Senior Consultant who took the code with him on a USB key whenever he left home, as a "theft precaution"
- The consulting company who we had to go and fix things after, where all the tables were named "a1" to "a46" and the columns "b5" - "b91", an explicit design decision to keep them in place.
- The Expert that had a business buy a 40,000$ BizTalk solution to do copy of one directory to another. We ended up replacing that with a scheduled task that executed: "robocopy \\server\dir \\anotherserver\dir" every 5 minutes.
- Whoever it was that designed MS CRM
I could go on, but this is a good representation of the types, I think.
They all have a few things in common, they represent themselves as experts, senior, knowledgeable people. In all those cases, they have actively acted to harm the business they were working for, by action, inaction or misaction.
I have no issue with people not knowing any better, but I do expect people that ought to know better to... actually do know better.