2009 Goals

A regular reader of Joel Spolsky’s blog, Joel on Software, I was reading about his company’s goals for 2009 (Goals). Some of the goals are specific (e.g. his first point, Ship FogBugz 7.0 for all platforms), while others are much more general (e.g. Build a kick-ass new product from the ground up with the summer interns, and get the first dollar of customer revenue before they go back to school). I thought I would put together a list of some of my goals, from a professional standpoint, for 2009.

  • Complete all outstanding contracts and move into the maintenance stage of the software lifecycle with them
  • Pick up one new contract per month which can be completed in about that amount of time and then turned into a maintenance contract
  • Take a few courses that would expose me to new technologies
  • Continue to learn C# and become familiar with the .NET framework to a level where I would be considered “competent”

Of course, there are likely other objectives which may be reached during the climb to these goals. I will continue to update this list, or, more likely, post a new list, in about 6 months, when my efforts during the first half of the year can be quantified, and my goals for the second half of the year refined.

Peer Review at Home

The benefits of peer review are well known, and this has led me into a difficult situation. As an employee for a large organization, doing peer reviews is a normal part of the job, and it is fairly easy to locate a willing coworker to do a peer review. Process exists for this, documentation is standardized, and the benefits are reaped.

Working at home, however, presents some problems. For one, finding someone to execute a peer review is difficult, since there is no one else around who understands the concepts to be reviewed. Additionally, without creating an organizational structure to the contracts accepted, it is easy to fall into the trap of bypassing the process when inconvenient. The benefits, too, are more difficult to realize, since there is only one level of testing before the program reaches the client. While this means the benefits are greater (the peer review will reduce the number of bugs to reach the client), since the person performing the review is unfamiliar with the work, they are unlikely to detect as many potential bugs as someone who is familiar with the code.

I would be interested to know if anyone has found a good solution to this. How do you find someone to do a code review on custom code you wrote on your own? How do you ensure that you do not bypass your own process, beyond a measure of personal discipline?

Working at home

I recently took on a few contracts which I work on at home. With a wife and baby in a two-bedroom apartment, this turned out to not be a very good idea, but was, in fact, the best of the alternatives. Through my ISP, I do have internet access at one of the local coffee chains, which means I could choose to work away from home for the cost of an occassional cup of coffee. As well, there would likely be fewer distractions at the coffee shop then there would be at home.

However, I chose to work at home for a few reasons. For one, considering that I work full-time during the day, this means I have little time to spend with my daughter, and working at home allows me to interact with her as much as possible. As well, my schedule does not get tied to the coffee shop’s hours, which can be problematic when you need to work until 3AM for several consecutive nights. This also, of course, saved me the few dollars for the occasional cup of coffee.

However, my fears of distraction at home proved to be accurate. When my daughter was awake, I was unlikely to be able to spend more than about 30 minutes working at a time. As well, since I was at home, my wife could, although she did avoid doing this as I got closer to the various deadlines, call me away from my work to help her. Because the size of the apartment is not large, I was unable to seclude myself somewhere to avoid these distractions.

On the next contracts I accept, however, I think my approach to work would remain unchanged. Working at home to spend time with the family is important to me. Although I don’t consider the time spent working to be quality family time, I was around the family, and I believe it is the constant presence that prevents the father from becoming a stranger to his own children. This is something I would like to avoid. Were I to come home for dinner, then leave to spend several hours at the coffee shop working, return to sleep, and then leave first thing in the morning, I am sure that within a very short time my daughter would treat me as a stranger, and my wife would certainly be unhappy about my commitments to the family.

The occasional contracts are important for the extra cash flow they provide, as well as opportunity to network and learn new technologies in a less structured environment than at a full-time salaried job. For these reasons I will continue to accept contracts on a regular basis. However, to remain available to the family, I have and will continue to be selective about the contracts that I accept. I have outlined my general personal requirements for contracts that I would be willing to accept below.

  • Contracts requiring a regular weekly commitment exceeding 15 hours are unlikely to be accepted, although I have made the occassional exception. My daily schedule, once worked out in detail, leaves me with less than 30 hours per week, not including recreation time. If I spend more than half of that working, I suspect I will burn out. The upside of this is that if I do choose to take a contract, I am already sure I can and will commit the time needed to complete the work.
  • Contracts which include long-term maintenance are going to be avoided. While I do stand behind my own work, and will fix bugs in any code I write, my goal is not the acquisition of a large number of maintenance contracts. I prefer to work on a project for a predetermined amount of time, and then move on.
  • Before I accept a contract from anyone, I prefer a personal reference from someone I know. The reason for this is actually quite simple. Having worked for several people and organizations, it has become clear that some people are better to work for than others. By speaking to someone who knows you, I can find out if you are likely to be an ideal client: one who knows their requirements from the start, who pays on time, and who can be reached easily for any issues.

If you have some work which you think I may be suited for, and you believe you can meet at least the first two of the three requirements above, please contact me. Visit my about page for information about who I am and what I do, as well as for information on how to reach me.

Hello world. This my website!

Hello world. This my website!