My First Client - Thoughts
Posted: Wed Jul 23, 2008 10:58 am
I finished building and developing a backend for my first _real_ client today. I thought you guys might find it interesting to know what I learned through this whole month long process (yes. a month). Nathan approached me four weeks ago with a vague idea that his website wasn't as easy to use as he would like it to be. We sat down at a Starbucks and ironed out what I, and more importantly, PHP, could do for him. We decided that we had a few distinct goals to improve his existing website. Those goals were, make the navigation on the site actually functional (next and previous article links didn't work), fix the very broken emailer, create a system to easily upload new articles, switch everything to database driven content, and clean up the few small grammatical and display errors. All of this should have been fairly simple to do, and save for the following mistakes... it was.
Things I Will Do Differently Next Time - and other odds and ends
Developing all of the backend on my own server seemed like a convenient and hassle free way to do things, that is, until I tried to make it work on his server. I built almost all of the important bits of code on a server that was already set up the way I was used to things working. Sadly, Godaddy.com (the DEVIL) likes to set up their shared servers so that php 5 is disabled, their mysql connection strings are confusing as all getout (at first), their windows servers are the suck, the account management system is SLOW, and on and on and on. Granted, a large part of the problem was that I was unfamiliar with how they have things set up but even so, a lot of my time was spent dealing with headaches from Godaddy. If initially I had checked out how everything was set up on Godaddy, it would have saved me a ton of trouble.
Moral: Know the server you are coding for.
Closely related to the headaches with Godaddy was a time-wasting issue on account of poor coding choices. I used absolute paths for all the links and such that I created while developing on my own server, and the Godaddy server had a completely different setup that didn't jive with my code. The entirety of my code had to be pored through looking for wrong paths. Oh, then there were different connection strings for mysql (obviously) so I had to go to every page I had a connection string on and change it. Also very time consuming was an issue with magic_quotes. Godaddy has it turned on, so I had to make sure that stripslashes() was in appropriate places... I tried turning it off through .htaccess (no go), and I didn't have access to php.ini, so I had to manually deal with it. If I had included a header on all the pages, I could have inserted a few lines of code that would have effectively dealt with almost all these issues.
Moral: Writing the same code over and over? Use an include instead! Seriously.
I will never, ever, meet a client in their home again. Even though I know him personally, meeting in his home (for this purpose) was a rather large waste of time. It was very difficult to have any semblance of control over the meeting what with kids in the house, the difficulty finding the right files on his computer, and numerous other things. In two hours time I had managed to ascertain that yes, he did have all the source files for the existing site. Somewhere. In the end he ended up copying the files onto CD and giving them to me later (at Starbucks).
Moral: All meetings with clients should take place in a controlled environment. It's far more productive.
Another issue I had was I would tell him that a feature would be ready by X time, and it wouldn't be. This is in a large part due to issues I had actually focusing on work. This is the first time I've really tried to work from home, and it was far more distracting than I expected. I don't think this will be as big an issue in the future, but this time around, it was somewhat discouraging. Along with this was the fact that my client didn't really know when they wanted the whole project finished. I was told "oh, have it done in a couple weeks or so, I'm in no big hurry". In the future, I want a specific date to be finished by.
Moral: Know how to work steadily in your environment, and have a definite deadline
There is one thing that I did, however, that I really benifited from. When I started the project, I sat down and wrote down exactly what needed to be done. I seperated it into about 5 different parts, and focused on each one individually. It helped to have a sense of accomplishment when I finished one of the goals and it helped me to see how far along I had come. Additionally, having that list ensured that I didn't forget some major part of the project just because I forgot it.
Moral: Break your project down into smaller goals
Finally, I made sure to back up _everything_ before I modified any files on the server. This is just common sense. It also gave me a way to hand a CD to my client with the old site, and the new site on it, completely backed up. It's always nice to have a physical representation of work done and even though the client knows the site has changed, having the CD in his hand gives a more "real" sense of change. I dunno, maybe that's just me, but I'll definitely be doing that again.
Moral: Physical representations of hard to see work is nice to have
I learned a lot, and I'm really glad of the experience, it made me feel much more prepared to do a larger project. I hope all this can help someone else out there too. If any of you have any comments on how to improve some of the things I mentioned, I'd love to hear it!
Things I Will Do Differently Next Time - and other odds and ends
Developing all of the backend on my own server seemed like a convenient and hassle free way to do things, that is, until I tried to make it work on his server. I built almost all of the important bits of code on a server that was already set up the way I was used to things working. Sadly, Godaddy.com (the DEVIL) likes to set up their shared servers so that php 5 is disabled, their mysql connection strings are confusing as all getout (at first), their windows servers are the suck, the account management system is SLOW, and on and on and on. Granted, a large part of the problem was that I was unfamiliar with how they have things set up but even so, a lot of my time was spent dealing with headaches from Godaddy. If initially I had checked out how everything was set up on Godaddy, it would have saved me a ton of trouble.
Moral: Know the server you are coding for.
Closely related to the headaches with Godaddy was a time-wasting issue on account of poor coding choices. I used absolute paths for all the links and such that I created while developing on my own server, and the Godaddy server had a completely different setup that didn't jive with my code. The entirety of my code had to be pored through looking for wrong paths. Oh, then there were different connection strings for mysql (obviously) so I had to go to every page I had a connection string on and change it. Also very time consuming was an issue with magic_quotes. Godaddy has it turned on, so I had to make sure that stripslashes() was in appropriate places... I tried turning it off through .htaccess (no go), and I didn't have access to php.ini, so I had to manually deal with it. If I had included a header on all the pages, I could have inserted a few lines of code that would have effectively dealt with almost all these issues.
Moral: Writing the same code over and over? Use an include instead! Seriously.
I will never, ever, meet a client in their home again. Even though I know him personally, meeting in his home (for this purpose) was a rather large waste of time. It was very difficult to have any semblance of control over the meeting what with kids in the house, the difficulty finding the right files on his computer, and numerous other things. In two hours time I had managed to ascertain that yes, he did have all the source files for the existing site. Somewhere. In the end he ended up copying the files onto CD and giving them to me later (at Starbucks).
Moral: All meetings with clients should take place in a controlled environment. It's far more productive.
Another issue I had was I would tell him that a feature would be ready by X time, and it wouldn't be. This is in a large part due to issues I had actually focusing on work. This is the first time I've really tried to work from home, and it was far more distracting than I expected. I don't think this will be as big an issue in the future, but this time around, it was somewhat discouraging. Along with this was the fact that my client didn't really know when they wanted the whole project finished. I was told "oh, have it done in a couple weeks or so, I'm in no big hurry". In the future, I want a specific date to be finished by.
Moral: Know how to work steadily in your environment, and have a definite deadline
There is one thing that I did, however, that I really benifited from. When I started the project, I sat down and wrote down exactly what needed to be done. I seperated it into about 5 different parts, and focused on each one individually. It helped to have a sense of accomplishment when I finished one of the goals and it helped me to see how far along I had come. Additionally, having that list ensured that I didn't forget some major part of the project just because I forgot it.
Moral: Break your project down into smaller goals
Finally, I made sure to back up _everything_ before I modified any files on the server. This is just common sense. It also gave me a way to hand a CD to my client with the old site, and the new site on it, completely backed up. It's always nice to have a physical representation of work done and even though the client knows the site has changed, having the CD in his hand gives a more "real" sense of change. I dunno, maybe that's just me, but I'll definitely be doing that again.
Moral: Physical representations of hard to see work is nice to have
I learned a lot, and I'm really glad of the experience, it made me feel much more prepared to do a larger project. I hope all this can help someone else out there too. If any of you have any comments on how to improve some of the things I mentioned, I'd love to hear it!