Explaining the Field

Many clients have difficulty understanding why things take the time that they do. It’s always been a point of discussion during estimate time and can become a problem when something is added last minute to a project. I wanted to clarify some facts about the web development /design field to help avoid these problems.

The time necessary to develop a clean, well-organized, well-written application that adheres to the standards set by the W3C and community can often surprise clients and leads.

An example…
(more…)

Additional Policy Change: Specs

Since the recent policy changes we announced in January, it’s become necessary to expand on the new policy regarding project specifications. Project spec documents can be a chore sometimes, but they’re almost the most important aspect of the entire project.

The new policy from January requires that any projects above $1k have an official specifications document and (optionally) mockups that define the official scope of the work. This document needs to be started by the client as they document what they want, and finished on our end as we document the work and technology involved.

But what happens is that it’s often a chick-or-the-egg scenario where clients need an estimate before they can spend time doing a spec, and we need a spec before I can do an estimate.

Beginning immediately, we’re slightly modifying the policy:

We will provide a pre-spec estimate for initial approval. This estimate will clearly be labeled as pre-spec, but will not guarantee the final cost. Once approved, we will require a spec document/material to be submitted by the client. We’ll review the documents, add the technical portion, discuss the revisions, and then provide a final estimate. Before work begins, a signed copy of the project spec and the final estimate must be returned.

To help explain why this document is necessary and how it can be created, please read the “Project Spec Requirements” document.

2009 Policy Changes

Every year I make an analysis of projects and business from the previous year and make adjustments to my policy and procedures based on my findings. The latest changes for the next year are detailed below.

These policy changes will not impact existing projects at all. Existing clients should expect a bit more preparation prior to new projects, but with a better quality return in the end. Please contact me with any comments, suggestions, or questions.

These changes will be included in a revised copy of the client contract, which I will provide to all existing clients within the next few weeks.

Discounts

In the past I’ve offered several different types of discounts, and almost none of them applied during 2008. What I’ve also realized is that projects that have been heavily discounted tend to become a burden rather than an enjoyable project and the client and the project suffer the effects.

Policy Change #1: As of January 1, 2009 all previous discounts will no longer be available. Only a single discount will remain and it will be applied by request only. Clients will receive a $20 per hour discount for work that is beyond forty hours of work in a calendar month.

IM/Phone Time

Another issue that has arisen is clients conversing with me over IM. If I’m currently working on their project already then it’s not an issue, but if it’s for technical support or general discussion of non-urgent nature then it distracts me from my current task, and concentration is extremely important when programming.

Policy Change #2: As of February 1, 2009, all non-urgent IM and phone conversations that are longer than ten minutes will be billed at the minimum billing interval of fifteen minutes, meeting rate. This covers the “transition” time that occurs when I need to stop my current task and participate in the conversation. Urgent conversations are only those regarding serious technical problem that will prevent a client from using a live website or web application, or a time-sensitive question usually for estimating purposes.

Unless IM or phone is necessary, I encourage everyone to use email.

Automated Testing

Quality of work has always been a priority and in an effort to improve the quality of application code I produce even further, I will be implementing stronger release automation guidelines for larger projects.

Automated testing allows developers to build a suite of tests that may be run together to ensure that every function of the actual program is returning exactly what it should be in each situation. As the test collection grows the usefulness increases exponentially, and if done properly, will help prevent 90% if programming-related issues from reaching the client, and 100% of regressions.

Policy Change #3: For all new applications or components I will begin writing automated code test cases from the beginning of the project. This will require a bit of additional time and this time will be included on estimates, but will help reduce the time required finding and fixing issues manually.

For larger projects that I am the lead on, I will also enforce an automated deployment system so that we can deploy projects faster and reduce issues caused by human error.

Specifications Document

I began this business by requiring a description of the project in detail to avoid feature creep, and as my typical client type changed from one-time small business to recurring work from firms, I began relaxing this restriction. Over the past year I have seen that this document is essential for all large projects. I can’t calculate any exact number, but I’ve likely lost weeks worth of time due to gray areas in feature definitions. When I have to decline to add a feature that the client was expecting but I was not, it impacts the relationship, and the client perception of the project.

Although it’s more work for the client to provide this document, it save time, money, and relationships.

Policy Change #4: For all medium to large projects I will require an official specifications document from the client. This document will describe the expected functionality of each page and element within the project. It may use wireframes, text, or both. These documents will serve as guides for the project, and any feature that wasn’t described will be considered out of scope.

Contracts

A similar situation has been client contracts. I need to ensure that all clients have signed and returned their contract prior to work beginning.

