Programming is one of the most gratifying, yet risky businesses you can go into. This arises from the fact that the nature of the business is highly subjective. The custom software design process can gyrate out of control from things that are misunderstood or other considerations that were never factored in from the beginning. It can escalate into a lot of extra work and take on a life of its own due to the subjective progression of the design process.
Despite this reality, you can still make it work financially as long as you work for a good customer. But what happens if you aren’t working for the right type of person? After you commence work on a software development project, you may find out that you could be working for someone who has no respect for you, your time or even your contract. An unscrupulous person may try to make you do a lot of extra work that was never contracted for without offering additional monies to compensate you. Or someone may change his or her mind back and forth many times, forcing you to do much more work that you never expected or planned for. These things have happened to me a number of times. And it is not just a simple matter of walking out on someone who isn’t being fair with you - they could potentially come after you with a lawsuit!
So what does one do to prevent these situations from occurring? I have tried many different approaches over the years to combat this problem and they didn’t really work too well, until I found one that did. I will discuss this momentarily.
First, I would like to talk about what inspired the management approach I use for my programming projects. I live in Cleveland, Ohio USA. Driving through our winters here can be perilous, because of all the snow and ice on the roads. To stay safe while driving, I have learned to handle my car a certain way so I don’t lose control and hit other vehicles or end up wrapped around a telephone pole. When I need to slow down and/or stop on a snow covered road, I gently pump the brake every 2 or 3 seconds. This will gradually disrupt the car’s forward momentum, allowing me to safely bring my vehicle to a slower speed or a complete stop. I first read about this in a gas station pamphlet I found long ago.
After years of trying various ideas to unsuccessfully thwart people who were unreasonable to work for, I decided to adapt my winter driving technique to a mechanism for managing my software projects. I have learned from hard experience to never let someone accumulate a large number of unpaid labor hours. An unscrupulous person can use all those unpaid hours as leverage to force me to do more and more unauthorized programming work before I can finally (and hopefully) get paid. It’s almost like giving a crook a license to steal my time.
I began to think about all the software engagements I had done going back to 1990 when I first entered business. The vast majority of the winners were the programming engagements where I was able to bill for my programming services in an incremental fashion - hourly rate or piecemeal that approached an hourly rate. This was consistently true over all the years I had been in business.
I would like to point out that I have used a contract filled with excellent liability disclaimers since 1994. And it has done a spectacular job of insulating me from potential liability. Even so, that alone still wasn’t protecting me from the kooks who were out to take advantage of me. Obviously, I needed to bolster my contract with something that would really stand up to the crooks. I came up with the idea that I would screen prospective project customers with a “terms of service” web site (it’s on the same domain as my custom software site). The URL is “http://analyzohiosoftware (dot) com/tos (dot) html”. Whenever I receive an inquiry from my website’s contact page, I send them a link to my terms of service site. Some people may think I’m being too harsh by forwarding this link so quickly, but I don’t care. It’s imperative that I screen and eliminate people who aren’t serious about paying me. Think of it this way - once the bad ones get in they are crowding out the people who are really good to work for.
This section from my terms of service site describes the main idea I use for my screening process:
Billing Policy
I accept cash, check, money order, or official bank check as means of payment.
I will submit an invoice to the customer for every 10 accumulated hours. Also, I will submit an invoice if the accumulated hours are less than 10 accumulated hours and they represent the end of the current programming engagement.
My labor rate is $85(USD) per labor hour. These hours will be noted on a time sheet log along with the date worked and the initials of both the customer and myself.
Payment on all billings are due within 30 days after which interest may be charged at a rate up to the highest amount permitted by Ohio, USA law.
The customer acknowledges that I shall not be required to perform any services contemplated by the agreement while the customer is in default of its obligations under the agreement.
What this does is “pump the terms of service brake to disrupt an unscrupulous person’s forward momentum”, so to speak. It is a limitation that governs how many unpaid hours a project customer can accumulate before I must be paid off. Then programming work can resume on my part. It is either 10 unpaid hours or less than 10 unpaid hours if at the end of the current programming engagement - it’s that simple. And I would also like to point out that this has served as a very strong deterrent to those who have no intention of being fair and businesslike with me. Most of the time they don’t even become customers - they just move on. Regardless of what business you are in, it is imperative that you maintain control of what you are doing at all times.