12/13/2013 5:50:52 PM
So as some of you undoubtedly know, last January I decided to start working for myself. Fast forward to today and I am closing in on the end of my first year as an independent software developer. It has been quite a ride. This past year has been most educational and interesting. I hear you asking, "In what way?" Well for starters I got to take my "ivory tower" ethics through a trial by fire of sorts this year. Anybody who has worked with me in the past knows that I have a system of ethics that I judge actions taken in a professional context against. If you want to better understand this system, start here with my "Code Monkey Manifesto" .
Of course most of my past employers have failed to live up to these standards. Most were more than willing to cut corners, misrepresent themselves, misrepresent their product and ignore the needs of their customers in pursuit of the almighty dollar. In addition most were not capable of processing constructive criticism. This of course is a cardinal sin as software developers who lack the ability to handle constructive criticism, much less produce it, are incapable of evolving to meet future challenges. In any event, at some point over the last few years it became clear that it was time for me to start working for myself. Depending upon anybody else to fill the role of avatar for my ethics was nothing more than a fool's errand. Even having realized that, I didn't make the move because I was afraid of not having the safety net provided by an employer and their system of benefits.
But I eventually did it. Not by design mind you, as I kind of dumb assed my way into this to be frank. I took a job with an unnamed client out of Columbia that required me to start off as an independent developer until I proved myself. This position only lasted two weeks, largely because there was a disconnect between us in terms of what the technology platform was up front. Once I discovered that this was not a web development position, I immediately moved on. I had already positioned myself to accept a full time position with a local printing company. This fell through when I received the job offer because  the employer revealed some very disturbing factoids about the work experience there in our final meeting and  some old contacts of mine called me in with an offer that would allow me to independently work on a project that I've worked on for nearly a decade on and off. At that point it was clear that this was my shot and I wasn't going to piss it away. Opportunity was not only knocking but it was handing me itself on a silver platter. So I wised up and got with the program.
I still work with that particular client and they still provide the bulk of my work. It has been a fruitful relationship thus far. Within a few weeks I began to branch out and start working with other clients and that is really where the story gets interesting. Through another contact of mine I became involved with an international company whose headquarters happen to be 15 minutes from my house. They needed some modifications made on an existing piece of software. However at some point it became clear that what they needed was something that I could not provide. Custom Development wasn't going to solve any of their problems. I bent over backwards trying to relay my observations to them (effectively working to put myself out of a job for their sake) only to be spurned time and time again.
So what did I do? I walked away. In a decision that will likely be more ridiculed by my readers than revered, I decided that working with this client was no longer in the best interests of either party and began a three month long process of transitioning away. Working with them was profitable and the loss has been felt financially but I simply couldn't stomach the thought of becoming a leech who subsists on the existence of problems rather than the development of solutions. That is not why I do what I do. When I first started learning to code as a child at the age of six (thanks Dad!), I loved being able to control the behavior of the computer in front of me. Writing code was a fascinating exercise for me, even before I really understood what each line of code was actually doing. After 14 years of writing code professionally, I thought I had lost the ability to feel amazed at what I am able to do. But I rediscovered that earlier this year when I realized that if I picked the right clients and the right projects, I could see the fruits of my labors and that is where I derive my amazement from now.
Needless to say the client in question didn't take my departure well. I sincerely regret that aspect of the situation, but making them "happy" required me to compromise values that I hold dear. The truth of course is that continuing to work with me would never have made them happy as we were destined to never make any real progress. The battle we were fighting was pointless. I have no doubts that one day they will wander over to this website and read this particular piece. When that day comes, I hope they at least come away understanding this: No matter how many mods one writes for a terrible piece of software, it doesn't change the fact that the core software is terrible. Band-aiding a gushing neck wound is not an acceptable response, no matter the situation.
In any event it was difficult but my ethics survived the situation relatively unscathed. It was the first time in my career that I experienced the joy of watching some ethical dilemma involving a client produce a conclusion that did not violate any of my standards. If there is one thing I have learned over the last year it is this: You can only be as honest with your clients as you are with yourself. Honesty is almost certainly the best policy despite the fact that it will rarely be the most profitable one. My clients aren't just my clients, they are my partners. For without them there would be no JPL Coding and without JPL Coding, my future in this profession would be quite uncertain I think. For the time being, I'm in it for the long haul and I'm looking forward to what the future has to offer.