Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I've got a friend who does IT at a local non-profit where they're using a custom web application which is no longer supported by the company who built it. (out of business, support was too expensive, I'm not sure...) Development on this app started around 10+ years ago so the technologies being harnessed are pretty out of date now - classic asp using vbscript and SQL Server 2000. The application domain is in the realm of government bookkeeping - so even though the development team is long gone, there are often new requirements of this software. Enter the...

The domain expert. This is an middle aged accounting whiz without much (or any?) prior development experience. He studied the pages, code and queries and learned how to ape the style of the original team which, believe me, is mediocre at best. He's very clever and very tenacious but has no experience in software beyond what he's picked up from this app. Otherwise, he's a pleasant guy to talk to and definitely knows his domain.

My friend in IT, and probably his superiors in the company, want him out of the code. They view him as wasting his expertise on coding tasks he shouldn't be doing. My friend got me involved with a few small contracts which I handled without much problem - other than somewhat of a communication barrier with the domain expert. He explained the requirements very quickly, assuming prior knowledge of the domain which I do not have. This is partially his normal style, and I think maybe a bit of resentment from my involvement. So, I think he feels like the owner of the code and has entrenched himself in a development position.

So... his coding technique. One of his latest endeavors was to make a page that only he could reach (theoretically - the security model for the system is wretched) where he can enter a raw SQL query, run it, and save the query to run again later. A report that I worked on had been originally implemented by him using 6 distinct queries, 3 or 4 temp tables to coordinate the data between the queries, and the final result obtained by importing the data from the final query into Access and doing a pivot and some formatting. It worked - well, some of the results were incorrect - but at what a cost! (I implemented the report in a single query with at least 1/10th the amount of code.) He edits code in notepad. He doesn't seem to know about online reference material for the languages. I recently read an article on Dr. Dobbs titled "What Makes Bad Programmers Different" - and instantly thought of our domain expert. From the article:

  • Their code is large, messy, and bug laden.
  • They have very superficial knowledge of their problem domain and their tools.
  • Their code has a lot of copy/paste and they have very little interest in techniques that reduce it.
  • The fail to account for edge cases, while inefficiently dealing with the general case.
  • They never have time to comment their code or break it into smaller pieces.
  • Empirical evidence plays no little role in their decisions.

5.5 out of 6.

My friend is wanting me to argue the case to their management - specifically, I got this email from their manager to respond to:

...Also, I need to talk to you about what effect there is from Domain Expert continuing to make edits to the live environment. If that is a problem for you I need to know so I can have his access blocked. Some examples would help.

In my opinion, from a technical standpoint, it's dangerous to have him making changes without any oversight.

On the other hand, I'm just doing one-off contracts at this point and don't have much desire to get involved deeply enough that I'm essentially arguing as one of the Bobs from Office Space. I'd like to help my friend out - but I feel like I'm getting in the middle of a political battle.

More importantly - if I do get involved and suggest that his editing privileges be removed, it needs to be handled carefully so that doesn't feel belittled. He is beyond a doubt the foremost expert on this system.

I'm hoping this is familiar territory for some other stackechangers, because I'm feeling a little bewildered. How should I respond? Should I argue that he shouldn't be allowed to touch the code? Should I phrase it as "no single developer, no matter how experienced, should be working on production code unchecked"? Should I argue to keep him involved with the code, but with a review process? Should I say "glad I could help, but uh, I'm busy now!" Other options?

Thanks a bunch!

share|improve this question

closed as off topic by Caleb, GrandmasterB, thorsten müller, Mark Booth, Ryathal Jul 3 '12 at 12:08

Questions on Programmers Stack Exchange are expected to relate to software development within the scope defined by the community. Consider editing the question or leaving comments for improvement if you believe the question can be reworded to fit within the scope. Read more about reopening questions here.If this question can be reworded to fit the rules in the help center, please edit the question.

I've been in your situation though the domain expert was the owner of the (for profit) company so I don't think my experience relate directly. Do want to hear about this though since I do some minor scripting for non profits I am approached for... – Rig Jul 3 '12 at 0:26
This sounds like a personnel problem, not a programming problem. – Caleb Jul 3 '12 at 3:30
up vote 18 down vote accepted

Take the long term perspective on this issue. A lot of the items you mentioned wash away when you place a lens of objectivity over the situation.

You've got minimal skin in this game and no real desire / prospects for significant contract work from the NFP. Ultimately, what benefit is there to you to answer one way or the other to the management request?

You are well within decorum to simply state "I don't have enough of the history about this project to make a statement like that." And then you can follow that up with "A good practice is to have a test system to make and test changes against prior to making those changes in production. No one, including myself, should make changes directly to production in a non-emergency situation." And yes, even in most emergency situations you should hit Test before Prod.

The NFP is asking a technical person to make a personnel judgement, which is really outside the realm of your role, especially as a part-time / ad-hoc contractor. There is no gain for you or benefit to your professional reputation by becoming involved in their internal matter.

This wasn't directly in your question, but it relates to the more technical aspects of it. And it provides more concrete steps of what you can actually do to help this situation. It doesn't affect my original answer to stay out of the personnel issue. It's always worth remembering that code is the product of the circumstances that created it. I try not to be too quick to judge any set of code that I didn't personally write because I don't know all of the circumstances. I've written some crap code under pressure, and I remind myself of that whenever I see new examples. Keep it real. Keep it humble.

Some people simply don't know that what they are doing is wrong. On your next contract, you can offer to show him some techniques to improve his coding skills. Start with a compliment and / or acknowledge his domain expertise. Then show him an easy simplification and point out why it will make his life easier. Start small and always frame it towards his benefit, not as one-upping him. You especially don't want to advertise that you are trying to "train" him; frame it as just offering up simple tricks and tips. Despite his brusque personality, everyone appreciates learning the tricks of the trade that make their lives easier.

share|improve this answer
Thanks, this was very helpful. I'll offer my software services, but refrain from passing judgement about any other issues. – James Kolpack Jul 3 '12 at 4:00
@JamesKolpack - good idea and the safest bet. I've updated my answer to reflect some actions you can take on the side to help teach the SME. – GlenH7 Jul 3 '12 at 11:58

Paraphrasing your question "My mate works for a company that want to fire someone who they don't think is doing a good enough job, they have asked me to help, and I am happy to because I agree, Can I have some advise on how to really twist the knife on this guy?"

All I can add to the superb answer by @GlenH7 is that this is a serious employment issue. Apart from the ethics of it, discussing it openly on the internet could put a number of people in deep ..... Glen indicated you have nothing to gain.... I would go as far as you have a lot to lose.

My advise is stay out of it, it's not your battle.

share|improve this answer
Thanks for the advice - but the tone isn't quite correct for the paraphrase. There is no intention of firing anyone, instead getting the domain expert back to his trained vocation. Also, I'm not happy about the situation, I'm trying my best to help with making an easy transition - if that's what's needed. I enjoy solving problems with software - and I'm not sure I want to be involved with this since it is mostly a "human resource" issue. – James Kolpack Jul 3 '12 at 3:59
You may claim you are not trying to fire him, but you are trying to force him to change the work he does, no matter if he likes it or not, with no (apparent) discussion with him that his work is not acceptable standards and what can be done to correct that. In the country I live, "Constructive Dismissal" is how the courts describe this. It's illegal and regularly costs companies large amounts of money. – mattnz Jul 3 '12 at 4:43
+1 for the twisted paraphrasing because it exemplifies what others can and will say after the fact. NOT the place to be in, that's for certain. I'm not sure where you live, but it's very cool to hear that "Constructive Dismissal" has been categorized and is illegal. – GlenH7 Jul 3 '12 at 11:45
It's true - I had not given much consideration for this as an ethical issue. My software ethics course at university had been mostly about intellectual property issues and being careful when designing systems so that they do not cause harm - not about actual people issues. This has helped solidify my position against becoming involved. – James Kolpack Jul 3 '12 at 12:11

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