Policy Change #5: All clients who do not have a signed contract on file already must sign and return a contract. All new clients will be required to sign the contract. Existing clients must sign and return the revised 2009 contract.

Subcontractors

I’ve had two subcontractors in the past few years and unfortunately the projects they were involved with became nightmares. I’ve learned that my main reason for my success is in the quality of work and my level of experience and knowledge with web technologies. When someone else comes in there’s a serious clash of styles, and an obvious lack of understanding of best practices.

Policy Change #6: No PHP subcontractors. I’ve lost one very good client because of one relationship and almost lost another. I’ve sacrificed thousands of dollars to repair projects and relationships.

Down-payments

For all new clients, I’ve always required a down-payment of one-third the estimated project amount. This practice helps ensure the new client is serious about the project and helps reduce issues with non-paying clients. However, I’ve learned that receiving a significant payment prior to doing work becomes demotivating during the project. It’s essentially a situation where there’s no reward after doing the work. However, something is still required to help prevent payment issues for new clients.

Policy Change #7: For all new projects below $20,000 for first-time clients, the down-payment required will be no more than $1000. Pricing guidelines as to what requires a down-payment have changed slightly, but they’ve all been reduced.

Post-Project Technical Support

Technical support has always been an issue because it’s something that clients should have access to, but it takes time to supply. I’m sure that my policy will change over time, and it may even vary between clients.

Policy Change #8: For projects that are likely to require technical support, time will be included in the original estimate unless you request otherwise. In this scenario, it will be billed at the current meeting rates. If you request that it not be estimated, then it will be billed an a standard hourly basis at the current PHP Development rate. Exceptions are if the question is a quick question that doesn’t require research on my part.

Aspen Framework Upgrades

All projects that have been built on the Aspen Framework have typically received free upgrades as the framework improved during last year. Now that the framework has reached a level of stability (it’s currently in release candidate stages), no projects will no longer receive free upgrades unless the project will continue development indefinitely.

Notes…

For those with web hosting accounts with me, I am going to spend time this Spring to convert everyone over to a recurring credit card system. I’m spending so much time invoicing and chasing down late payments that it would be beneficial for everyone.

My goal for 2009 is to try to reduce the number of distractions I deal with every day. I’ll officially be ending support for any personal projects except those under the Trellis Development umbrella.

Thanks all for a great 2008 – let’s make 2009 even better!

One Year

I officially began my first full day of web development work under Botsko.net on October 2, 2006. It’s been one year since then and things are going well. I’m still in business with a growing list of larger projects and a great list of clients I’ve really worked well with over the last year.

Since we have a new baby on the way we’re going to be turning my home office into a baby room, at least until we move into a house with four bedrooms. Until then, I’ll be working from a studio downtown along with good clients / great friends Red Studio and Point Creative.

Here’s to a great second year with some exciting projects currently under development.

Six Months of Freelance

I’ve been doing various forms of web design and development for ten years, although it was mostly just a hobby or a business on the side. In 2005 I began working hard to set myself up for an eventual transition into doing this full-time. Ironically, I began doing this full-time when I was least expecting to, despite all of my work. It’s been six months since I made the transition, so I figured it would be a good time to share some of the things I’ve learned.

1. Always Follow Up

I always try to keep in constant communication with clients – it helps me keep the project fresh in my mind as well as theirs. Sometimes I follow up and they’re reminded that they still need to do something – like pay. It works well with clients, but even better with leads. When I follow up with leads it has that “reminder” aspect, but it also shows that I provide everyone the same level of consideration and communication.

2. Know Yourself

When I began working at home I would become focused on watching TV, stepping outside, eating, cleaning, going through old magazines, playing games, etc. I’m a person who really needs to separate work and home life, so I moved myself into an office. There is absolutely nothing to do in the office except work. I keep an ever-changing list of tasks for each project on a giant white board, and I really don’t have any standard way to track projects as they’re all so different.

This situation works well for me because I’ve learned that’s what my brain handles best. You may be more efficient and more productive working at home without anything written down. The key is to learn what works best for you and to adapt your life to accommodate those needs. Once you’ve found the best method to make yourself productive, you’ll really start seeing the work get done.

3. Play

You need to force yourself to stop working. Around 11:30 or noon I wrap up whatever I was working on and shut everything down and I play a game or surf the internet. It gets my mind off of work, gives me some time to have fun, and it really helps break up the day. Having something in the middle of the day to look forward to also helps me get to work in the morning.

If I convince myself that I can play for a half hour if I do several hours of work, I’m pretty eager to get started knowing I have a “reward” coming. Even to this day I feel guilty taking time to play because I know how much work there is. Now that it’s my business I’m much more concerned about how much money is coming in, and time is money. You just have to learn that a bit of a break is required.

