Archive for July, 2010

How Much Longer will it Take?

Monday, July 26th, 2010

Let’s talk about re-estimating software projects. Here is a situation I find myself in every now and then:

Say I’m the lead/best/only developer on a project, and partway through that project, we realize that we’re going to miss an important deadline. My manager will come to me with a question that I absolutely dread:

How much longer will it take?

It’s a perfectly fair question. Since I’m the lead/best/only developer, I’m in the best position to estimate how much more time is necessary, and my manager needs this information to make important decisions (add more people? talk to the client? etc). But it’s extremely difficult to answer! If the initial estimates (which I either came up with or approved) are wrong, how am I supposed to magically come up with better, more accurate ones?

The most important thing is to not answer on the spot; a great manager once told me that the best answer any time anyone asks you for an estimate is always “I’ll get back to you” and he’s completely right — there is absolutely no way you can put together a sensible estimate off the top of your head. Ever. You’ll always have to do a bit of math and take a few things into consideration, so give yourself time to do those things.

Now, let’s talk specifics. There are three main approaches I’ve seen myself and others use to re-estimate a project. For the following examples, let’s pretend that you’re in charge of a project that was initially estimated at 10 weeks, and after 5 weeks of work you find yourself 1 week behind schedule. How much longer will it take?

The Naive Method

The knee-jerk reaction that you might even say out loud if you answer on the spot is that you’ll need 1 extra week for a total of 11 weeks. The naive thinking here is along the lines of: “hey, we’re 1 week late, so give us 1 extra week to make up that work and everything will be fine”. The problem here, of course, is that if you have been late on your initial estimates for the first 5 weeks, you’re probably going to be late on your initial estimates for the next 5 weeks as well. We need to account for more than just the time missing so far. This brings us to:

The Logical Method

You may be thinking that the correct answer is 2 extra weeks for a total of 12 weeks, since if you need 1 extra week after the first 5 weeks you’ll probably need 1 more extra week on the 5 remaining weeks. That’s no longer a naive answer (it’s indeed logical) but your math is flawed and we can do a bit better.

Look at it this way: it took 5 weeks to do 4 weeks’ worth of work. So after 10 weeks, we’ll have done 8 weeks’ worth of work. Historically, if 4 weeks’ worth of work takes 5 weeks, then that last 2 weeks’ worth of work will actually take 2.5 weeks. So what you should be asking for is an extra 2 weeks and 3 days (always round up) for a total of 12 weeks and 3 days.

Now we have an entirely logical answer, and by all accounts you should be able to tell your manager with confidence that the project will be done after 12 weeks and 3 days. But here’s the thing — you’re probably still wrong. The fault lies in the very concept of estimates: you’re assigning a logical, mathematical number to the actions of real people with real lives and real feelings. If your team was entirely composed of robots, then yes, the logical answer is probably a great estimate, but that’s not how teams work. There are a number of estimate-affecting factors that the team dynamic adds:

  • Some people will work longer days, evenings or weekends.
  • Some people will “speed things up” by skipping test cases or code review.
  • Missing milestones affects team morale.

None of these are always going to be good or bad for the project schedule, but it is foolhardy to ignore them outright. That’s why I believe in:

The Human Method

This is where it pays to know your team.

The idea is to take the proper logical answer, 12 weeks and 3 days for our running example, and tweak it based on the team dynamic. Does one of your fellow developers step up her game when the project falls behind schedule? Knock a day or two off the re-estimate. Do you have a teammate that gets easily overwhelmed? Add a day just in case. Is a stakeholder in the project going to want to have frequent meetings about why the project is late? That’s another day or two as well. You might be surprised at how things stack up: maybe it’s not as bad as you thought, maybe it’s much worse. But at least now you know.

Of course, you can’t always predict everything about your team, so sometimes you have to ballpark the team-dynamic chunk of the re-estimate. The best thing to do in this case is to err on the side of caution and add a buffer — something in the 20~30% range. For our example, that means adding another 25-ish% of the 2 weeks and 3 days that we’ve already added, call it 3 more days, bringing us to 3 weeks and 1 day. This means that our originally-estimated 10 week project is actually going to take a little over 13 weeks. Probably longer than what your manager was hoping for, but at least now we have some numbers to back it up.

