Thursday, January 08, 2009

Discipline Enabling

I've got lots of kids, so I know all about giving out 'discipline.' What I find is that, in general, it doesn't work so well. In some cases, a well-placed "correction" can go a long way, especially if the child doesn't really understand that they were doing something wrong. For example, sometimes, my kids will use inappropriate words. They may not realize that they are bad words (they're still pretty young), so when I point out that it's an inappropriate word, they don't tend to use it again. In other situations, correction doesn't work. They aren't too disciplined in many respects. One of them, which parents for many years have labored against to no avail, is keeping rooms clean.

One of the problems is that they have too much stuff and not enough places to put it. In other words, there isn't much more than just beds in their rooms (we have recently moved and didn't bring all of the furniture with us and haven't gotten around to getting more), which means that 'stuff' gets left all over the place. Not only is it difficult to expect them to keep it clean now, but they're getting in the habit of not cleaning it, which means that when we eventually get them the furniture to put it all in, it will take some time getting them into the habit of keeping things clean (I figure that their rooms will get clean when they move out of them and leave the house).

Which leads me to processes: specifically, software development methodologies and their associated processes.

One of the fundamental problems with any and all software development methodologies is the issue of getting the team to follow the process, whatever it is. Discipline, in this case, is whether the team, on an individual basis, is following the process. If they follow the process, they are considered well-disciplined. If they do not, well...they get 'disciplined' (okay, maybe not, but it sounded funny, anyway).

What typically doesn't get discussed much, which I think is a gaping hole in any methodology and a pretty big gaping hole in software development, in general, is this issue of being disciplined. I think the reason for this is that there's an expectation that, as adults and professionals, you shouldn't need to have a problem with being disciplined. And, in general, that's true.

I never took economics in college...not sure how I got away with that, but I didn't. However, I've always had an interest in finances, so eventually, I broke down and bought some basic economics books to learn a little about the topic. What I found was a fascinating thing: economics attempts to accept reality for what it was and provide some understanding around the financial side of it (please note the use of 'attempts' in that previous sentence...I'm not an economics expert, and I assume that many would not take that perspective based upon the economics classes they took). What I mean by that is that it has, at its core, the concept of incentives (it has other things as well, but they aren't pertinent to my point). Incentives has to do with motivation, decision-making, and pain (stick with me on this pain thing...). It had interesting implications for software development.

So what does economics have to do with professionals not following defined processes? And what does missing furniture have to do with my kids inability to keep a clean room? One word: enablement.

'Enable' is one of those cool words that everyone hates because it's a 'manager' word...it's not a four-letter word, so it's okay to use it, but it's one of those words used by managers to mean something that is important, but which no one understands (or, is too big for what it's being used for). It's like using the word 'dialogue' as a verb...it's wrong on so many levels, but it sounds cool to a manager, because it's 'big.' Of course, since I'm a manager, I get excited about these kinds of words...it's a chance to make fun of myself by using big words.

In this case, applying the word 'enable' to discipline means providing appropriate incentives to people such that they will have a greater degree of discipline, whether they like it or not. Putting furniture in my kids rooms won't solve the cleanliness issue, but it will enable them to do better (in other words, it may not mean sparkling clean rooms, but it should mean better organized rooms).

Even though adults and professionals shouldn't have a problem with being disciplined on a software development project, they sometimes do (and in some cases, it's a major problem). This is because there are incentives (or a lack of them) to do what they are doing. Rarely do people do things randomly. Economics tends to agree with the concept that water heads in the direction of least resistance (technically, water heads in the direction in which it perceives the most value or return for its limited resources, but that's not as easy to picture).

Let's use an example: let's say the process states that all code must be peer reviewed. You're working on a project that's expected to have a million lines of code and it needs to be written in about a year. You've got a big staff and a process that's primarily paper or spreadsheet-driven. Do you think every line of code will be reviewed? How about if each review requires at least three people, must have half a dozen metrics tracked, reported, and verified? I won't suggest that there are no projects in this situation that haven't had every line reviewed. I just don't think I'll need more than a hand or two to count them all.

What if I changed the process by creating a web-based tool that allowed code to be reviewed asynchronously, which automatically tracked all appropriate metrics, etc.? Do you think there would be a better chance? Did you know that such a tool exists (it does, by the way...many of them, in fact)?

When you make something easy; when you smooth out a rough or painful process (there, I got back to that 'pain' thing); when you hide following a process by merely using a tool to accomplish something that you had to do manually before; when you make process a part of doing your job, rather than an external thing to be followed, it will get done more often. It may not completely remove the lack of discipline, but it will go a long way towards overcoming major discipline issues, if not fixing minor ones. You never know, it might save time and energy, raise morale, create better quality products, cure diseases and encourage peace on earth (okay, maybe not so much about the disease and peace thing, but, hey, those are good goals, too).

Just remember that a tool does not necessarily mean something physical or electronic (i.e. web site, development tool, etc.). It might mean providing decision authority to the right people, adjusting an organizational chart, letting people work from home more often, or merely bringing in a ping-pong table and seeing what happens...

No comments: