My First Client - Thoughts

Express the business side of your digital lives. Share your experiences and/or your comments regarding a business or organization.

No advertising.

Moderator: General Moderators

Post Reply
User avatar
Chalks
Forum Contributor
Posts: 447
Joined: Thu Jul 12, 2007 7:55 am
Location: Indiana

My First Client - Thoughts

Post by Chalks »

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!
alex.barylski
DevNet Evangelist
Posts: 6267
Joined: Tue Dec 21, 2004 5:00 pm
Location: Winnipeg

Re: My First Client - Thoughts

Post by alex.barylski »

Some of those are common mistakes...not just by newbie's but by seasoned professionals. Maybe not the coding horrors like using absolute paths but this:
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.
Working from home is tough. It's easy to fall into lazy mode and not get anything done. It's why it's important to setup a separate office space in your home or apartment, which indirectly jacks up the cost your client must pay. I find having a separate room really helps, as I can leave the room and be finished for the day, otherwise you fall into that trap where you *never* leave work and you start loosing sleep and becoming less effective.

Predicting time of completion becomes easier and easier but you will not ever likely nail it 100% -- maybe once by fluke chance. Any project larger than 1000 lines is hard to predict because of changing requirements, unanticipated caveats, system problems, etc.

As for the hosting providers. GoDaddy is good for one thing: Domain name registrations. Don't host with them ever, find a reputable shared hosting provider that offers the following at a minimum:

- SSH/FTP access.
- MySQL
- PHP
- Unlimited sub-doimains
- Unlimited MySQL databases
- Unlimited email accounts

The unlimited might be pushing it but if it's not a decent amount they are likely very restrictive.

Ideally they will disable safe mode for you upon request and enable SSH. Ask them if they can map sub-domains to other sub-domains, etc. If they answer NO to any of these questions, they are a bad choice for a shared hosting provider.

Shared hosting is a tough as nails industry, very competitive. Only do business with the guys who charge fare and are willing to bend over backwards to meet your unique requirements. Software on your local machine should run as smoothly on any given shared host, as long as you don't design the application to security conscience.

For example my application, everything is stored outside the document root, everything but a config file and the index.php entry point. Getting my application to work on shared hosts is sometimes impossible because they don't let you have access to outside the doc root.
User avatar
califdon
Jack of Zircons
Posts: 4484
Joined: Thu Nov 09, 2006 8:30 pm
Location: California, USA

Re: My First Client - Thoughts

Post by califdon »

Those are very useful points and clearly explained. I'm sure they will be valuable to many here. Thanks for posting!

I have used GoDaddy.com for about 8 domains for over a year and my only complaint is their really clumsy control panel interfaces. I've found their tech support outstanding. My shared hosting (cheapest) account has unlimited domains, unlimited subdomains, 25 MySQL databases (either 4.2 or 5.0) (before extra charge), several 100MB email inboxes, PHP 4, 150GB storage, 1,500GB bandwidth, FTP, SSL. I'm sure there are other, perhaps better deals, but I've never knowingly suffered a server outage and, as I said, I've found their phone support outstanding, although it's not a toll-free number.
User avatar
Chalks
Forum Contributor
Posts: 447
Joined: Thu Jul 12, 2007 7:55 am
Location: Indiana

Re: My First Client - Thoughts

Post by Chalks »

