Friday, April 19, 2013

Concrete Coding Corner - Productivity and Project Metrics

Project Management and You

As a programmer, one of the major things I spend my time talking about is how to measure productivity at work. Indeed, an entire field - project management - exists explicitly for this purpose. The ostensible purpose of this field is to provide metrics and milestones for business owners of projects, so that they have an idea of where a given project stands at any point in time. Of course, the cynic in me cannot help but point out the obvious: the entire field of project management is oriented around proving that a given individual, at any particular moment, is actually performing work. Project managers request task breakdowns, status updates, demos - all of the hallmarks needed to show that progress is being made, but it all boils down to the same thing: programming is essentially a black box for everyone but the programmer, and those without an understanding of programming sometimes need additional information to understand exactly what's going on.

You can couch it in all the business language you like, but the ultimate goal is to manage employees who develop software. Some organizations do so benevolently - using missed goals and milestones as learning opportunities as points of improvement. Others do so maliciously - using missed goals as a hammer to beat a programmer into extra hours in the pursuit of some arbitrary deliverable. Like most programmers, I've experienced both ends of the spectrum. Ultimately this is neither good nor bad - the use of project management techniques, like a weapon, is as benevolent as the intent of the wielder.

Hidden Benefits

One thing I've noticed, though is that while I may rail against the arbitrary metrics used to measure performance from time to time, there are indeed concrete benefits to these techniques when applied outside of the software engineering realm - particularly related to creative endeavors. Ultimately, I'd argue the major reason that many personal projects fail for many individuals (and they do fail - if New Year's Resolutions were written on paper, the entire world would be covered in the crumpled dreams of millions of resolvers) is that they simply lack means to measure progress. Self improvement, for example, is only useful in the chance that it actually produces improvement. 

Take an aspiring runner - given the lack of any information or motivation, the individual needs to decide on their own whether or not the activity of running is producing an effect. They need a metric - a means of measuring progress. Most of the time, the only metric available by default is the uncertain metric of how our bodies feel at any given point at time. This can be a good metric, particularly when working towards fitness goals, but it is also inherently flawed in that "body feel" can be influenced by any number of factors. A bad sleeping position produces a pulled muscle, and all of a sudden your progress metric is thrown off by an unrelated issue. Most people, with enough of these false indicators, will eventually give up on their goal. If they can't measure progress, then they can't see that their efforts are actually paying off.


The source of the problem is in producing objective metrics - metrics that rely not upon an arbitrary element of the situation, but that focus on concrete results. One example is in practicing a musical instrument. In my spare time I play brass instruments, and in order to achieve quality tone and technique a brass player needs to spend hours practicing. However, with brass playing it is also very easy to slide once you reach a certain ability level - you find that you can put out a moderate level of adequate performance and that this adequacy, while not particularly impressive, is sufficient. The primary way to advance past mere adequacy is to work on fundamentals - sets of exercise that are equivalent to strength and agility training for brass players. These fundamentals are vital to building proper technique and muscle mass for endurance, but they are also extremely boring (and in some cases, borderline painful). After several practice sessions that seemingly fail to improve this adequacy, it is far too easy to write off the activity of fundamental practice altogether and focus exclusively on the music. We've identified a similar problem to that of the programmer. Our goal is concrete - become an amazing player - but the means by which we have to measure our progress are inexact. We're relying on inadequate body feel and the ephemeral concepts of a "good sound" - something that can be hard to identify without outside observation.

This is the issue faced by project managers when overseeing programming projects. Programming, to them, is a black box. On the surface, all they have is the equivalent of body feel - they have assurances from the programmer that everything is on track, or problem reports as they arise during development. These end up giving false indicators. The project managers, as a result, focus on goals that can be measured objectively in order to give them a more uncluttered view into the progress of a project. While this work seems arbitrary to the programmer (and in some ways it is, as from a certain perspective the need for this information is birthed from an inherent distrust between individuals - else there would be no need for assurances that work is actually occurring), it gives the project manager an objective view of the project and mollifies their concerns.

Application of Metrics

The end point of all of this is that project management principles are not exclusive to programming projects in the workplace. One solution to the body feel problem, which I have found successful, is in breaking the goal down into objective measures. For my brass playing, I developed a spreadsheet system. Along the top of the spreadsheet I put down metronome markings, starting at 60 BPM and increasing to 208 BPM (an arbitrary choice on my part that represented "very fast"). Down the side of the spreadsheet, I listed chromatic tones - C, C#, D, D#, E, and so on. I then printed out about twenty of these sheets, and assigned a sheet to every fundamental exercise: one sheet for lip slurs, one sheet for tonguing exercises, one for Clarke technical study #3, one for chromatic studies, and so on. 

This gave me a grid of concrete milestones - objective goals that I could check off as a list. As I would complete the requirements for a goal, I would write the date in the corresponding cell. For example, if I completed the F# Clarke Study at 140 BPM on February 2nd, I would write "2/2" in the corresponding spreadsheet cell. Over the course of several days of practice I would slowly fill in the spreadsheet with dates, and after a while it was possible to see progress very clearly. Where before I would easily get frustrated practicing technical exercises, reaching that wall where the fingers only want to fumble and the lip feels stiff and unworkable, with the new system I could look down at my spreadsheet and see that I had already completed three cells for the day, and feel confident in moving on. 

It took away the human tendency to focus on the negative - the problems faced as I worked on a particular exercise could dampen my mood very easily - and instead highlighted the positive. I could look back on my spreadsheet at any time and see the period of time where I couldn't perform the current exercise faster than 60 BPM, and realize that the troubles I'm facing at 120 BPM are a mark of progress rather than purely  a source of frustration. I was able to measure my progress based on where I had come from, rather than where I was headed. I was celebrating the mile I ran continuously, rather than lamenting my inability to complete a marathon. The marathon would come, just as surely as completion of the current exercise would come.

Metrics and Writing

Most writers debate this technique without knowing they are doing so by focusing on word count. Some writers proudly claim they only complete 500 words a day, but those 500 words are rock-solid. Other writers pound out 2,000 or more words in a day and are pleased with their progress, leaving rewriting for later (in the interest of full disclosure: I typed at a rate of 2,083 words per day when completing my first novel, with a high water mark of 10,000 words in a single day. I obviously fell into the latter category). The issue faced is that while word count is indeed an objective metric for writing, any individual can quickly tell that it is in no way indicative of quality. This tells us one thing: our metric is inadequate. We have found an objective measure, but not the right objective measure.

Of course the blogosphere constantly debates the issue of quality versus quantity, but ultimately we end up coming back to the same issue: what are the fundamentals for a writer? What is a way we can work on these fundamentals objectively in order to produce measurable progress that results in increased quality? We have critiquing, which despite the attempt at objectivity is almost entirely subjective. We have editing, which suffers from the writer's blind eye when working on their own pieces and suffers from the subjective perceptions of an external editor when performed by an outside party.

This is something that has been on my mind lately, and I'd argue that it's a concern of every writer. How do we know that what we write is actually good? Are we practicing the right things? Is there an objective measure of "good" or "bad" when it comes to art? I have my own ideas, but I am open to suggestions. Until then I am left with an imperfect metric of word count goals, which I pursue with vigor.

No comments:

Post a Comment