Like all good craftsman, I take great pride in doing high quality work in a responsible manner. Professional software developers must avoid temptations to do the “quick and dirty” shortcut because their experience has proven that that route is often longer and rife with danger. It’s this same experience that also helps guide us where we can “cut corners” a little.
On a recent project, however, I committed just about every mistake in the book. (And yes, there is a book. There are LOTS of books). To wit:
0. I thought this was a “small” project that didn’t need to be treated the same as a “real” project.
I’m listing this one first because it’s really the root of all of the other mistakes. As first proposed, this site was going to be a couple of simple pages – no menus, no reports. Of course once the client saw what was possible, they wanted more and the scope creep started.
1. I coded it using a language that I’m not completely comfortable with.
Since it was going to be a small project, it’d be the perfect opportunity to learn a new language, right? Independent consultants don’t often get “paid, on-the-job training” so we often look for these chances to acquire new skills. Yes, this was the right project to brush up on my latent PHP skills.
2. To compound the problem, I used a framework that was completely new to me.
I was smart enough to know I wanted a framework, so I took some time to research what a good framework for PHP was. A friend had recommended CodeIgniter, but lately had taken a shine to CakePHP. I liked what I saw: it was nicely maintained and documented and used the up and coming MVC model, which I wanted to get more familiar with as well. The problem is if you don’t know the underlying language solidly, using any framework steepens the learning curve.
3. I developed straight to the live website, instead of a local host.
Wow, this was a big one. By creating an “FTP” project, I needed to be continuously connected to the ‘net in order to get at my project. Far worse, if I tried something new that messed up the site, it was immediately visible to my client who may have been checking on the progress. Bad bad bad.
4. I put the site on a subpage on my website.
Since this was a temporary site (it’ll be up for only a few months while it serves its purpose), I decided to save the client a little money by just making it a subpage of my own site rather than create a separate domain for them. This just looks unprofessional, and also drove up my site’s bandwidth usage. Plus it make loading and saving files frustratingly s-l-o-w!
5. I used Visual Studio, when it was not the right tool for the job.
I am enamored with Visual Studio 2010, so I though heck, why not try to use it for this PHP project? Here’s why: It doesn’t have native PHP code support, so you don’t Intellisense or local debugging. The lack of code-coloring cost me 4 hours one morning while I tried to track down a ‘ that was entered as a `. Can you see the difference? VS2010 can’t, so neither could I. I’m aware of VS.PHP, and tried using Eclipse, but switched over to NuSphere’s PHPEd – and wow that made the coding a real pleasure.
6. I didn’t test the site using every version of IE back to version 6.
Once I got the site going, it was evident that a menuing system would be needed, so I created a nice CSS-only menu. I notified the client to test it out, and they came back with “It doesn’t work in our browser.” What browser? IE, of course. IE has lousy support for CSS standards, by default. [I can feel my blood starting to rise as a type in all these mistakes] Thanks to the MadDotNet User Group, we were able to figure out how to force IE out of “Quirks” mode and into “Standards” mode, but it took a lot of my time.
7. I didn’t put the project under source control.
There’s really no excuse for this. I have accounts on ProjectLocker as well as Beanstalk, but didn’t use either of them for this project. Thankfully it hasn’t bitten me yet, but I should know better.
To be fair, I did quite a few things right with this project as well, and it did come in on time. I did learn a TON of new stuff, which is always rewarding, including the lessons listed here. I’d love to hear your feedback on this.