[Home | Contact | What's New? | Products | Services | Tips | Mike |
Living with Schizoaffective Disorder

Please to Forgive

This site totally sucks when viewed on a smartphone.
I'll fix this Real Soon Now.

Self Employment:
Even on a Good Day Things are Hard

This essay will help you understand why I want to get out of software consulting, even though it can be high paying work.

Michael David Crawford, Consulting Software Engineer
Solving The Software Problem
mdcrawford@gmail.com

Friday, May 6, 2005

Copyright © 2005 Michael D. Crawford. All Rights Reserved.

Nobody ever hires a software consultant because they have some easy coding they need done. The best I can hope for is that they need me because none of their in-house staff has the relevant skillset. Sometimes, though, they give me the work because it's beyond any of their abilities:

One client gave me what they called "a test of my skills", a first job "just to see how good" I was. It was a custom database. Not SQL programming: a whole new database, written from scratch in C++, from the storage format, queries, sorting, searching, and editing. They needed it written from scratch because they had very unusual needs. For reasons which are hard to explain, it had a recursively-defined variable-length record structure. That is, fields in the database could be records, and fields in those records could be more records.

It wasn't a server, it only needed to be used by one process, an online futures trading decision support system.

The owner of this company is the wealthiest man I have ever met, or ever likely to meet, and the money invested by this company belonged solely to him. My database was to be a core component of the program that told his trading staff when and what to buy and sell.

Pointers, References and Values

Musings on Good C++ Style

Performance was crucial, which was why they decided not to use an SQL database: the networking latency for an SQL database would have been intolerable. Instead, I used a memory-mapped file, with C++ inline functions for accessors. I spent a couple of months with the Intel VTune Performance Analyzer to optimize the code - which I might add is well-worth every penny of its seven hundred dollar price. It's available for Linux and Windows.

My client emphasized the need for reliability. If their application went down for even a day, it would cost them hundreds of thousands of dollars. This was a common occurrence, as their existing application was pretty buggy. They certainly didn't need me to make things worse.

Extreme Programming Explained cover

Extreme Programming Explained:
Embrace Change (2nd Edition)

by Kent Beck and Cynthia Andres

[ Buy]

On a previous project I had begun to adopt the test first strategy advocated by the eXtreme Programming methodology. I became fully committed to it here. Mostly I unit tested each of my classes and templates. I also did integration testing, in which I ran command-line programs that accessed the public API of my database using test data.

The result of all this work was that my database met all their expectations, and significantly accellerated their ability to make money. Only two bugs were ever found after I integrated my code with their application. I found one and my client the other. Both these bugs were fixed before my code went live with real trades. They spent several months testing my code, comparing its performance with their old database, which was pretty primitive but known to be reliable.

In the end, they told me that this "first project", which was "just a test", had never really been meant to be easy. Theirs was the largest single software application I have ever worked on. Mac OS 7.5.2 was bigger, but was composed of hundreds of applications, libraries and code resources. This was a single Windows executable with well over a hundred man-years of blood, sweat and tears invested in it.

It seems they had asked the application's original developer to write this database, but he refused, because he said "it couldn't be done".

Makes me feel pretty confident of my code-fu, to hear a client say something like that about my work.

But that's not what makes my life as a software consultant hard. I'll tell you that now, two things:

My client was only willing to pay any of us, not just me, but his own employees, once a month. He just didn't like to take the time to write out our paychecks.

So you can imagine my dismay when he went off on a month long vacation cruise, and forgot to pay any of us before he left. That was an otherwise good year, so the check I had to wait an extra month for was almost ten thousand dollars.

But here's the icing on the cake: his research director said to me one day "Your code is by far the best in our codebase". I asked his permission to quote him on my homepage; such a testimonial could help me significantly in winning new clients. He was glad to oblige.

But when company's trading manager saw that on my homepage, he refused to give me my last month's paycheck until I agreed to sign a "termination contract", which I had to wait for their attorney to draft, in which I agreed not only to remove that quote from my homepage, but never to reveal to anyone either the name of the company, the name of any of the staff, any of their methods, or the amount of money that they had.

They are very secretive about their methods, you see.

Bastards.

[Home | Contact | What's New? | Products | Services | Tips | Mike]