4. Don’t Assume

I’ve always loved the saying ‘when you assume you make an ass out of ‘u’ and ‘me’”. Never assume that you know what your client wants, because you’ll waste time doing the wrong thing. Never assume that a quick and extremely easy change works fine and doesn’t require testing, because something that’s connected will fail and cause problems. Never assume that you don’t need a file, a document, or an email, because right after you delete it you’ll realize why you need it. This last point is the basis for the final tip…

5. Keep Everything

Keep every email, every attachment, and every document. Keep any password you ever have (securely of course), keep all of the materials sent to you for a project. Keep all of your files, and if possible, keep as many revisions as possible. Keeping this much information is a waste of time if you’re not backing it up.

For example, my data is backed up once a day to two machines – one machine at work and one at home. No matter what I need I have access to it, whether it’s a logo graphic someone sent me six years ago or an ftp username/password for a current client. Keeping everything just saves you a lot of time and energy if anything is lost, in question, or needs fixing.

Plus, it’s embarrassing to go back to a client asking for something a second time.

Anyway, it’s been a great six months! Here’s to another six!

The Someday List

Every project spawns new ideas, whether additions or changes, that just aren’t possible with the current (workload, budget, time-frame, all of the above). When a project creates a nice and clean foundation, the possibilities often become infinite. Sometimes they’re just small changes, but most often they’re large changes that seem much more exciting than the current project ever did.

Changes that are large are almost always out of scope, and often become their own project. I always spend some time talking with clients about the ideas that they’ve had, as well as some possibilities that they’re not aware of yet. We begin keeping a list of each idea and as time goes by we re-evaluate the potential benefit and cost values for each idea. Months later when they’ve had time to think about which ideas are worth the investment we proceed with a project that we’re both excited for.

It’s very important to keep a ‘someday’ list no matter who you are – I keep a someday list for my own projects. Some of the ideas are just for fun and wouldn’t be of much use, and some might really increase the usability of an application. As time passes I get an idea of which items on the list I would like the most, and when the time comes, they’re the items I tackle first.

I’ve always focused on creating an application using a very clean and clear framework of code. Other developers, designers, and hopefully even the weekend web warrior should be able to go in and figure out what’s going on. By utilizing a myriad of classes and functions that work well together I allow for an excellent amount of scalability and expandability. This saves time not only in the beginning of a project, but makes future additions easier and cheaper for the client.

It’s also a list that let’s you have fun with projects. If you’re intentionally trying to add items to the list you often think outside the box, which is what it takes to be successful on the web today.

It’s just a place for the “wouldn’t it be cool if…”.

Botsko.net, LLC

In 1998 I began working under the name Jazit Web Design which lasted until mid-2003. In 2002 I started working with more advanced languages and concepts and felt that I needed to escape from something that resembled a pre-bubble business to a post-bubble one. I continued using my name instead (Michael Botsko Web Designs) even though I had little direction and it was still a hobby business.

In 2005 I spent several months figuring out a new direction for my business, with the goal of being self-employed by 2007. I worked with a marketing company to define a general direction for the next year. As recommended by their final report, I worked on a new identity for the business, re-did the website (and blog), and I started to act as business rather than an individual. I decided to use Botsko.net as the official company name.

To start out 2007, I’ve finally turned Botsko.net into an official business. There are all kinds of advantages I’m looking forward to, and it’s going to feel better knowing that it’s official. Filing services and excellent work by The Company Corporation.
Botsko.net, LLC. Official on 1/10/2007.

Managing Yourself

It can be pretty difficult staying on task when working for yourself. First of all, you know that no one is going to lecture you about taking time for personal things and the office mood is pretty laid back. It’s always been difficult for me to sit in front of a computer knowing I have work to do when computers also let you play games and waste your time. Sometimes I feel like I’m just not in the mood to program, and this can be a serious issue when I haven’t even started a project yet.

Staring at the glow of a screen thinking about a large project looming over me can be such a motivation-drainer that I end up not starting the projects for days. Falling behind causes a serious amount of issues which are decent motivators themselves. A delayed project means:

  • Customer does not see milestones when they were expecting. Small delays are never an issue because clients actually expect a few of them, but when there are either too many delays they begin to get nervous about what’s going on. My goal is to never miss a deadline, and it’s important enough to have it’s own question in my project evaluation.
  • Delaying anything doesn’t prevent me from doing work, so it’s best to just do it now and then move on. It’s really the same amount of energy, it just takes some additional get-going attitude now.
  • Late work means my earnings are off schedule and payments may not be coming in when I expected. This causes problems with earnings and income estimates. If I end up wasting time not doing any work, then I’ve lost money as well.
  • Delays cause chain-reactions that can only be reversed by burning the midnight oil. If I estimate seventy hours in December but I end up doing thirty of those hours in January, that’s a decent chunk out of available work time in January. Anything originally scheduled to begin would also be delayed, and we repeat the process over.