And what’s your alternative, really? Make something up off the top of your head?

The iPad Dilemma, Revisited

Monday, July 19th, 2010

Back in early February, I lamented about how hard it was to decide if I wanted a Macbook or an iPad. At the time that I wrote the post, I had already waffled quite a bit on the issue, but the discussion in the comments led me to think that a Macbook was probably better for my needs — a position I held for a long time. Eventually I made my way back to wanting an iPad, though, and I finally picked one up a couple of weeks ago. What changed my mind? Several things:

The Macbook update was less than stellar.

Before the Macbook update, I often claimed that if it included a price drop, I would pick one up the next day. Unfortunately, there was no such price drop, and the update itself was pretty weak. Furthermore, the Macbook Pro update that had happened a little earlier was actually considerably more appealing, and I likely would have gone with a low-end MBP rather than a Macbook + RAM upgrade due to how the pricing worked out. Overall, this was a big turn-off for the Macbook.

The iPhone gained multitasking through a firmware update.

This was pretty big news because it meant that the same thing could easily happen to the iPad. Multitasking was my biggest concern with the device, but knowing that it might not be an issue forever was enough to quell that fear and give the iPad another chance. Granted, the multitasking on the iPhone isn’t the same as the freedom inherent in a full OSX install, but it was certainly enough to get me looking at the iPad’s oh-so-gorgeous screen again.

I was able to get my hands on an iPad through work.

Due to the exciting work we do at my day job, we got an iPad well ahead of its release in Canada. I was slated as the likely candidate for developing an app for it for one of our larger clients, so it was left in my care. I may have borrowed it for a few evenings… and possibly a weekend. I actually read a full book on it in about 3 days (easily a record for me), at which point I realized I was kind of in love with everything about the interface. Spending some time with an iPad really helped me fall for its charms, and this was what probably sealed the deal for me.

There were other miscellaneous factors as well, (price became more of an issue when the wedding costs started to kick in) but overall it simply felt like a bad time to get a Macbook and a good time to get an iPad. And so far, I’ve been very happy with my decision.

Varied Goals: Not SMART, but Still Effective

Monday, July 12th, 2010

I set a different kind of goal for myself this month, and it was pretty unconventional. It made me think of how we set goals, and more importantly, what kind of goals we’re encouraged to set. I’ll tell you about that goal a bit later on, but let’s start with the stuff you probably already know:

If you’re at all familiar with planning and motivation, you probably know that it’s a good idea to set goals for yourself. If you’re up on the latest trends, you probably know that you should set SMART goals. That stands for Specific, Measurable, Attainable, Realistic, and Timely. Basically, it means you should make goals that are challenging yet possible, as specific as can be, and with a deadline. “Get 10 accepted answers on Stack Overflow before my performance review in November” is a SMART goal (I’m at two so far).

That’s all well and good, but today I want to talk about a different kind of goal. It doesn’t have a fancy acronym, but for short I like to call them Varied goals (the name will start to make sense soon). As you are about to learn, Varied goals are not at all SMART goals:

  • Varied goals are intentionally vague.
  • Varied goals are not easy to measure.
  • Varied goals are never meant to be fully accomplished.
  • Varied goals are extremely idealistic.
  • Varied goals don’t have a specific deadline.

…but that doesn’t mean they’re not useful.

Varied goals are all about fine-grained motivation.

We’ll get to what Varied goals are all about in a moment, but first let’s look at an example of where SMART goals fall short:

Suppose I want to get better at soccer. It might help me to set a few SMART goals like “make a really solid pass every shift” or “score a goal in the next five games”. These goals give me specific tasks to fulfill that will help me improve important soccer skills. However, they’re pretty course-grained goals, don’t you think? Every game I’ll probably perform dozens of other actions that don’t impact those goals at all. What is pushing me in those cases? None of my goals apply, and my general desire to get better at soccer is far too general and not particularly inspiring. The idea of Varied goals is to fill that gap.

