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!

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.

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.

One Month In

One month ago today I left my web developer position with TechTracker and immediately began focusing on building up client work. I’ve been doing web work in some form or another for others since 1998, and while it began as a hobby business it quickly evolved into a way to make some additional cash.

In 2001 I forced myself to keep up to date with the latest and greatest and managed to turn that knowledge into some basic web work. I formed a few relationships with marketing companies and graphic design firms, and suddenly found the business growing. In 2004 I really began paying attention to how well it was working out, and I began the first steps of planning to make it my full-time job.

In early 2006 it was clear that I was fast approaching the level necessary to sustain me full-time, but I was turning down a lot of work because I was working a full-time job, supporting a family, etc. I worked for several months revamping my website, forming a professional image, and trying to prepare myself for the eventual flip.

It came much earlier than anticipated, and the opportunity was a surprise. I began devoting my time to pulling in additional clients and I began working to forge new relationships with companies that would provide recurring work. It’s now been one month since I began and I’ve surprised myself with how much opportunity was out there.

I’ve gotten some excellent work and the variety of it has been enjoyable, and I’m about to begin some larger projects which will be nice. I’m beginning to figure out what type of project schedule works best and I’m slowly adapting to running everything full-time rather than just here-and-there. The technology and the development aspect is the easy part, it’s keep everything organized that’s the problem.

For seven years the work has been tightly integrated with my personal life because it was so minimal it didn’t matter. All of a sudden my leads, clients, estimates, projects, and invoices have snowballed into this giant mass of stuff. I realized right away that my existing methods of organization and project management were about to become seriously wiped out of existence.

Now that things are rolling along a bit I’m going to be posting more work-related entries. I may even need to separate this blog, one for personal and one for work. Right now, the News link on botsko.net leads to this work category only, however I’ll need to customize the rss feed so that it only pulls this category as well.

My future posts on work will be more technical and more enjoyable for clients and fellow developers. Next on my list is to share what I’ve learned about this type of work in the last four weeks.

Using Bugzilla Effectively: for Contractors

Over the years I’ve tried several bug tracking applications and Bugzilla is by far my favorite. It’s a great tool for all sorts of projects, whether they’re open source or not. It’s proven its ability to handle thousands of bugs for many different projects with ease as it’s the bug tracking tool that the Mozilla Foundation prefers. Yet how can single developers who work on small to medium-sized web-based applications use this tool without sacrificing much time managing it? I’ve worked out which features are useful and which are not to me, as I am one of those free-lance programmers.

Users/Groups

My installation of Bugzilla 2.20rc1 is on a local test server, so there is only one user I have to manage – myself. Right away I really don’t have to worry about user or group permissions, because I just give myself access to everything. Depending on what exactly you contract for, you may need to allow your clients to access and run queries on your database – but that’s not much extra work at all. For my type of business, the technical reports are for me and would be too confusing for my clients. If ever there was a need for them to see details, it’s just a copy-and-paste away.

I really haven’t found it useful to mark a bug either new or assigned, and managing those assignments is pretty pointless with only a single user. For me it’s either unresolved, resolved, or closed.

Products

My products are generally small to medium-sized web-based applications that typically do not take longer than a month to work on. Sometimes I have larger applications that take a year or more of work, so I need flexibility in both my scheduling, bug tracking, and revision control to manage all of my pending workflow. Bugzilla makes it very easy for me to keep track of each project. Each new project I begin for a client, I create a new product for in Bugzilla. My rule on separating code and projects is that if the code I write is completely separate from any other code I’ve written for that same client, it gets it’s own product entry. If I’m just adding a new module to an existing project, I’ll simply add a new component to the product listing in bugzilla.

From there, I just use components, version numbers, and target milestones the same way everyone else does. I do use CVS (maybe someday I’ll go to Subversion) for basic revision control of these projects. My guideline on entering code to CVS and creating a product in bugzilla is that:

  • If it’s a small project, I can enter the code once I have a beta (ready for external testing) complete.
  • If it’s a large project, I’ll enter it the moment I get a good foundation (I use a framework I’ve created, so pretty much I’ll commit it immediately).

If I don’t follow those basic guidelines I’ll have a huge project with a million things to do – which means I would get sucked into the black hole of entering obvious to-dos instead of actual bugs. A contractor must use their time wisely, and using bugzilla for something more than BUGS is just a waste of time. It’s tough for me to not use it as a to-do list, but it’s much easier to manage issues versus features requests when I stick to that principle.

Tags

The most wonderful thing about bugzilla is the ability to categorize bugs by using labels. These tags make managing my “queue” of pending work amazingly easy. This is where the fun begins.

blocking-1.0.0