I’ve learned that I work best when I have things clearly organized and broken down. If I break down large projects into smaller chunks I find that the project is going to be easier to manage, and at the end I feel as if I’ve accomplished more. Here are some of the tricks I’ve used to manage my work time and motivate myself (most I’ve used for a long time but are more important now):

  • Organize. I purchased some standard charting tape and I’ve used it to create nine large boxes on a dry-erase board. Each project I’m currently working on gets it’s own box and I write down a list of my next tasks for each project. Every morning I highlight the tasks that I plan on completing by the end of the day with an orange marker. Once certain tasks are completed I erase them and write in the new ones. I keep a small section empty for quick notes. Having things written out in big letters and placed in a grid gives a very good visual idea of what work I have to do.
  • Give yourself enough work to last a few hours. Pick out some CDs or playlists that you can play straight through. They’ll act as a timer – once completed you can a fifteen minute break. Surf the internet, play a game, browse the iTunes music store etc. Do something fun so that you’re essentially rewarding yourself for doing that first chunk of work.
  • Have a lunch you can look forward to. A fresh, tasty lunch is a great way to break up your day. You’ll look forward to that meal all morning and knowing that you can have that once you’ve finished half of your list, you’ll work harder. You wouldn’t really be excited for a so-cold-its-hard-and-tasteless-sandwich-that-has-fused-together-ingredients now would you?

Starting a new programming project can sometimes be like an artist staring at a blank. If I haven’t really thought about how I should begin then it can be scary, and possibly can cause a delay. I need to force myself to sit down and think about how something needs to be done and how the specifics of any existing code/design will impact what I need to do. This is probably the most difficult part of most projects because I have no one to bounce ideas off of.

Sometime next year it may be necessary for me to a hire a junior developer, or at least sub-contract some work. Maybe then I’ll have someone to bounce ideas off of.

Organizing Yourself and Your Business

It’s been quite an adjustment for me going from a full-time job with my web business on the side to a full-time job that is my web business. Few of the tools I used could handle such a work load, and it was less than a week before it became clear to me just how behind I was. When you’ve been running a side business for several years you can get by with an excel-based invoice, a single computer, and a single place to keep the relatively small amount of files.

The lack of structure, organization, and separation essentially hit me over the head. I figured I would document what I’ve managed to figure out thus far, who knows, maybe it will be helpful to someone else.

Organization

Four weeks of doing this full-time has tripled the number of clients, projects, emails, and phone calls I need to work with everyday. Clearly it was too much information to remember alone, so I’ve enlisted the help of several tools to assist me.

  • Gmail -I’ve been using it for a few years as my primary email, but I’m surprised at how easy email management is whether I have ten emails a day or a hundred. It’s spam filter works very well for me, and honestly Gmail is the most amazing email “client” I’ve ever used. I really enjoy the Google Maps feature – when clients send addresses to me I can simply click on a link to google maps, as Gmail scanned the email and found the address. However, I’ll soon need to begin downloading copies of everything, just in case.!
  • Google Calendar – An excellent application that does what I need it to.
  • Backpack – I’m still only using the free service, but I may soon need to upgrade. It really helps me keep a to-do list and notes, and having separate pages is nice. I currently don’t use the files feature as much as I like. Most of my files are emailed to me from clients, so Gmail has become the storage area for those (besides my local archives).
  • RapidFax – My fax machine was destroyed a few years back when a heatwave melted the toner to the gears inside. I wanted to avoid paper piles and I didn’t need a second phone line, so I went with RapidFax. For $9.95 per month you can send faxes from tons of popular file formats, and receive faxes to your email in PDF format. Very cool!
  • Wufoo – I’ve created a basic project evaluation for clients to fill out so that I can keep a close eye on my performance. As with backpack I’m still using the free service, but it works for now. In the future, I’ll write my own evaluation tool but I just don’t have time now.
  • KeepPass – I’ve used this to securely store my passwords for about two years now, but it’s even more important because I get all kinds of ftp, mysql, ssh passwords on a daily basis. It’s a small application that’s excellent at storing the information securely.
  • A plain old dry-erase board – I’m a kind of person who needs to write things out in a very temporary place. I use a 6×4′ dry-erase board to take meeting notes, draw lists of tasks remaining for the next day, etc. Writing a task down actually takes half the amount of work necessary to manage them in any online tool.