A Varied goal would be something like “Run harder than last shift”. This is something I can try really hard to do every shift, even though it doesn’t really satisfy any conditions for SMART. If I run into an unexpected soccer-circumstance and don’t really know what I should be doing, I can revert to my Varied goal; running harder is probably a good idea in a lot of situations, so this is something I can depend on. Best of all, it’s quite inspirational. When I’m running to get back to help defend my team’s net, I can think “Remember how fast I did this last shift? I’m going to be even faster right now”.

More formally:

  • Varied goals are meant to complement SMART goals, not replace them.
  • Varied goals are meant to be striven for, not attained.
  • Varied goals favour what’s possible over what’s practical.
  • Varied goals should be applicable to many general situations.
  • Varied goals should be inspirational. Something that really fires you up.

Now, about the name.

I call them Varied goals because it’s very important to keep variety in mind. For starters, as mentioned above, Varied goals should apply to a variety of situations. But even more importantly, it’s a reminder that you should maintain a variety of goals — some Varied, even more SMART.

Back to our soccer example: running harder than my previous shift will apply to a lot of situations, and it will complement a lot of SMART goals very well. How am I going to get that first goal in the next few games? Maybe by outrunning a defenseman when I have the ball, or sprinting up the field so that I’m open when my teammate is looking for someone to pass to.

So, what’s my Varied goal for this month?

Be unstoppable.

That’s it. I have it starred and highlighted at the top of my todo-list, which I check several times a day. It’s a frequent reminder that for this month, every instant of every day, I want to be unstoppable. Am I going to let that IE6 bug slow me down? Not a chance. Am I going to get overwhelmed when my already-overbooked schedule fills up even more? Definitely not. After a long day, when I have to decide whether I should sit on the couch and watch TV or go to my desk and pump out an epic blog post, what’s it going to be? I’ll give you a hint: it’s barely even a choice.

I suspect this sounds a bit crazy, but it’s just what I need right now. I’ve been early on all my deliverables at work so far this month. I’m a wedding-planning machine. I’m out of a so-so slump in softball, and I’m finally getting better at soccer. I wrote this post six (!) days early. Obviously I can’t attribute all of this to a bland, over-arching statement, but I feel it does really drive a lot of small victories that are helping me accomplish my SMART goals more effectively.

Does any of this resonate with you?

I’d love to hear some reactions to this. Are Varied goals something that could help you, or is all this wishy-washy idealism stuff total nonsense to you? I’m still very much figuring this out as I go, and your opinion means a lot.

Modern YouTube meets Retro Firefox

Friday, July 9th, 2010

A quick bonus-Friday-post to help get your Friday rolling:

I’m doing some web development at my day job for a site that simply must work in Firefox 1. It’s not as bad as it sounds (we’re also supporting IE6, which is a far bigger hassle) and every once in a while using a really old browser provides a bit of comic relief. For example, when I accidentally opened a YouTube video using Firefox 1, here is what I saw:

(click image to enlarge)

The text reads: “Hey there, this is not a commercial interruption. You’re using an outdated browser, which YouTube no longer supports. Some features on YouTube may not work.”

How ironic that the outdated-browser warning message is nearly unreadable in outdated browsers! It looks like even the brilliant minds at Google occasionally struggle with legacy-browser support, just like the rest of us ;)

Have a good weekend!

How to Make Use of Open Type Fonts (Windows)

Monday, July 5th, 2010

For our upcoming wedding, my fiancée and I thought it might be neat to license a really awesome font and use it throughout the various texts inherent in this sort of event (invitations, place cards, thank you cards, etc). Using a designer font turned out to be a little more interesting than I expected, and I found help online to be spotty at best, so here’s a listing of facts I figured out while getting a beautiful open type font to render and print correctly in Windows (I tested XP and Win7).

Step 1: Finding a great font.