Most applications I’ve seen use tags to identify which bugs are so important that the next update/version should be held until they’re resolved. It’s a great method, especially when you use them with the priority fields for individual bugs. Though this is helpful for contractors developing small applications, it’s better to use them to identify bugs that the client has to have fixed before they’ll accept the product. The product may work as expected without some of them being resolved, which is not really what a blocking bug is for, but it’s useful in identifying what has to be cleared out before product delivery.

This tag really must be created for each product.

research-required

I use this tag as a global tag (applicable to all products) to signify bugs I need to research before I can begin any work. Maybe I need to read a tutorial, a reference manual specification, or just peruse some sample syntax. It allows me to easily to see what I need to know before I go in and develop anything. Pulling all products at once with this tag applied allows me to do all of the research when I have time. It also can help me when a client is asking for an idea on how much time remains until I’ve got a product they can look at – if I know I have four bugs and not one clue how to fix them, I can avoid giving a false timeframe. This has been a life saver!

easy-fix

Many project management experts advise you to do something right now if it will take you less than two minutes to complete. This is a very good tip for both real life and the development word. If I have a bug or change request that really would take less than two minutes to fix – mainly layout or text issues – I’ll pull this list and do a fix-spree. How many of these can I clear out of my “queue” in the next half hour? I’m surprised at the amount of bugs I can clear out with a simple pull of bugs with that tag. I generally can focus much better if I do similar work all at once. If I have a list of easy-fix bugs, I can speed through all of them without taking much time to check for potential bugs – as they’re usually so easy that they don’t cause any new bugs to open.

Sometimes I’ve found it useful to also have a difficult-fix tag, to get the opposite listing of bugs. The more bugs you can clear out, the easier it will be to see what’s left. This really helps you plan out how much work you need to do before any deadlines, as well as making it easier to manage a queue of ten bugs rather than twenty.

next-target

Sometimes I’ll take set aside a huge chunk of a day to sit down and power-code. In order to maximize the time free for coding, I need to make sure all my bugs are in order before I do. Just like setting out an agenda for a meeting, identifying which bugs you need to tackle on your next work day is very important. If I scan through my list of bugs with either a blocking-something tag or a high priority, I can mark it as a next-target so that when I come in to begin working I have everything that needs to be done ASAP. I’ll print that report out, post it on the wall, and start the day! I just keep a red Sharpie handy to cross out what I’ve done, so that later I can update bugzilla!

This keeps me focused on what needs to be done now, as I don’t even see lower-priority fixes that I would prefer to work on. It’s really just a tool to eliminate distraction. Then I at the end of the day I can see how many important things are left, and then proceed to feel good or bad depending on my accomplishments.

Whining

I never played with this until recently, and I love it! As a contractor who doesn’t have all day to manage my bugzilla lists, I setup a few whining crons to email me when I have to do something. I see my lists of bugs as “queues” and as any effective-queue management expert knows, you need to keep them moving! I’ve setup a whine to email me a list of all of the bugs that I have not updated in two weeks. I am guilty of deleting one or two of these emails, but it’s important than I have an idea on how behind (or ahead) I am.

I also send myself a list of the bugs with the aforementioned tag “research-required” so if I happen to check email somewhere other than home, I have a reminder of something I could be doing.

What Would Make Bugzilla Perfect?

Previously I used Mantis for bug tracking, so the bugzilla status fields were a bit different and difficult to get used to when I first switched. I’m not at all keen on the bugzilla resolution fields – and how they’re used. I find it very confusing to mark a bug as “RESOLVED” with a resolution of “WONTFIX” or “INVALID” – because if I won’t fix it then it certainly isn’t resolved. Why would I want to mark something as RESOLVED when it’s not? I think there should only be one status field, with:

  • NEW
  • UNCONFIRMED
  • CONFIRMED
  • ASSIGNED
  • RESOLVED
  • CLOSED
  • REOPENED
  • DUPLICATE

That’s all anyone should really need, and it makes perfect sense.

I also love the way that Mantis utilizes a changelog feature – simply creating basic lists of bugs that are resolved grouped by their target milestone. Bugzilla really needs this. The problem now is that I can do a search for these, but if I change the format of the search results template, it’s changed for ALL search results. A special template and a separate changelog feature would be very handy – but for now, I decided to write a separate (basic) perl script for this.

The whine emails are very nice, but because my power-coding days are never consistent, I would like the ability to trigger an email with the click of a button. I can’t predict when some of these days will be and I don’t want to always be changing the crontab – so manually sending an email whenever I want would be nice.

If I had lots of time (and someday I might not be so busy) I would try to submit some patches to the Bugzilla source and see what the owners think. After all, the open source motto is to fill in where you see a need!

Conclusion

I hope I have outlined some good ideas for independent / free-lance programmers and how they can use bugzilla for their own use. Bug tracking, version control, and other items generally associated with larger projects can often very handy for small-time projects as well! I would appreciate any comments with alternate ideas, comments, and/or suggestions!