I am a programming/engineering freelancer working as a consultant for a mid-sized corporation. This mid-sized corporation has many clients, including a very large financial company (one of the top 10 financial companies in the world), who we will call "Client X". Years ago (before I started working here), my client created a custom fulfillment website for Client X.
I was originally hired to simply implement a new design over the website's existing infrastructure, but soon, I was being given new tasks - bug fixes, small enhancements - and then larger projects - new applications for the website, etc..
The majority of these tasks and projects have been managed using very rudimentary spreadsheets, email communication, and the occasional meeting. I have continually asked for Functional Specifications and/or Business Rules documents from Client X, but they never respond with either. Instead, I'm given a list of one-line tasks/projects and deadlines for each (which are usually unreasonable).
In addition to this, Client X rarely helps with any User Acceptance Testing, and instead expect me to simply take their requests, create them, and deploy and have everything work exactly as they requested.
When bugs occur, their feathers get very ruffled. They complain about the bugs, and about the time it takes to fix them, etc..
Now, I know that as the sole software engineer for my client, I am responsible for the bugs. However, I feel without proper Project Management, it is more difficult to create bug-free code. As a result of lack of assistance from Client X, I've had to make myself responsible for performing all of the following tasks for each project:
- Writing Functional Specifications
- Creating Mock-ups
- Writing Technical Specifications
- QA Testing
- User Acceptance Testing
- Bug fixes
- Project/Task Updates to the client
- among other things....
Now, don't get me wrong, I enjoy each step of the process - I'm a perfectionist, and I like to be organized. However, I have to admit, that I'm not a great QA or User Acceptance Tester. I'm not a "normal" user of the website in question, so I can't think of every scenario to test. Also, the time it would take to properly test each feature takes away from time that I could be working on other projects for Client X.
It's a catch 22: they want their tasks/projects done quickly and bug-free, but they don't realize that those two things don't always exist together.
The first step I've taken is to start writing Testing Scripts, and to run through these for each task/project I work on.
But, there are drawbacks here as well. I'm being paid as a Programmer/Software Engineer. I have no problem being paid my existing rate to test applications/features, but it seems ridiculous to me to pay me as much as they are for this aspect, when they could be paying someone a lot less (idk, $15-20/hour?) to be a tester. Client X complains about the financial implications of me working on bug fixes, but to me, it would just make sense to hire a tester for a lot less money to run test scripts, and free up my time to write code.
I've tried explaining these things to my supervisor, who is 1. the liaison for Client X 2. the original programmer for the website, and 3. a VP for my client, but he sticks to the old adage of "the customer is always right", and thinks that if they don't want to write Functional Specifications and they don't want to help test and they don't want to use proper Project Management, that WE have to deal with it.
So, what are some ways I can "deal" with this environment/client?