We looked around for a bit and eventually took a liking to Biographer, a font profiled on I love Typography as one of the better fonts created this past year. This isn’t a free font, but it’s gorgeous… and after looking at the current landscape of free script fonts, we decided that having a totally unique font across all the type in our wedding was worth $85.

Tip #1: A great way to find interesting fonts is by checking out a few typography blogs. There are tons out there, and they can really help make the sea of available typefaces a lot easier to navigate.

Tip #2: It’s ok to pay for a font. Typography, like any form of design, is an area where you often get what you pay for.

Step 2: Downloading and installing a font.

I bought our font license through a website called Veer. They’re a pretty popular reseller, and it was easy and straightforward to purchase and download the font files. I’m not sure if all font-selling websites are like this, but I can certainly recommend this one.

Installing the font was a breeze. If you’re not sure how to install a font on your system, a quick query on Google will sort that out for you in no time. Here’s the page I used: Installing Fonts in Windows.

Tip #3: Do your research, and only buy fonts from reputable websites. This goes without saying, but the internet can be a scary place to enter your credit card number. Bonus points if the site uses a purchasing framework such as PayPal.

Step 3: Using an open-type font’s special characters.

This is a huge hassle. Biographer has a lot of alternates for its characters; there are multiple versions of letters with elegant, swooping tails like ‘h’, ‘p’ and ‘k’. Regular word processors aren’t able to access these. The most common-place application I heard of that could was Office 2010, but I didn’t have that so I had to get creative.

The first thing I tried was the Windows character map. This shows all unicode characters, so surely my alternates would be there and it would be easy to insert them into something basic like Wordpad. Yeah, not so much — they simply aren’t there. If anyone can explain why, I’d love to know; this really surprised me. After giving up on getting any help from the OS, I decided I’d need a serious word processor to tackle this one.

The next things I tried were Office 2007 (where I managed to eek out a few ligatures, but still no alternates) and Open Office. To be fair, I didn’t actually download and install Open Office, but their own FAQ was kind enough to inform me that my efforts would have been in vain. This was getting frustrating. It’s 2010, people! How hard is it to support a few extra fancy characters?

Getting desperate, I tried to install LaTeX — I think. Maybe I was just installing some prerequisite libraries or some sort of command-line utility, I’m still not sure. This was the most confusing software setup I’ve ever experienced, and I bet I could write an entire post called Things that Suck about Installing LaTeX if not for the fact that I’m in no mood to put up with that much headdesk-inducing hassle. Moving on:

Finally, I downloaded a free trial version of Adobe’s InDesign, software that is made explicitly for desktop publishing. This worked like a charm. Straight out of the box it varied which versions of each character were used as I typed, and if I wanted to specify an exact variant to use, I could do that through the remarkably intuitive glyphs menu. I highly recommend this approach if you’ll only need to be able to work with the font for a short period of time and/or you’re willing to shell out $700 for InDesign.

Tip #4: If you want to use the special characters of your open-type font in Windows, your best bet right now is either Office 2010 or Adobe InDesign. If you can’t get a license for either, InDesign has a free 30-day trial.

Tip #5: Only attempt to install LaTeX if you are a grad student or a masochist, or you have absolutely no other options (and even then, you should try to find a grad student or a masochist to help you get it up and running).

Step 4: Printing with an open-type font.

InDesign provides a pretty fantastic printing experience, so I didn’t have to struggle at all in this regard. I set up my new document to be exactly the dimensions of the card stock I was printing on, and it went through my standard, off-the-shelf printer without any trouble. I seem to remember reading some sort of horror story about needing to manually tweak printer drivers to get them to recognize a new font, but thankfully that’s not something that happened to me (and sadly, I can’t find the relevant link).

Tip #6: You might have printing issues. A good word processing tool will mitigate this as much as possible, but God help you if you’re using LaTeX or anything equally obscure.

I hope this will be helpful to at least a few people out there. And in case you were wondering, our invitations look down-right incredible, and we’re looking forward to printing the rest of our wedding-related copy over the next few days.

If you have a similar story regarding font manipulation, or a question that I didn’t answer above, I’d love if you left a comment.