Be a Professional And Break It Down

Today’s the 1st, which means that my goal of finishing my HTTP server by the 31st has come and gone, and it isn’t done. Mike and I met at the end of the day yesterday to talk about where I was at and see if I’d met the goal. He confessed to me that it was an ambitious delivery date and he really didn’t expect it to be finished.

However, I’m disappointed that I couldn’t finish it on time and I really wanted to have it done. But after sleeping on it for a night I realize that I’m not necessarily disappointed for the right reasons- and I really didn’t have to be disappointed at all. I skipped some very important steps along the way to acheiving my goal— and the lessons from those missteps are possibly more important than any single coding lesson I might learn during this apprenticeship.

Many people more experienced than I have written volumes about these lessons, but here’s my takeaways from this experience.

Never Use A Commitment to Prove Your Ability

This was the number one rule I broke and the source of almost all of my disappointment. I thought that by taking on an ambitious delivery date I could prove something. Every apprentice at 8th Light has to build an HTTP server, so when Mike asked me if I could build mine in Java in three weeks I figured that if I wanted to be a Craftsman I better be able to. I saw the challenge and completely ignored some basic facts, for example: I took on the challenge while I was also working on two other projects; I had never worked with Java or a statically-typed language before; I had no clue how the internals of a web server worked.

What a Commitment Should Prove

A commitment should only prove that you know how to set a well-thought out and realistic goal for your client and for yourself. Sure, your client cares how fast and how cheap things can get done, but if you don’t provide them with an honest, well-thought out and realistic estimate of how long it will take you to do something then it only hurts yourself and your relationship with them.

When you make a commitment it sets both your own and your client’s expectations— and lowballing yourself to prove something or concede to a client’s unrealistic goals puts unnecessary pressure on yourself and sets the client up for disappointment.

Break It Down

A professional never commits to a job until they’ve had time to investigate what’s involved. Would an auto-mechanic, electrician, plumber or even doctor commit to something until they know what they’re getting in to? If they are an experienced professional then estimating that commitment might not take very long because the task is something they’ve seen before. If they can’t assess it right away— either because it’s something new or because it requires further investigation— then they don’t commit until they’ve looked into it.

I shouldn’t have commited to anything on my HTTP Server until I’d taken the time to break it down. I only saw an end goal and immediately dove into trying to accomplish it. Some questions I should have considered: How long would it take me to get comfortable with Java? How long would it take to learn about what’s required for an HTTP Server? In talking to the other apprentices, how long did it take them to get their servers to pass the Cob Spec fitnesse suite? What about the required tic-tac-toe portion of the app Mike asked for and another Minimax algorithm? And most importantly, if I was working on two other projects, how much time a week did I really have to commit to start working on these tasks?

In hindsight these questions seems like no brainers, how could I have not considered them? Because I only focused on the goal and on something that I wanted to prove. But instead of a glorious success (sarcasm), each day that brought me closer to the deadline brought increased pressure and frustration because I wasn’t getting it done. If I had taken the time to break down the tasks and provide thoughtful estimates for each then I would have saved myself that pressure and frustration by properly managing both my own and the client’s expecations.

Time to rethink those estimates.