For some of you wondering – yes, I still do use my notepad generator.

In years past I simply managed my client work from Excel estimates and invoices, and I kept a basic record of everything in an embarrassingly ugly and poorly-written tool called Mango. I developed Mango as a very basic tool to help me keep track of clients, estimates, and invoices. Unfortunately, it’s still the only tool that handles what I want. My dream application would be one that handles:

  • Lead contact info.
  • Client contact info.
  • Tracks estimates and produces estimate documents based on a template I can fully customize. Associates an estimate with a lead/client.
  • Tracks projects and allows me to enter time spent and amount charged. It needs to be very flexible, not based on exact time-tracking or set-amounts.
  • Tracks invoices, and produces invoice document based on a template.
  • Tracks payment information, associates with project.
  • Reports on earnings per year, project stats, lead stats, estimate stats, and client stats.

I’ve tried several applications so far but nothing seems capable of what I want. There are several applications that do one of the three major sections – contact management, project management, and billing. I’m already using three different methods, so I don’t think I should take the time to move over to three separate applications, although I may need to. If anyone knows of a tool I should try, please let me know. Eventually, I’ll end up writing my own (again).

Legal

I’ve been doing a lot of reading lately about the legal aspects of running your own business. I revamped my project contract to be a bit clearer than before – I had never really needed it before so it was never an issue until now. I did a lot of research and even wrote a blog post that’s been sitting in my draft folder for several months. Maybe I’ll finish it and post it soon, now that it’s fairly complete. It was really important for me to define project scope, timeframes, client requirements, payment terms, etc. Several of the resources I list at the end of his post were helpful in writing up a contract.

It’s also going to be necessary to be sure my business follows the laws of my state (Oregon) and is properly recognized as a business. While I still have some investigation work to do, I think it’s best for Botsko.net to become an LLC. To put it simply, that’s the best type for people in this position, and from my work with Wells Fargo I’ve realized it’s the best for where I am right now. Plus, many of the clients I work with are also LLCs.

To file here in Oregon it’s going to be around $350-400 depending on which law firm I go with (Oregon filing fees included).

Someday I’ll need to get an employer ID number from the IRS because there may come a time when I need to hire someone to handle the marketing/administration aspects, however that’s quite a a ways down the road so it is not a priority right now.

Accounting

For the rest of 2006 I’m just going to handle it myself, but after that I’m going to get an accountant. I’ve realized that a lot of the things I pay for will now be deductible – trade magazines, books, supplies, machines, services, even the hosting costs for Squibbles and botsko.net.

It’s even more important to be sure I have a way of keeping accurate records for tax purposes, whether I have an accountant or not.

Systems

Now that I have a lot more data to store and protect, I have had to reorganize my folder structures. I keep a separate drive on my main machine with a folder called “botskonet”. Inside I’ve broken things out a bit. The important folder inside botskonet is called “Clients”. The client folder hierarchy is:

/botskonet/Clients/Client_Name/[Optional_SubClient_Name]/Project_Name

This system will help keep things organized even when I have thousands of folders in there, it will still be easy to find things. I took the same idea and applied to a new CVS repository (I know, I know, subversion is better). So my CVS repository for client stuff is essentially the same thing:

cvsroot/Clients/Client_Name/[Optional_SubClient_Name]/Project_Name

I suppose I would also like an application that could link up with CVS/Subversion and the filesystem, but now I’m just dreaming! The files are protected from any outside access and they’re all password-protected.

I still use Bugzilla for both internal software projects and client work that has reached a fairly mature stage. I’ve outlined some basic guidelines for myself that I’m still doing well with.

Resources

Here are my favorite resources that I’ve come across in the last month of research. I hope you’ll find them as informative as I did.

I found myself at this article by ParticleTree almost everyday.

Here are some others:

http://www.gyford.com/phil/writing/2006/10/26/a_beginners_guid.php
http://www.unixwiz.net/techtips/be-consultant.html
http://www.garrettdimon.com/archives/steps-to-becoming-a-freelance-web-developer
http://www.cameronmoll.com/archives/000643.html
http://37signals.com/svn/archives2/small_biz_101_how_to_get_started.php
http://www.sitepoint.com/blogs/category/selling-web-design-services/ (the latest entry has little to do with the topic, but the others are interesting!)
http://www.sitepoint.com/print/fire-your-boss-home-freelance
http://megillustrations.typepad.com/beetlegrass/2006/08/anniversary.html

Thanks everyone for reading! I am really looking to hear from you all. Until I feel it necessary to enable comments again (darn spam!) please send an email to botsko@gmail.com.