Hockey wrote:As for the hosting providers. GoDaddy is good for one thing: Domain name registrations. Don't host with them ever, find a reputable shared hosting provider that offers the following at a minimum:
I don't host my personal sites with godaddy. It was the client who did, and I hated having to work with them. I use hostgator, and they have all the features you mentioned (plus live online support) for very reasonable prices. I really like them.
Hockey wrote:Working from home is tough. It's easy to fall into lazy mode and not get anything done. It's why it's important to setup a separate office space in your home or apartment, which indirectly jacks up the cost your client must pay. I find having a separate room really helps, as I can leave the room and be finished for the day, otherwise you fall into that trap where you *never* leave work and you start loosing sleep and becoming less effective.
Unfortunately I don't have the space to set up a second workstation (let alone a separate office). However, I think that one thing that will help me is if I install another OS on my spare hard drive. That way if I boot into linux, I'm working. If I boot into windows, I'm gaming. :D Frankly, what I really need is the clear separation between work and free time.
califdon wrote:Those are very useful points and clearly explained. I'm sure they will be valuable to many here. Thanks for posting!
I hope so! It was certainly a learning experience for me.
User avatar
volomike
Forum Regular
Posts: 633
Joined: Wed Jan 16, 2008 9:04 am
Location: Myrtle Beach, South Carolina, USA

Re: My First Client - Thoughts

Post by volomike »

I'm sending you a PM with more details. However, here's the summary of what I wrote:

* PHP on Windows. Gaaah!

* Yep, relative pathing is the way to go.

* You're exactly right on client interaction. More details in my PM.

* Lots of advice on staying focused and working from home:
- get out of the bedroom
- get some good office furniture and some organization -- get the brain thinking this is like showing up in a real office and work is expected
- learn various CMSes, frameworks, libraries, and addons that can speed up your delivery time
- write your own automation for things like form generation, admin CRUD, and then customize the outputs from those per each client need
- start accumulating object classes to do certain tasks when PHP libraries only take you so far or when your frameworks only take you so far
- know your limits and outsource your design and chopping
- get rid of most paper and sticky notes, using nothing but a "Current Events" folder for loose papers and a single College-Ruled notepad, with everything else going into a file cabinet very neat and orderly
- visit freelanceswitch.com and sitepoint.com, as well as this site, at least once a week, do a lot of thinking about the advice from these sites, and see if it can make you better and faster
- turn off the social networking unless you absolutely have to use it; use blogs under anonymous aliases instead; blog only once a week or when you're frustrated
- skim read your email two times a day and no more unless you're anticipating a need for more interaction with it in a given day; catch up on the finer details on that email, and missed email, on the weekends

* Smaller goals. Yes, and I'll add on that. First, after initial discussions are complete, before doing anything with your hands and your mind, get your contracts out of the way regarding NDA, non-compete, and what you both will agree to do for each other in either his contract or yours or both. Next, learn how to help your clients (at least those who don't know how) to write a 1000ft functional spec and some scanned in wireframes that they did on paper and scanned in. Start with that and do your Q/A by phone and email for a couple days. Next, convert the wireframes to actual web pages that are just ugly grey forms with lorum ipsum text inside to help the client see what the site might look like. He'll have to imagine the styling on the pages initially. Get him to then tell you if that's what he's looking for as far as content, placement, and how features will work. From there, he'll either outsource the design and chopping, or you'll outsource the design and chopping, or you'll handle the design and chopping yourself. Even if you don't have the site designed and chopped, you can continue working with the grey pages to make a functional site. From my past experience, designing all the grey pages first before attaching PHP code, including the grey pages for the administration functionality, saves tremendous time and makes the site easier to build.

* Backups and SVN. Yep, use those at least 2 and 3 times a day.

* Purchasing domain names and hosting. I use Moniker.com and a2webhosting.com. I'm not a fan of GoDaddy -- I've read too many rants on blogs about their bad policies. On hosting, A2 has a small business plan with CentOS Linux, PHP5, PostgreSQL, MySQL, SSH, cpanel, FTP, and unlimited domain parking all in the same web space -- what a steal! And if I need my own VM on the web (a VPS solution), then I use webkeepers.com. On some projects, you can use multiple VMs to accomplish tasks. The downside with many VPS solutions are that they can be expensive or have too low of RAM. Webkeepers is cheap, but their RAM is very low on each VM unfortunately. However, it's cool fun to have a VM on the web with unlimited power to do inside there what you want to do. (However, note that webkeepers has rules, and they must be followed.)
Post Reply