HOME      WEB DEVELOPMENT      WEB DESIGN      PORTFOLIO      BLOG      ABOUT JS      CONTACT JS







Archive for 2009

Taming the Cat…Tomcat and Coldfusion 8

Wednesday, February 4th, 2009


Ok, this week on Thursday Tips Day, I have a rather unique situation I was working on for a client.  The issue:  To get Tomcat 6 working on a Windows 2003 server running IIS and have ColdFusion 8 running on the Tomcat install.

This is not as easy as it would seem.  According to the Adobe ColdFusion 8 site (www.adobe.com/coldfusion) Tomcat is not directly supported as is was in the past.  The only mention of Tomcat in any of the installation documentation is only in a JBOSS type instance.  So here’s the first question…why would someone want to do this?

The client’s decision is actually a very good one.  Those of us familiar with ColdFusion over the years would agree that JRun is not the best Java server around.  In fact it sometimes causes more harm than good.  And in some unique situations it really ends up crashing the server and causing all kinds of Coldfusion errors when it gets too bogged down.  Now in CF8’s Enterprise Edition, the server monitoring tools are very good in letting you know what is causing the overloads.  Sometimes it’s your own code doing it.  Sometimes it’s not.  However for those of us not willing to spend the $4,000+ to purchase a copy of Enterprise Edition, we’re back to the same page as always.

Anyway, by choosing a Java server such as Tomcat, which has plenty of public support and has been running Java apps for quite some time very reliably on both Linux and Windows platforms (and even a Macintosh here and there I’ve seen), the client will be able to run their JSP apps, plus leverage Tomcat’s excellence in running CF8’s Java based programming technology.  Therefore a very lean and mean system and as the client puts it, “a smaller footprint” on their server.

The Installation Sequence

