About a month ago I was contacted by a company who had a big job (from my perspective as a freelancer), a WordPress conversion project, and a very short deadline. I chatted with the project director, the developer and a few others and was hired to do a small proof-of-concept task to both determine if WordPress was really going to be a good platform for what they needed, and to try out my company to see if we would be a good fit.

The POC went very well. It served as a good intro for me to their site’s structure and content styles, and the client was quite happy with the results. They asked me to write a full proposal that would include:

  • Creating a custom WordPress theme based on their current site’s design. It needed to be a pixel-perfect copy.
  • Migrating about 60 pages of content to the new platform.
  • Creating a set of 6 custom templates that would be used as the basis for another 30 or so pages.
  • A good deal of custom Javascript and PHP programming to integrate with their CRM and cart.
  • Helping with the WordPress migration and installation on their Amazon host.
  • Training for the client’s Marketing and Development teams.

Taking the Proposal to the Next Level

I’ve gotten quite good at writing estimates in the last few years, but this one needed more care.

I have a spreadsheet that I use for estimating hours that I used to feed all the info I had about this project into and came up with a preliminary number, but I knew that was just the beginning; I was very afraid of putting in something that was too low and terrified of comitting to something so big and fast without some input from someone else who had been there before. I needed to find out what team members I needed to pull in and get some estimating help from a friend who runs a web development studio and has more experience with quotes for this size project.

I met with my friend and things really started to flow from that meeting. Ron had two employees that had some time available in the following two weeks, which coincided with the short deadline, and between them they could provide the custom programming and some plugin support for about 25 hours of time. This was great! He helped me tweak my estimate and get in an appropriate amount of time for project management and unforeseen contingencies, and in the end I felt comfortable with the range of fees we provided to the client in the final version of the estimate.

Filling Out the Team

Writing the proposal helped me get a better handle on who I needed for the team. I had my programing covered, but I called on another colleague familiar with WordPress to do some tasks for me like managing widget placement and SEO tags on all pages, and then put out a call on the Women Designers’ Group mailing list, where I’m a member, for a few others who were experienced with custom theming for WordPress.

I was very lucky to find two women who had the time available to commit. One had a lot of custom theming experience similar to mine, and the other wound up contributing as quality control.

Jumping In With Both Feet

The client was happy with our quote and so they hired us and we were off and running. We had roughly 10 days to get the project to a point it was ready for extensive review and testing by the client’s Development and Marketing teams, and then three more days until it went live. The quick timing was due to some advertising that was coming out right after the launch date.

I’d never managed a project so big nor had I ever had so many subcontractors working on a single project. In order to help me keep everything together and moving forward steadily I used two tools:

  • activeCollab, my project management site, where I set up milestones and tasks for everything in the project development sequence, and where we posted files and held discussions between team members and the client’s contact people.
  • A Google Apps spreadsheet that served as the master guide for everything. This spreadsheet took about half a day to put together. It showed every page on the site, it’s statuses for content migration, custom templating and programming if needed, notes, review/QA status and other elements. One of my subcontractors serving as QA/QC checked off pages in review as they were completed, and the other subs had access to mark their progress on various tasks for each page.

The client was pleased with our implied level of understanding of the minutiae of the project based on the spreadsheet and basically let us go, checking in every day and asking/answering questions as needed. They kept a very close eye on our work, and during the entire course of the project we ran into very few snags. Things went pleasantly smoothly.

The Team!

Could not have done this without the subs, in particular the custom themer that made it possible for us to offer additional features in the templates that we originally told the client would not be possible given the short timeframe, and the programmer that took the initiative to move things forward based on ongoing conversations with the client’s lead developer.  The choice of subs turned out to be very nearly perfect and it was fortuitous that everyone on the team had the time to throw at this project during the work period.

Launch and Beyond

We had a few hours of hiccups when the site was migrated from my production server to the client’s Amazon Web Services hosting, but the project launched on time  and the client was very pleased. I provided training sessions and extensive documentation for them, and we’ve established a strong working relationship that is moving into Phase 2 at this time.

The Most Important Things I Learned

  • Allow plenty of time for project management and be sure to put in an equal amount of time for contingencies because you just never know what’s going to happen.
  • Get the right people to help.
  • Stay organized, used tools accessible by all team members to stay on top of every task taking place across the board.
  • Find some time away whenever you can. I wound up with a nasty bacterial infection during the launch phase that began as a simple cold, I’m pretty sure it was due to the 12-14 hour days I put in near the end.

And, having a good client is also a huge contributing factor for the success of this project. The Marketing and Development staff and the project manager for the client were all passionate about their company, knowledgeable (or enthusiastic and willing to learn) about how our contributions would be affecting their daily work after launch, and easy to work with, and that was refreshing; it helped us keep moving forward at a rapid pace with few interruptions. The project was complex but the experience was great for me. I’m looking forward to working with this client in the future.

I know I should have been doing this before, but as part of my January ‘business decluttering’ I finally got a CRM.

Finding something that’s inexpensive, good-looking, is hosted somewhere besides my server and is reasonably feature-rich was harder than I thought. I settled on Capsule, which is really a perfect fit for me. It’s got a nice interface, it imported all my clients from a .csv file with no problems and is free for up to 2 users, and only $12/month for unlimited users. So far, so good…

Work was a little slow midsummer. It’s really picked up in the last 4-5 weeks – a number of new projects getting started, and enough work that I hired a second intern this week. But during the lull I seem to have strayed a bit from my ‘ideal client’ mentality.

I’m working on a few jobs where the client brought the design and just wanted some ‘design advice’ and coding. I won’t do that again anytime soon – I find it really frustrating to offer well-considered advice, only when asked for, and have it ignored, or worse, be told that I don’t know what I’m talking about. That’s not the kind of client I enjoy working with. I like partnering with people who value what I can bring to the table, not just my skills as a codemonkey. But here I am…

I took one of those jobs because it offered me a good opportunity to get some experience in a niche market where I’d never done any web development work. I think that was a good move and will be worth some frustration; the development parts are challenging and I love a challenge.

But the other one, it’s one of those situations where my instinct was on the fence. It didn’t say ‘run away’ clearly, which is what usually happens. It just said ‘meh.’ So I took the project mostly because I was in a slow work period. I’m being paid fairly; it’s just frustrating to see what could be a really beautiful website  build around a finely-detailed, high-end product instead looking like something from the mid-to-late ’90’s. Sigh.

Teeth gritted, I carry on and learn another lesson about the importance of choosing the right people to work with for the right reasons.

Issues with slow or nearly nonexistent email services for my hosting clients during a RAID rebuild earlier this week scared me – enough to start investigating some new ways of managing and growing NOCO Hosting. This was only the second time in almost 3 1/4 years that I’ve had a problem that couldn’t be fixed very quickly, and it was a really frustrating few days (both for me and my clients).

A few changes I’ve already implemented:

  • Compiling an offsite contact list that I can use to reach clients in the event of an emergency. I already had this in place, but many clients had never responded to my requests for an offsite email address – they’re still using ‘me@mydomain.com’ for their account ‘www.mydomain.com.’
  • Creating a new Gmail address for NOCO, primarily for sending out notifications.
  • Compiling a list of SMS/text message contacts for clients who prefer to receive their notifications that way.

And some other things upcoming:

  • I’ll be adding some dialogue and changes to the hosting registration form that require an offsite email address as the primary contact address for any account.
  • I’ll be splitting client accounts between several servers to reduce by 50% the chance that any one client will b affected by a server issue.
  • I’m investigating DNS failover services now, and will be putting together a pricing package to offer to all my clients. I want to see who might be interested in such a service before I formally get it, but I think it might be a good additional offering for NOCO even if no one wants it now.
  • I’ll definitely be implementing one of the DNS failover services for my own business sites; I’ll probably try ZoneEdit because they offer their services for free for the first 5 domains

I’m also connecting with other hosting resellers and hosting providers in the Meetup group I co-founded, Fort Collins Internet Pros. Brainstorming with those guys might lead me to some other ideas I haven’t even considered yet.

Frustrations like the one this week make me take a step back and consider whether it’s really worth it to even offer hosting. But I think that it’s a value-added proposition for my clients (one-stop shopping, so to speak), and it’s nicely profitable. Until that changes, I just need to continue what I’m doing – communicating early and often with clients when the extremely rare server issue does come up, and doing what I can to lessen the impact.

I removed a difficult element from my business life today, but when my husband suggested we go out to dinner tonight to celebrate, I found I didn’t really feel like there was anything to get that excited about.

I kind of feel like I’ve barely survived drowning in the ocean and am now crawling back up the beach. There could still be some problems ahead.

You know how dead you feel after swimming in the ocean and being beaten by the sun all day? I feel like that.

I’m glad the project is over. I’m glad it’s going to launch under the direction of a friend who’s another developer, because I’d love to see the site live. But I don’t feel like I’ve begun to really feel free of all of it yet.

Deep breath. One more. Keep moving…

That’s a lesson I hope I’ve learned now: I’m firing one today.

I had no idea how much stress a single difficult client could bring into my life – but now I know. I hung onto the project for dear life because I really loved it, even though the client was so hard to deal with in just about every way. But now I know I should have listened to the small group of designers who told me to fire her six weeks ago. <Bangs head against desk again.>

I’m usually very good at catching a weird vibe from a potential client, but not in this case. Not until many weeks into the project.

Even so, I should have fired her. There were many opportunities since mid-July, but no – I just gritted my teeth and hung in there. But it really wasn’t worth it – I’m not going to get much out of it financially, and I doubt the site will still look like my design when it finally launches. It was really beautiful and that’s what I feel worst about – that and all the extra time I sunk into the work without being compensated.

I feel stupid for some of the mistakes I made in allowing this client and project to get out of hand – but I’ve started working on an overhaul of my business practices that will help to curb that in the future. So that’s a good result that will hopefully make my studio a better business all around.

Tomorrow I hope to hand over the finished product and get my little final payment. Then this client will be out of my life and I can start devoting more time to the clients with whom I really enjoy working. In the meantime, I’ll try to remember how I feel right now the next time a client like this one appears and nip it in the bud before it gets so bad.