Chirb, April 2007 April 4, 2007 12:20 PM

I went to the Chicago Area Ruby Group on Monday for Andy Lester's talk on project management. No crazy story this time because I took the train, although I did have to jog most of my way to the Thoughtworks building, which always seems to be my lot with the Metra schedule no matter where I'm going or when I need to get there. Note to self: If the appearance of composure is any priority, take cab ^^;;.

Half of Andy's presentation was about his alternative to the agile methods of project management. The other half was on technical debt, which I found rather interesting and fairly applicable to IBLP's IT operations. Here's a loose summary of his presentation (slides available at Andy's site).

Project Estimation and Tracking

1. Write it down. The project should be started with some sort of written document. Programmers like to begin coding right away because they think they know what the customer wants, but that's often not the case. A written agreement will help you avoid misunderstandings and will get any immediately obvious questions answered right in the beginning. Wikis are a good medium for these documents because of their collaborative and malleable nature. "It's not like in the 90's where one guy was Master of the Document."

2. Estimate. Give a rough idea of the time/money cost up front. This helps the customer to prioritize and prune, as well as feel in control of the project. Make sure they know that it's not a rigid commitment, because the next step will adjust your estimate.

3. Refine. Break up your estimate, perhaps into outline form for each task. You're doing design as you go, so keep notes. No subtask should be longer than 4 hours, because you can't estimate accurately above half a day. Doing it this way helps to distribute risk: Estimates are usually off by 100%, not 10%. You may need to take a day to sit and think about what you're getting into. You're paying up front in time to be able to know where the end point is. Remember that typing is not programming -- thinking and breaking down tasks is programming.

4. Plan and track your tasks. Write out your task plans Friday afternoon so everyone knows exactly what to do when they come in Monday morning. Try to finish each task before going on to the next one. Track your tasks so you always know what your status is, even in the middle of the week.

5. Adjust as necessary. Sometimes you'll need to shuffle the order, re-estimate, or break up tasks further. When handling new requests, say, "I can do it, but I'll need a day to tell you how long it will take." Customers need to know that nothing is free and that even the estimation of new features will take time. "Do you want the 30 second, half-hour, half-day, or half-week answer? That's what it'll be worth."

Always be aware of the status of your project. If you know you're not going to make a deadline, you should tell your boss or customer as soon as possible. Be honest with everyone, including with yourself.

Getting Out of Technical Debt

"Try to think of Peter Francis Geraci's face looming over you as we talk about this."

Identify your debts:

  • Clutter -- disorganization and confusion
  • Failing tests, unfixed bugs, unpatched security holes
  • Fragile or ugly code -- this often means the code is not read, maintained, or understood
  • Code without comments or outdated comments (an amiable audience member adds: Strive to write the kind of code that doesn't need comments, but do maintain your documentation.)
  • Truck-sensitive knowledge (the truck-factor: How many people can get run over before your company collapses?)
  • Code ownership -- this makes the code truck-sensitive, and a bottleneck
  • No coding standards -- standards help minimize the arguments and the time wasted worrying about or fixing differing code styles
  • Missing infrastructure -- do you have version control, bug tracking, backups, cron jobs to do your dirty work?
  • Jerks on the team -- they may be a negative productivity factor
  • Jerks in management -- well, that's beyond your control
  • Not realizing you have tech debt, or ignoring it

Determine the cost of paying the debt. Think in terms of time, money, and risk. Create the justification to sell your boss/customer on your changes in corporate language. Quantify everything: What exactly is the improved turnaround, extra quality, and decreased risk worth? All cost assessments must include opportunity costs: What could be done if this change wasn't made?

"Land one plane at a time." Watch the corners and the center will take care of itself. Automate your corner-watching.

Avoid future debt by not incurring more debt. Take notes when you incur debt anyway.

"However," Andy concludes, "Sometimes you just have to do what the customer wants."

4 Comments

Thanks for the write-up! I wanted to go this time, but couldn’t swing it schedule-wise.

That’s a great summary. You did a better job summarizing than I’ve ever done. :-)

I don’t really remember how to comment, since the last one before the quote dump was a while ago, so…

I really like your ink pics. ^^ There’s something folky about the medium, I think, and then there’s the… definitiveness of the pen. No erasing, no mixing or smudging, just shades of black and white. Oh, and I just remembered what I usually comment—a text dump. But I don’t seem to have accumulated one since last time, other than some Pratchett quotes.

So here’s a little story…

“What are you doing?” I asked. I stared at my brother. He was sitting contentedly on a park bench with something between his hands.

“Makin’ stuff.” His absentmindedness made me feel sick; why did he always do this to me? I probed further.

“Making—what’s that between your fingers?” “I told you already, stuff.” “That’s chewing gum!”

He brought his hands together firmly, squashing the moist wad of gum between them, then drew his palms out again. The white gum base stretched, creating a million infinitely thin strands of stickiness that wavered in the spring breeze before breaking. It reminded me of the scene from the old Star Wars where Obi Wan hears the cries of the dying Tatooinites in his mind. He squashed his hands together again, then pulled out slowly, cruelly. Squash, pull, squash. Stop that! I don’t know why I didn’t say it out loud, I think for some reason my tongue was held back, maybe by some young deity up above who had a nice smile. I’m a dreamer, what can you say? Nevermind that I’m a teenager, too! It’s a cruel earth.

“I’m making… false gossamer. That’s what I call it,” burbled my brother. Squash, pull… break. A billion screams. Squash, pull… Stop! I screamed at him again, but it was all in my mind still, like my mouth was on vacation, or something. The deity, I thought, was telling me to wait.

“What do you think?” he asked. I tore my eyes from the wispy, silk-polymers and continued waiting; he was about to say something important. He hesitated a moment, then started talking again.

“It’s just, there’s this girl I met the other day, um, and…”

Ta. I knew it all along!

Thanks Victoria. Very nice summary

Leave a comment