Ok, so to start, go ahead and download the latest version of Tomcat (http://tomcat.apache.org/download-60.cgi) and install it on your Windows2003 Server.  You can do the direct services install or the longer more in depth binary install, but both work just fine.  After the installation is complete.  You should easily be able to browse to http://localhost:8080 to get the nice little Tomcat welcome page.

Next download a copy of CF8 from Adobe’s website (http://www.adobe.com/products/coldfusion/) and install that on your server next by using the “Deploy as J2EE, and as a .WAR” installation.  When the installation is complete you should have a .WAR file most likely if you used the defaults in your C:\ColdFusion8 root directory.

Stop the Tomcat Server via your services or direct command line. 

Now copy the .WAR file into your {TomcatRoot}\webapps directory. 

Start the Tomcat Server and within a few minutes, Tomcat should have expanded all of your directories into the webapps folder.  So at the end you should have a /cfusion directory sequence in your webapps directory.

Stop the Tomcat Server again. 

Ok, now for a fun part.  Open up notepad and create a .bat file called setenv.bat and place it in the {TomcatRoot}\bin folder.  Place the following code in that .bat file making sure to change the bolded areas to your exact folder structure:

rem Set a few variables.
set JAVA_HOME=C:\Program Files\Java\jre1.5.0_14
set CF_HOME=C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\cfusion
set CF_WEB_INF=%CF_HOME%/WEB-INF

rem Concatenate binary file directories into a single variable.
set CF_SHARED_LIB=%CF_WEB_INF%/cfusion/lib
rem The following variable must be on a single line.
set CF_SHARED_LIBS=%CF_SHARED_LIB%;%CF_SHARED_LIB%/_nti40/bin;
%CF_WEB_INF%/cfusion/jintegra/bin;
%CF_WEB_INF%/WEB-INF/cfusion/jintegra/bin/international

rem Add libraries for binary files to the Windows system path.
set PATH=%PATH%;%CF_SHARED_LIBS%

rem Set JVM options to enable sandbox security (all on one line).
set CF_SECURITY_JVM_OPTIONS=-Djava.security.manager
-Djava.security.policy=”%CF_WEB_INF%/cfusion/lib/coldfusion.policy”
-Djava.security.auth.policy=”%CF_WEB_INF%/cfusion/lib/neo_jaas.policy”

rem Set JVM options for CORBA. Uncomment this line if vbjorb.jar is not in
rem your JRE’s lib/ext directory.
rem set CF_CORBA_JVM_OPTIONS=-Xbootclasspath/a:”%CF_WEB_INF%/lib/vbjorb.jar”

rem Consolidate JVM options.
rem * Uncomment this line if you’ve configured CORBA
rem set CF_JVM_OPTIONS=%CF_SECURITY_JVM_OPTIONS% %CF_CORBA_JVM_OPTIONS%
rem * Uncomment this line if you haven’t configured CORBA
set CF_JVM_OPTIONS=%CF_SECURITY_JVM_OPTIONS%

rem Populate JAVA_OPTS, which will be used by the catalina.bat file
rem when starting the JVM.
set JAVA_OPTS=%CF_JVM_OPTIONS%

Ok, go ahead and start Tomcat back up, and browse to localhost:8080/cfusion/cfide/administrator and with any luck, you should have the nice welcome screen of the ColdFusion 8 admin staring you in the face.  Go ahead and configure your instance with datasources, etc. and place any .cfm files you want to run in the /cfusion/cfide/ directory.

That’s it.  I’m now in the process of getting the .cfm files to render in other directories and folder structures in the rest of the Tomcat so you can browse to other directories with .cfm files and get them to render.  Until next week!

Why Arizona is the next “Orlando”

Wednesday, February 4th, 2009


Ok, the first question you are all asking is, “what does Arizona being the next ‘Orlando’” have to do with websites and web development.”  The answer is, plenty!

Websites are marketing tools.  Whether you have a great product or service you want to sell, or have a great relationship with a distributor that you have the upper hand in giving your customers the lowest price available…the web is the best place to get it out there to so many people in such a short period of time.

Even if you don’t have your own super-duper SEO working your site, while expensive and not as powerful as SEO natural listings, pay per clicks are out there and if you have the money, can get your site out in front of thousands, maybe millions, within just a day or so.  But let’s say you don’t have a product yet….and want to get some feedback and generate interest to develop a product or service.  The web is another fantastic way of generating “buzz” about something not even built or designed in hopes of generating enough interest that it eventually develops into a lucrative business venture.

Right now, I have my eye on a website that is of particular interest to me and I would like to get it in front of many other Arizonians, as well as other folks who visit Arizona on  a semi-regular basis.  The website is www.decadesusa.com and is a site working at bringing a “Disney-like” theme park to the Southeast Arizona valley.  Their concept is a great one….music through the decades, which will translate into theme park rides, restaurants, a water park, nightlife, and a four-star hotel.

As said above, this is a “concept”.  It is not built, it has just recently passed a major hurdle in the Arizona State Government, but still has a little ways to go before becoming a reality.  The website itself is pretty well designed, and of course being the overly critical nit-picking perfectionist I am…could use some improvements in design, SEO, and functionality, but overall a great way to start getting the buzz out there for something that could mean a very state-changing event for Arizona.

Ok, my two cents on Arizona and why it is better than Orlando.  First of all, I’m from Orlando, Florida and lived there for over 15 years.  The area is chock full of entertainment, great hotels, and fantastic dining.  And no matter what anyone says, it is all due to “the Mouse”.  Yes, Universal Orlando is awesome as well, but it is mostly due to the genius of Walt Disney and his vision to take a new approach to entertainment and family vacationing.

Now, let’s think, the busiest times of the year for Disney/Orlando is June, July, August, and a little of September.  That is also the times of the year in central Florida where the temps hit in the high 80’s to low 90’s, with the humidity way up there as well so much that just breathing makes you into a human shower.  The reason Arizona has never been considered a prime area for tourism and travel is because of the misconception that the desert heat is just unbearable in the summer.  Not true.  If you consider the heat-index, which is a fancy way of determining just how comfortable the temperature is with all factors (temperature, humidity, etc.) considered…you’ll find that during the busiest times of the year for central Florida, the heat index is actually LOWER than Arizona when we’re in the 100’s.

Let’s also consider the wonderful afternoon showers and thunderstorms that occur in Orlando during these busy times.  They hit every day just at about 3pm…causing everyone to run for cover in the parks, and have to get out of the pools at all the resorts.  In Arizona….it’s a desert….enough said.

Also…have you ever tried sitting out back at night in a non-screened in area in Orlando?  You might as well be ringing the dinner bell for the mosquitoes and their cousins.  Again…not a problem in Arizona.

Lastly, every now and then a little weather event called a hurricane pops up.  It is the biggest waiting game in the history of the human race.  Everyone wakes up in the morning, logs into NOAA and sees where the latest track is projecting the hurricane to hit.  It messes up vacations, businesses, cruises, you name it.  Arizona is pretty well situated that it shouldn’t get any hurricanes and and doesn’t have the tornadoes that usually accompany big tropical storms. 

So in my humble opinion, Arizona…Phoenix…specifically….is really where theme park developers and hoteliers should be looking.  With modern “cooling” features such as good design of ride queues, and plenty of shade, it is very easy to see how Decades USA could take Arizona into a brand new area.

So check out their website if you live in Arizona.  Or, if you know someone who lives in Arizona or visits the state…send this link along to them as well:

http://www.decadesusa.com/show-your-support/index.php

Be sure to tell them to mention in their comments that you learned of the site from Justice Solutions LLC.  Maybe they’ll let me be in one of the parades….ha!!!  Until next time, happy webbing and coding!

Doug.

Make Testing a Part of Your Contract

Wednesday, February 4th, 2009


I’ve recently changed my contracts to include some specific information about testing and testing scenarios.  You’ll recall my blog about how important testing is to the success of a website retaining its visitors, but I’d also like to point out how testing can really get in the way of your contractual obligations as well.  Take this example (and no Mike M. this isnt’ you….LOL)

You have a contract which outlines what a site will need to do….allow a company to login, create a job for a customer, do the job, bill the job.  Sounds simple right?

However throw in the variables such as, they don’t have any standard billing methods (not ones that could be followed by an application at least), multiple scenarios of “exceptions”, and a staff that doesn’t seem to talk to one another.

Now from a legal perspective, if the contract is simply written outlining the issues above, we’re sunk.  The client can take as much time as they want to test, to work out their own billing practices, etc.  However if you add a paragraph which specifically outlines how the system will be tested and what to do if “exceptions” to those rules come up, you’ll be in much better shape.

So here’s my paragraph (feel free to use in yours, and send me an email letting me know you found it helpful):

 


 

18. Delivery & Guarantee
(a) The application as specified in this Agreement will be considered “delivered” when all items outlined in the application task list have been satisfied. Satisfied will be defined as allowing a user with step by step instructions to use each item in the application task list without an error on the most current browser edition of Microsoft’s Internet Explorer and Mozilla’s Firefox. 
(b) Any testing performed on the website which raises business decisions to be made by the Client will not be cause for delaying the progress or delivery of the application, and will grant JS the right to code the application to adhere to a “typical” standard for that industry to keep the project moving forward.  Any modifications required will need to be addressed, priced, and paid in a separate addendum to this Agreement.
Example: Client’s billing process is not specific for each possible case that may come through the application.  This requires a long analysis of the business’s billing practices and delays the progress of the application.  In this scenario JS has the right to perform a site modification which will satisfy normal business billing methods.
(c) Any “special scenarios” that have not been specifically accounted for in the application outline or addendums to this agreement will be considered out of the scope of this Agreement and will need to be quoted and agreed to in an addendum to this Agreement.
 
(d) While computer “bugs” are a normal part of any computer programming environment, it will not allow Client to withhold payment to JS unless a specific item of the website fails to work on a regular basis with instructions as mentioned above since computer bugs can sometimes be attributed to an end user’s method of using the website, their computer environment, etc. However JS will always attempt to accommodate a majority of the typical browsers, operating systems and user methods when programming the website.
 
(e)     JS agrees to stand behind their work for one (1) year from the application’s delivery date to insure that all items are working properly since it is sometimes several months before a particular function of the website is discovered not to be working as agreed upon. Client will not be charged for these adjustments and fixes to the code. This guarantee does not include, and is not limited to the following list of possible circumstances where JS would not be responsible for repairs to the website: 

a.       A new browser version appears in the web community and said browser does not allow the site to function as originally intended.

b.      A government regulation or law requires changes to the website to comply with said regulation.

c.       Client’s payment processor changes their requirements to process payments from the web.
d.   Client’s method of doing business changes, therefore requiring modifications to the site.

 


 

By using this in your contract you are doing two things.  First, you are letting the client know that they must provide you with any “exceptions” to the standard rules they are asking you to code, knowing that if they are that important, it will affect the price of the application. 

Second, you are making certain the client understands that if their testing of the application raises a red flag they didn’t raise ahead of time, that shouldn’t delay your ability to keep the project moving.  If you don’t, the project will get sidebared while they sort out their business issues and you’ll move on to another project, get involved there, and then be forced to come back to this one and somehow squeeze it in.  Not a good scenario. 

Please don’t hear what I’m not saying….lol……this is just as much of a protection for the client as much as it is for the developer.  I tell all my coders it is their responsibility to keep the client on track, not the other way around.  By doing so you’ll deliver an application as promised, on time, and hopefully within budget.  It is that important…so go ahead and start using this in your contracts and as I said before, send me an email at doug[at]justicesolutionsllc.com and let me know your thoughts.  Til then….happy coding.

Doug.

Give Them a Chance to Breathe

Wednesday, February 4th, 2009


Have you ever visited a website that had so much information on the home page you just didn’t know where to begin?  I’ve been to them too.  It almost gives you a headache. 

Marketing 101
Some of the best marketing minds have written (and I remember this from my own marketing classes in college) it is best to give your visitors a chance to decompress when they enter your store.  Now of course they were referring to retail stores, but the same theory applies to websites.  Take these two sites (click for a larger view):
CNN Clutter   Qwest

Both are nicely designed, but the 2nd clearly gives you a moment to take in everything, figure out where you’re needing to go…and then go there.

Be Nice to Your Users Through Simple Elegance.
As CNN clearly demonstrated…they have more links and loops because they are in fact a news company.  However, as a user coming to their site….I get overwhelmed.  If they would just set up a few custom paths for their users, I think their site would be much better received in the web.  So remember this term….”Simple Elegance”.  It is the term we here at Justice Solutions coin for our design concepts.

Custom Pathways
I’ll probably dedicate a blog to this next week and come back and link to it from here, but to give you a preview…I’ve been telling some of my larger clients that if you have more than 20 different places any user could go to from your home page….consider the use of custom pathways.  Because even the most busy and huge sites could probably take the 100+ links they have (to major sections that is…not individual articles, etc.) and categorize their users to fit into maybe a handful of choices.  So instead of a vacation destination having tons of links to hotels, flights, restaurants, attractions, etc.  Change it to “Plan My Trip”, “What to Do When I Arrive”, “Where Can I Eat”.  Then once in that subpage…give them the options to plan their trip with links to your flights, hotels, etc.

Well that’s it for this week.  Remember….Simple Elegance….let the user take in your site….admire the design….hell you paid for it….so might as well let your users enjoy it too.  Until next week….happy coding.  Chief Superhero Doug, out.

Doug.

Go Speed Racer Go!

Wednesday, February 4th, 2009


Hi everyone.  Need to keep this light for a Friday since I have had one helluva week.  So what better way then to play movie critic….well not really.

Yellow Flag on the Track
I promised my son that I would take him to see Speed Racer today.  As a father, I so enjoy taking him to movies that he is really looking forward to.  However, given that this wasn’t Monsters Inc., or Garfield…I was somewhat concerned if in fact he would enjoy it.  Strangely enough, I was pretty concerned for myself being that I grew up watching Speed Racer cartoons and as strange as they were, I really liked them.  However, making it into a live action move….definitely needed a yellow flag on the track.

Green Flag
The good news…we both loved it.  Even at 2 hours and 15 minutes, he was on the edge of his seat the whole time.  So by now you’re wondering what Speed Racer has anything to do with web development and design, so I’ll let you off the hook.  The marketing job of a web designer is to cater to their client’s target market.  However, when the audience ranges from young to old, our jobs become very tough and we need to take cues from the Wachowski Brothers as to how to do it well.

Designing for the Masses
Even though this movie has been getting blasted in the movie reviews (which is not surprising considering Underdog got blasted even worse and is one of mine and my kids favorite films) it is a great example of how to take a wide audience range and piece together a presentation to keep all parties interested.

Speed Racer catered to boys obviously because of the cars and some pretty intense racing scenes, however it also catered to girls because of some great humor by Speed’s younger brother, Spritle and his pet chimp, Chim Chim.  I also think the bright colors appealed to both as well.

For the adults, the wives/mothers/girlfriends who may have gotten dragged to this film by their husbands/boyfriends/kids seemed to really enjoy the storyline.  It actually surprisingly had a very good one, and I don’t think the CGI graphics hurt either.

For the guys, who doesn’t love a lot of action, fast cars, and some pretty nice eye candy courtesy of some scantily clad female airline attendants, vegas showgirl looking grand prix driver escorts, and yes….a very nice outfit worn by Christina Ricci.

Websites are Much Like Movies
So if you approach web design from the same thought pattern, you essentially can design websites that can cater to a wide array of audience members.  Therefore potentially reaching a wider customer base.  Even if the members themselves viewing the site aren’t potential buyers, if they like the site, they will probably mention it to someone who does. 

And don’t rule out putting in some things for kids.  Let’s say you are designing a site for a pest control company.  Creating a nicely organized, informative website with good monthly prices will probably get the attention of the adult homeowners you are looking for. 

How Kids Can Be Helpful in Reaching Your Buyers
But let’s say you throw in a flash ant farm game, or something like pick up the food before the cockroaches get it (I know I need help).  And one family who is looking at pest control companies finds it on the internet…sees the game….has their child play it….who then tells their friends at school about it…they all go home…ask permission to play it (we hope) and then the parents of those ten kids see it….viola’….you’ve just reached another 10 homes through young adults who probably think bugs are a lot cooler than you do!

So if you get a chance, go see Speed Racer and see how you can appeal to a very wide audience range, and at the same time…see what changes you can make to your own website to appeal to a wider range as well.

Happy Coding!

Doug.

On the Fence with Rails

Wednesday, February 4th, 2009


Ok, unless you’re a person who just doesn’t care what types of frameworks or technologies that are out there, you’ve probably heard of Ruby…and most likely “Ruby on Rails”.  Lots of books and opinions have been written about this particular framework and I thought I’d put in my quick 2 cents worth about the subject since I’ve recently finished up another Ruby/Rails project.

The Real Deal
Ok what’s the big deal about it?  Good question.  In a nutshell…speed.  I have to admit, the ability to create a model view framework that takes care of your inserts/deletes/reads/updates in literally 2 seconds or less has to be a draw for any developer who has been through this mundane procedure before even with the advent of some helpful modelers (see my blog on PHP and asp.NET ones: http://www.justicesolutionsllc.com/blogcfm/1/2008/02/57.Getting-the-CRUD-out-in-your-code.cfm).

Ok so what else?  Well there are some very helpful ‘helpers’ that Ruby provides that does actually make things quite easy when needing a membership module built, or a quick and easy shopping cart, etc. 

Custom Pathways are another neat little feature of RoR.  If you want you can defined a custom path based upon a users input, a page they enter on, a word they type after the page.  It’s really a super version of taking 404 error rewrites and doing something useful with them in a very easy to use fashion.

The Down
So there’s gotta be a downside right?  Otherwise everyone would be RoR-ing about it.  (btw…RoR is short for “Ruby on Rails”).  Anyway, what I’ve found personally is an issue with the server speed and sometimes the paths you create take a while for good ol’ Roob’ to figure out and deliver the page.  If you use a “mongrel” server base vs. Apache or IIS (yes it can run on it) things do improve. 

However, there are some tweaks and tunes you’ll need to do in order to get it to run just right. 

It’s a typical Linux type scenario that most of us have been through.  Yes…the Linux based server config of Lamp (Linux/Apache/MySQL/PHP) does run very well and hardly ever crashes….however setting up that ideal system with your own custom needs sometimes does become its own beast.

Like all frameworks there are some cool features that unfortunately create other problems.  Some are not obvious until Mongrel crashes unexpectedly on you like it did me when I was using Ruby’s neat little refresh Ajax control that basically can be used to update data in a <DIV> every second if you’d like.  The problem….it also submits the variables of a POST form as a blank at the same time if you’re not careful.

“Let Me Explain…no….there is too much….Let me Sum Up.” (I’ll award a gift certificate to a national chain restaurant to the person who emails me at doug@justicesolutionsllc.com with the answer to where that quote is from.  No Matt Krause…you are not eligible….lol)

So should you go Rails?  The answer like I say to so many new clients who ask me the same question about asp.NET, PHP, ColdFusion, Flash, and yes…Rails…is simply this.  It depends.  It depends on your budget, your site’s future development needs, the availability of a developer who knows RoR…etc. 

If you have a site that is pretty simple that maybe requires a blog, some simple data entry and data display…I’d say go Rails in an instant.  You could literally build that entire concept in probably an hour or two at the most.  But, if you’re going large scale and have a lot of unknowns in your development and business plan path…perhaps another language may work a bit better for you.  Again, it depends on your developer.

So there’s my two cents on rails.  For a look at this latest Rails project we’ve launched recently and continue to develop on (btw….great company with a great concept), check out http://www.gqex.net when you get a chance.

Happy Coding!

Doug.

A new kind of Napster…

Wednesday, February 4th, 2009


If you’re a programmer like me….I find it’s almost a necessity to have a steady stream of tunes going to keep the creative juices and energy flowing during those coding marathons we always seem to be faced with.  However, sometimes putting together a playlist takes a lot of time that we don’t have.  So your alternatives are taking a chance and listening to one of Napster’s preloaded lists, or finding a few radio stations that you like and flip back and forth between them when the music starts to go off the beaten path a bit.  Oh and let’s not even get into how annoying commercials are.

Enter Pandora’s Box
Those of you familiar with Greek Mythology’s accounting of Pandora will recall she was created by Hephaestus and molded out of the earth and given a jar (box) which she unfortunately opened and released all of the evil and stuff into the world.  Yep….woman gets blamed again….but did I mention I have the WE network on right now? 

Why I’m not quite sure of how they came up with the name, Pandora.com (Pandora Radio) is anything but a collection of evil.  It actually is quite the opposite which is maybe why they chose the name?  Picture a collection of tens of thousands of songs all at your beckon call?  Yeah…I know iTunes and Napster does that too.  However what if I told you these folks have been analyzing these songs to break down rhythms, lyrics, artists, albums, decades, etc. and then put them into a clever music finding algorithm which would make the guy on CBS Television’s “Numbers” a proud man.

Pick a Song any Song
When you first get to the website…you’ll find it quite plain…you almost think you’re on the wrong site.  But trust me….just enter in any song, artist, etc. and let the magic begin.  I went ahead and typed in “Men at Work” since I’m such a slave to the 80’s music. 

Within seconds I had a custom radio station on my list called “Men at Work Radio” and literally over a 100 songs from not only men at work, but also many other artists and songs having similar beats, styles, etc.  I

Thumbs up….Thumbs Down
Now, while it’s not an exact science, I have to admit with the few requests I’ve put into the system, I’ve been pretty happy with the lineup of songs Pandora.com came back with.  If there’s one that kind of makes your head go “Huh?!?”…just give it a quick thumbs down…Pandora moves on to the next song automatically.

Oh…and when you log back in the next day and click on that station…the songs are both different and/or shuffled automatically…pretty damn cool if you ask me.

Give it a Try!
So if you’re stuck in front of a computer, or your computer is also a media center for your home and want a nice steady stream of songs instantly….give Pandora a try.  Let me know what you think.

Until next time…

Doug.

5 Things Web Developers Should Do to Avoid Getting Screwed by their Clients.

Thursday, January 15th, 2009


This has been bothering me over the past couple of months and I just thought I’d share some random thoughts about things you should make sure your clients understand about web development, their expectations, and what to expect from you as their developer through, during, and after the initial development process.

  1. Let the clients know that you do actually have other clients and even though their project isn’t less important than the other clients, but please be respectful of the time that needs to be shared across all client lines.
  2. You do get what you pay for and sometimes a little bit more.  Meaning my old philosophy was to always err on the side of the client…if there’s a contractual problem that results in a few extra hours, then go ahead and do it.  However I now realize that even though you go the extra mile, the old addage my mother used to say about giving people an inch and they’ll take a yard still holds true to this day.  So give the client what they paid for…and then if there’s a problem and they want something extra, explain to them why they need to pay for that as well.
  3. Write your contracts with no guarantees.  One of my favorite films is Tommy Boy and if you remember this film, his father “Big Tom” would tell potential customers who wanted a guarantee from him about his auto parts that you can take a piece of s**t, put it in a box and slap a guarantee on it…however all you’re guaranteeing is that it is just a guaranteed piece of s**t in a box.  The same holds true in web development.  If you do quality work, let that work speak for itself.  If they want a guarantee, let them know that you provide a service contract that they can purchase that will cover certain issues if there is a problem.
  4. Don’t let yourself be taken advantage of…have your clients pay for the programming hours before they are used.  I know this is a very bold statement, however in this wacky economy right now it’s necessary.  I have 4 clients who are 90+ days out on their payments.  I’ve even shut down a website because this person hasn’t contacted me about the final payment or anything.  It’s not fair to the developer who takes a lot of time to produce quality web development work and then gets left holding the bag.  If you go into a grocery store and say…bill me…they’ll tackle you and maybe even prosecute you for shoplifting.  In the web world you should space out your payments enough so that a client doesn’t waste a ton of money if the developer doesn’t pull through, but still can satisfy the web developer’s need to get paid for their time.
  5. Always keep detailed records of the time you’re spending on a project…even if it’s a flat fee project.  The reason…you can always show your client the amount of hours a certain task has taken and if they believe they’re not getting enough work from you, you have a good backup for those discussions.  It probably would help sending those hours summaries each week as well.

I’ll probably have a few followups to this subject, but if you have any horror stories you’d like to share and what you’ve done to avoid them in the future, I think we’d all like to see them.  I’m not ragging on all clients…I have several really really good ones who are great overall…but there are a few which really get your goat…and it really isn’t fair.  So take these suggestions for what it’s worth and I hope it makes for a better client experience for you and your web development company.