The Customer is Always Right?
I just finished a job for yet another poor client from a freelance site. The truth is, I don’t really like these freelance sites for a reason. It’s not necessarily the sites, though some in the past have never protected sellers, despite taking the fee from the sellers only. It’s the volume of bad buyers on there. It’s certainly not everyone, by any stretch. However, when you hit one, they can be horrific. Indeed, one I’m dragging through the courts found out about me through another such site and despite us having an initial conversation on there (in which I initially said I didn’t want to engage), didn’t pay the site it’s exit fee to contact me directly, then of course, didn’t pay their third invoice. At the time paying the release fee was the responsibility of the client and it transpired later that they had not.
Today’s experience was somewhat surreal. The initial job was posted as:
So I responded with a yes I can resolve your IIS problem [only] and that it is fairly simple, my bid is £25 please.
Solving the original issue involved a bit of research, since there had obviously been an attempt to fix the issue, which made it worse, but was easy enough to track down. It boiled down to permissions. Though it was tedious because the poor chap had tried haphazardly to change the configuration to make it work.
He also didn’t mention he used FTP to connect. It became clear when looking at the server that whomever put the code there (him I suspect and pretty much admitted, but I wonder if he did), didn’t really understand AppPools, AppDomains, GACs, HTTP Handlers or the like . Hence, nothing was standard.
He is a so called .NET and PHP ‘expert’ (his bio, not my words).
He had managed to install a .NET application into a PHP website under the same NTFS directory tree [OKaaaay…and that wasn’t at least going to cause him to think?] and in IIS, installed the ASP.NET code in the PHP tree which was optimised for handling PHP only (the Plesk installation does that) and seemingly expected it to run ASPX without the necessary ISAPI handlers; managed HTTP modules nor script handlers [#fail]. He was uploading the website via FTP which naturally does not install anything, despite the reliance on the NuGet packages defined in packages.config.
Having sorted the original issue, another issue appeared, this time with his code. It was several things including a missing bundle configuration. I highlighted this to him but his reply gave me the sense he wanted me to debug it. Debugging code wasn’t in the original tender, yet I figured I’d initially look at it, perhaps give him a pointer and he can take it from there. Go the extra mile. Y’know.
However, the code he was deploying to the web was incomplete. I highlighted that to him, indicating it appeared there was a missing Global.asax amongst others, which loads the routes and kicks off the bundler configuration. I asked him to send me over the code, which he duly did and it became clear the code was dependent on the bundle configuration which his manual FTP copy was missing. The code also suffered from lots of bugs and required a heavy installation (specifically, WebDeploy or some other service was needed to trigger the pull of NuGet packages). I reported this back to him and indicated it was outside scope and he suddenly became hostile!
Needless to say, I managed to earn my first review of only two points out of five.
The “Other” Problem
What he mentioned above (“another problem”) is the bugs in his code. He wanted me to debug his code, which I would have been happy to do for a fee, but of course, he never made debugging explicit at any point. It was never on the table from him.
If you wanted to, Mr Man (@itabsinthe), you could set up a job for it. Don’t try to shoehorn it into this tiny job of 25 quid for what turned out to be 6 hours of my time. Professionalism doesn’t need documentation. It needs realism. If you truly wanted to pay extra, which indicates you were happy with the work, then make that clear. I did give you the opportunity to do so (i.e. “ If you have any other issues and wish to book some of my time, definitely get in touch.”). You agreed to a contract without technical documentation. I never proposed it and you didn’t ask for it. But do you remember this?
You were given what was wrong.
The Non-expert Expert
Anyone billing themselves as an ‘expert’ .NET developer and software architect, I would expect to understand any such “workarounds”; what HTTP handlers and modules are and how to configure them in the config files or through IIS. Indeed, it’s in the “foundation” level Microsoft exams if you take them. Do you need documentation for that?
Well, here is your documentation Mr Man.
Please do not assume that you paying under minimum wage is a privilege to someone. Please do no sabotage people who are a threat to you or your [quite poor] standing. In addition, just because you don’t understand something, doesn’t give you the right to the knowledge and skill of others without asking for it or recompense. We are not mind readers and there isn’t infinite scope or time.
Don’t try to cover your tracks or make excuses. You have the ability to show it by doing it. So do it. Have some integrity. You’re making us that do have it, look bad and hate people that behave as you do, so I for one, I’m calling it out Mr Fulvio! @itabsinthe