How An Interview Became Free Consulting

Here is an entertaining story I think you will enjoy.  But there is a lesson:  protect yourself from being used as I was.  TL;DR:  Insist on a two-way NDA.

True story, this happened to me last week.  I got a call about a consulting job:  a 3-6 month contract for a Windows Visual C++ Developer, full-time at an hourly rate.  The company was reluctant to express any limits for the hourly rate — price did not seem to matter to them.  The interview was on a gorgeous Friday before Labor Day weekend.  At the appointed time, I arrived and was greeted by the president of the startup.  I liked him right away.  We were the same ages and exchanged tidbits of raising a family in the Bay Area.  He explained that his company produced a limited number of high cost medical devices.  An updated, smaller model was announced earlier in the year, and it was due to the first customers in a month.  But the hardware had been delayed.  Hence, their Plan B was to cripple the shipping, full-size model to reduce the capacity to match the smaller model with half the number of ‘modules’.  But the original Windows application that operated the device would need to be modified accordingly.  And their Windows developer had left a year before.

The interview would require signing an NDA, getting the source code to the Windows application, building it, modifying it to work with half the modules, and returning both the binaries and the source code, which would be judged for correctness and the most qualified candidate would be selected for the contract.

Analysis:  In hindsight, this “take home test” was entirely inappropriate for a months-long hourly contract.  It is the exact work assignment in total, not a representative workload of the job’s requirements.  It is what might be expected for a one-time gig on Craigslist.  It might seem obvious to you right away what my fate would be.  Assigning an interview problem which is exactly what they need to ship?  Return the source code?  But I thought that they were desperate, and this was well within my comfort level, and it would turn out to be a win-win situation.

I was the third candidate so far.

Analysis:  Third candidate?  Was I so blind that I couldn’t see that right after I left, there would be a fourth candidate, and after that a fifth candidate?  But, I did not think much about this since they implied the first two candidates had not submitted acceptable results.  The first one crashed on startup, and the second positioned the robot at the wrong position and showed the window too small on a 4K display.  The other candidates did not have access to the discontinued Visual C++ 6 tool that was used and there were known compatibility issues with the newer version of the tool that they did use.  I still had the original tool and accepted the challenge in good faith.  I thought they would give me every chance to succeed before going to the fourth candidate.  In fact, I asked to debug it with the actual device, should my attempt not initially work.  Looking back, they did not expressly agree, but neither did they say that was not going to happen.

1.5 hours later, I signed the NDA, declined an invitation to stay for a pizza lunch (I told you the president and I hit it off), and took the USB stick of source code with me.  Over the holiday weekend, I spent a total of 6 additional hours resuscitating my ancient computer with Visual C++ 6 still running on it and modifying the code as I understood the problem.  I must say, I did enjoy myself immensely. Visual C++ 6 is an oldie but goodie, it still is way faster than even the latest Visual Studio 2017, and simpler and more direct besides.  While the source code was naively written, it was easy to follow (as opposed to the overengineered gas plant code I have had the displeasure to encounter over the years).  I e-mailed the binaries and source code on Labor Day afternoon, expecting feedback right away.  The response was I would hear something by Friday, 4 days away.

Friday rolls around.  Yes, you guessed it.  “We actually interviewed 6 candidates in total.  We know you are very capable, but we did not choose you because of the high bill rate.”

Now I was mad.  First, they act like price does not matter, and now that is why they are disqualifying me?  They interviewed three more candidates after me?  Whatever happened to working together to debug and refine my work?  They got the source code from 6 candidates?  I accused the president of copy/pasting the code from me and possibly the other candidates and shipping the result.  “We did not use your modified software for our use.  Please believe us on this.  We did not look into your code.  We only run the machine to test your compiled code.”  Then why did you ask for the source code?

Analysis:    Of course, it’s impossible to know what they did or didn’t do with the source code.  Or whether they actually hired someone.  There does seem to be some deception, at least not being upfront about budget expectations.

But I could have avoided this situation in a couple of ways.  First, I could have just walked away and not played at all.  But I truly did believe in the people and the company’s mission.  The president gave me a story of how it was nice working on something that helped so many hundreds of thousands of people (it is a medical device), and his mother had died of cancer, and this device would have helped her.

Here is the best thing I should have done:  I should have asked for a two-way NDA.  Before signing their NDA, I should have asked that they add a clause like, “Candidate’s source code will be destroyed and Company will not profit from it unless Candidate is hired.“

Consultants routinely go to interviews and sign NDA’s required to learn more about the projects for which they are interviewing.  They don’t think to protect themselves with their own NDA’s.  But given the company was asking for production ready code without pay, the two-way NDA was not only appropriate but necessary.

I assume people (especially those I like) have the best of intentions and will work with me towards a win-win scenario.  That doesn’t appear to be what happened here.  But, giving them every chance as I am apt to do, perhaps it might be due to an innocent difference in culture.  The company, while being in the SF Bay Area, is Chinese – the employees are from China, and their customers are in China.  As I am Chinese American (4th generation), I might be expecting them to embrace American values of individualism, and thus would work with me to debug and refine my solution for their needs.  Whereas, they are used to infinite human collateral, and it is the most natural thing to discard the person in front of them and try the next (the 4th, 5th, and 6th candidates).




One Response to “How An Interview Became Free Consulting”

  1. Tom Serface Says:

    If they did use your code, or someone else’s, in the process that’s a pretty huge breach of ethics. It’s too bad there’s not a place (like Better Business Bureau) where you could complain about such things, but that would likely hurt your chances on future contracts because people may not understand the whole situation.

    I guess you can only chalk it up to a learning experience and, as you say, we should try to get 2-Way NDAs (that even rhymes so it’s easy to remember as a mantra) in the future.

    I could see this as a trend with really old MFC programs and no one to maintain them. They could put out some “consulting” inquiries, get the “test” code, then just have someone in house merge in the changes from the code so they can technically say they didn’t use your code. Change a few variable names, perhaps the formatting of the code, etc.

    It kind of sucks to think that someone might do this sort of thing, but… sigh.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: