2009 Policy Changes

Every year I make an analysis of projects and business from the previous year and make adjustments to my policy and procedures based on my findings. The latest changes for the next year are detailed below.

These policy changes will not impact existing projects at all. Existing clients should expect a bit more preparation prior to new projects, but with a better quality return in the end. Please contact me with any comments, suggestions, or questions.

These changes will be included in a revised copy of the client contract, which I will provide to all existing clients within the next few weeks.

Discounts

In the past I’ve offered several different types of discounts, and almost none of them applied during 2008. What I’ve also realized is that projects that have been heavily discounted tend to become a burden rather than an enjoyable project and the client and the project suffer the effects.

Policy Change #1: As of January 1, 2009 all previous discounts will no longer be available. Only a single discount will remain and it will be applied by request only. Clients will receive a $20 per hour discount for work that is beyond forty hours of work in a calendar month.

IM/Phone Time

Another issue that has arisen is clients conversing with me over IM. If I’m currently working on their project already then it’s not an issue, but if it’s for technical support or general discussion of non-urgent nature then it distracts me from my current task, and concentration is extremely important when programming.

Policy Change #2: As of February 1, 2009, all non-urgent IM and phone conversations that are longer than ten minutes will be billed at the minimum billing interval of fifteen minutes, meeting rate. This covers the “transition” time that occurs when I need to stop my current task and participate in the conversation. Urgent conversations are only those regarding serious technical problem that will prevent a client from using a live website or web application, or a time-sensitive question usually for estimating purposes.

Unless IM or phone is necessary, I encourage everyone to use email.

Automated Testing

Quality of work has always been a priority and in an effort to improve the quality of application code I produce even further, I will be implementing stronger release automation guidelines for larger projects.

Automated testing allows developers to build a suite of tests that may be run together to ensure that every function of the actual program is returning exactly what it should be in each situation. As the test collection grows the usefulness increases exponentially, and if done properly, will help prevent 90% if programming-related issues from reaching the client, and 100% of regressions.

Policy Change #3: For all new applications or components I will begin writing automated code test cases from the beginning of the project. This will require a bit of additional time and this time will be included on estimates, but will help reduce the time required finding and fixing issues manually.

For larger projects that I am the lead on, I will also enforce an automated deployment system so that we can deploy projects faster and reduce issues caused by human error.

Specifications Document

I began this business by requiring a description of the project in detail to avoid feature creep, and as my typical client type changed from one-time small business to recurring work from firms, I began relaxing this restriction. Over the past year I have seen that this document is essential for all large projects. I can’t calculate any exact number, but I’ve likely lost weeks worth of time due to gray areas in feature definitions. When I have to decline to add a feature that the client was expecting but I was not, it impacts the relationship, and the client perception of the project.

Although it’s more work for the client to provide this document, it save time, money, and relationships.

Policy Change #4: For all medium to large projects I will require an official specifications document from the client. This document will describe the expected functionality of each page and element within the project. It may use wireframes, text, or both. These documents will serve as guides for the project, and any feature that wasn’t described will be considered out of scope.

Contracts

A similar situation has been client contracts. I need to ensure that all clients have signed and returned their contract prior to work beginning.

Policy Change #5: All clients who do not have a signed contract on file already must sign and return a contract. All new clients will be required to sign the contract. Existing clients must sign and return the revised 2009 contract.

Subcontractors

I’ve had two subcontractors in the past few years and unfortunately the projects they were involved with became nightmares. I’ve learned that my main reason for my success is in the quality of work and my level of experience and knowledge with web technologies. When someone else comes in there’s a serious clash of styles, and an obvious lack of understanding of best practices.

Policy Change #6: No PHP subcontractors. I’ve lost one very good client because of one relationship and almost lost another. I’ve sacrificed thousands of dollars to repair projects and relationships.

Down-payments

For all new clients, I’ve always required a down-payment of one-third the estimated project amount. This practice helps ensure the new client is serious about the project and helps reduce issues with non-paying clients. However, I’ve learned that receiving a significant payment prior to doing work becomes demotivating during the project. It’s essentially a situation where there’s no reward after doing the work. However, something is still required to help prevent payment issues for new clients.

Policy Change #7: For all new projects below $20,000 for first-time clients, the down-payment required will be no more than $1000. Pricing guidelines as to what requires a down-payment have changed slightly, but they’ve all been reduced.

Post-Project Technical Support

Technical support has always been an issue because it’s something that clients should have access to, but it takes time to supply. I’m sure that my policy will change over time, and it may even vary between clients.

Policy Change #8: For projects that are likely to require technical support, time will be included in the original estimate unless you request otherwise. In this scenario, it will be billed at the current meeting rates. If you request that it not be estimated, then it will be billed an a standard hourly basis at the current PHP Development rate. Exceptions are if the question is a quick question that doesn’t require research on my part.

Aspen Framework Upgrades

All projects that have been built on the Aspen Framework have typically received free upgrades as the framework improved during last year. Now that the framework has reached a level of stability (it’s currently in release candidate stages), no projects will no longer receive free upgrades unless the project will continue development indefinitely.

Notes…

For those with web hosting accounts with me, I am going to spend time this Spring to convert everyone over to a recurring credit card system. I’m spending so much time invoicing and chasing down late payments that it would be beneficial for everyone.

My goal for 2009 is to try to reduce the number of distractions I deal with every day. I’ll officially be ending support for any personal projects except those under the Trellis Development umbrella.

Thanks all for a great 2008 – let’s make 2009 even better!

jQuery Serialize List Plugin

During several recent projects I needed the ability to serialize an unordered list and pass it back to the server. A google search didn’t reveal much and I didn’t want to go digging this functionality out of larger plugins like sortable, UI, etc.

I decided to wrap it all up into a jQuery plugin so that it’s easier to use in different projects. The serialized un/ordered list may be sent back to the server, and for example in PHP, will be interpreted as an array.

You may use this plugin by simply calling it on your UL or OL.

$(document).ready(function(){
    $('ul').serializelist();
});

You may download the most recent version directly from github:

http://github.com/botskonet/jquery.serialize-list