Agile Manifesto Not So Bad After All

I read (most of) Steve Yegge’s blog post on Bad Agile, and thought it was great to hear someone ranting against Agile Development for a change. (Unfortunately, it quickly devolved into a “golly, Google is such a fun playground for programmers, it’s the greatest place to work ever!” rant.)

I admit I haven’t studied Agile Development very much, because it just sounds like another consulting company gimmick. And, frankly, it is. But Yegge’s post got me thinking that maybe, just maybe, there was some technical value to Agile before it was malformed by greedy salesmen into the business fad that it currently is. So I looked up the official Agile Manifesto and looked through their principles. It’s clearly a consulting gimmick, but there is some value in there, too.

Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.

Sounds good and vague. A great quote to put on a consultant’s business card.

Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.

I have mixed feelings about this one. Changing requirements are inevitable, but I don’t like allowing the customer to think they can just change anything at will. I expect changes early in the process, but the farther you go, the more expensive the changes get (in both time and money). If the customer doesn’t mind paying the costs of the changes, then fine. Otherwise, don’t change stuff.

That being said, I always try to write code that can be changed fairly easily. Because no matter how much you tell people not to change things, they’re going to throw some kind of monkey-wrench into your project at the end. (“Hey, you need to use MySQL instead of SQL Server, because we heard it’s, you know, free, so our profit margin will be higher.”)

Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.

In my Amiga days, I’d often release production versions every week. At BrainTrain, there was an unspoken expectation that there should be a working build of the software available every day. Now, I can’t stand stopping a programming session with any non-working sections of code hanging out there, so I’m all for frequent working deliverables.

Business people and developers must work together daily throughout the project.

Daily?? I personally don’t like to talk to business people unless there’s a reason to, and that should only be near the beginning of the project or near the end. The more you talk to them during the process, the more likely they are to question your methods or change their requirements (and, of course, they don’t want to pay for the time it takes to make the changes). But since Agile can be a consulting gimmick, I can see where that would actually be a good thing, because changing requirements means prolonging the consulting work and thus increasing profits.

Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.

I like the concept, but I worry about how one might measure “motivation.” As for environment and support and trust, hell yeah. Nothing is more annoying than having a better development environment at home than at work. Unfortunately, providing good development tools to developers is a rather difficult concept for business people to wrap their minds around. (“Why can’t you just build my new inventory tracking web site with NotePad??”)

The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.

I disagree. Some people are good at verbal communication, some people are good at written communication. Also, I find it much easier to convey programming concepts, which often involve strange, nonsensical words and acronyms and cryptic punctuation, through the written word. This part of the manifesto was clearly created by a chatty extrovert.

Working software is the primary measure of progress.

Duh.

Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.

I have no idea what that means. I guess Agile processes shouldn’t burn people out, which sounds like something that should apply to all of life.

Continuous attention to technical excellence and good design enhances agility.

That seems self-evident to me now, though I admit “good design” is a learned skill. Young programmers never want to design; they just want to dive in and start coding.

Simplicity–the art of maximizing the amount of work not done–is essential.

I agree completely. I hate busy work, but I’ve also learned that there are times when you can get off-track working on a shortcut when you should just buckle down and do it the hard way.

The best architectures, requirements, and designs emerge from self-organizing teams.

I think that means clueless managers shouldn’t interfere with development teams, which makes perfect sense to me.

At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.

Makes sense to me. I’m always trying to think of better ways to do things.

So in conclusion, based on the Agile Manifesto, I guess I can get behind many of the concepts of Agile Development, and have in fact been doing many of them for most of my career. I think where I have trouble is in the implementation details I hear about. For example, I think Pair Programming, which is often cited as an example of Agile development, is just about the dumbest thing I’ve ever heard of. (“Say, let’s pay two programmers to sit at the same workstation and do the work of one person! What a great idea!”)

More Lamentation On The State Of Democracy

Here’s one good thing about researching the potential Senate candidates and making your voting decision early in the year: You don’t have to pay attention to the actual campaigning, which is really just a big playground fight between the opposing campaign managers and has little or nothing to do with the candidates themselves. The drawback, of course, is that you get to watch the quality of public discourse plummet to new lows during the time you’re waiting to vote, and you come to the inevitable realization that elections are decided not by issues, but by manipulation of mass media. The key to victory, it seems, is to ensure that the media spends more time covering an accusation than a refutation, and lean on the average voter’s lack of political knowledge.

This morning, I heard Jimmy Barrett talking about Virginia Governor Tim Kaine commenting somewhere that the term “representative democracy” doesn’t apply to us anymore, since, with something like 45% voter turnout, we don’t even have a majority deciding the elections. Barrett added that it was no wonder nobody votes, because if you watch the news of the Senate race in Virginia, it’s hard to get excited about taking time out of one’s busy schedule to vote on who’s perceived as the greater racist.

Thomas Krehbiel writes The Krehbiel Strikes Back, a moderate commentary on news, media, politics, and culture.

Easy SSIS Package Deployment

Another in a series of random programming tips by Thomas Krehbiel, mostly to help me remember them in the future.

Probably everyone knew this but me, but I discovered (by peeking at someone else’s batch file) that you can run SSIS packages without any special deployment. Previously, I had been running the Package Installation Wizard (by double-clicking the .SSISDeploymentManifest file) to deploy my package to SQL Server as a File System package. Then I would run the package from the command line with:

dtexec /DTS "\File System\(project)\(package)\" ...

Little did I know that there’s also a /FILE parameter. So all you have to do is slap your package into a directory, and run it with:

dtexec /FILE "(package).dtsx" /CONFIGFILE "(config).dtsConfig" ...

A Glance At Military Commissions

Another busy work week with it being the end of the fiscal year and all. Not much time to decipher the news of the day. After just a glance, I think I’m okay with the new bill to allow military commissions for terrorists. According to CNN, “Republicans say the bill is necessary to ensure that terrorists can be brought to justice and that CIA personnel will not be charged with war crimes when interrogating these suspects.” Sounds good to me.

Thomas Krehbiel writes The Krehbiel Strikes Back, a moderate commentary on news, media, politics, and culture.

Reformat Complete

Over the weekend, I finally reformatted my main computer and upgraded from Windows 2000 to Windows XP, a task I’ve been putting off for ages. I hadn’t made any major upgrades to this computer in at least three years, so you can imagine I had quite a bit of junk on it from years of installing and un-installing software. I made tedious, redundant backups of everything before the big wipe, so I haven’t lost any data, but at the moment all I have is a blank computer running Windows XP.

It’s simultaneously exciting and depressing. It’s like moving. I’ve got the computer equivalent of a new, empty house with fresh paint on the walls and endless possibilities, but I’ve also got a lot of completely empty rooms packed with stacks and stacks of boxes to be opened and sorted. The process of unpacking the boxes (ie. restoring data and re-installing applications) is quite daunting.

Week 3, Washington at Houston

I didn’t see the game, but apparently it was a blowout against the hapless Texans (as was expected). The Giants lost (despite what appears to be a valiant fourth-quarter comeback attempt) but the Eagles won, putting them in first place by a game. The Cowboys had a bye week and didn’t play. Next week, the Redskins face a tough opponent in the 2-1 Jacksonville Jaguars, who devastated the Cowboys in Week 1.

Logo Week 3 Results
Texans 15, Redskins 31
NFC East Standings
Eagles 2-1
Cowboys 1-1
Giants 1-2
Redskins 1-2

The Ethics Of Allen-Bashing

Good news, everybody! According to former teammates, Allen used the “N-word” in college.

This news represents a slight ethical quandary for me. On one hand, I don’t particularly want to see Allen re-elected, but on the other hand, the process of digging up dirt from a candidate’s college days is reprehensible. (Also, if you read past the sensationalist title of that Salon article, you’ll find that only 3 out of 19 former Allen college friends said they remember him using the “N-word,” and all of them remembered him as a great guy, so the “dirt” is pretty weak.) Allen should be voted out (or not) because of his current activities, not what he said in the huddle of a college game thirty years ago.

Richmond War Room had a similar, but funnier, take on the news: Dear Partisan Snipers: Shut Up.

Thomas Krehbiel writes The Krehbiel Strikes Back, a moderate commentary on news, media, politics, and culture.

Debugging Custom SSIS Components

Another in a series of random programming tips by Thomas Krehbiel, mostly to help me remember them in the future.

In order to debug custom SSIS components, you need to Attach a Visual Studio debugger to the SSIS package task. You can do it manually I suppose, but I had better luck doing this:

Load the SSIS component project (a class library) into VS2005. Open the project Debug properties. Set the run executable to devenv.exe (which is Visual Studio). Set the command-line argument to the location of your SSIS package.

You also need to copy the component DLL (and PDB debug file) to the GAC and the SQL Server DTS directory. I saw somewhere that you need to copy it to VSShellCommon7IDE too, but I don’t know why. Anyway, I put these commands in my Post-build event:

copy “$(TargetDir)$(TargetName).*” “D:Program FilesMicrosoft SQL Server90DTSPipelineComponents”

copy “$(TargetDir)$(TargetName).*” “D:Program FilesMicrosoft SQL Server90ToolsBinnVSShellCommon7IDE”

“C:Program FilesMicrosoft Visual Studio 8SDKv2.0Bingacutil.exe” /u “$(TargetName)”

“C:Program FilesMicrosoft Visual Studio 8SDKv2.0Bingacutil.exe” -iF “D:Program FilesMicrosoft SQL Server90DTSPipelineComponents$(TargetFileName)”

Now, when you hit F5, another instance of Visual Studio will open with your SSIS package loaded. Then when you run the SSIS package, breakpoints and exceptions will be thrown in the original instance of Visual Studio and you can see what’s going on.

Friday Wrap-up

Let’s see, what’s been happening this week? I haven’t been paying much attention actually. Looks like a plan will be going forward to try the Gitmo detainees without having to re-write GC Article III. I guess that’s a good thing, as long as all the trials result in guilty verdicts. 🙂 But seriously, I don’t pretend to understand all the nuances of this particular debate. Anytime anyone speaks about it, they all sound like they’re saying the same basic thing but in different ways (ie. we can’t torture, but we must interrogate).

In the Virginia senate race, there’s a bunch of controversy over the candidates’ paid bloggers getting out of hand. So far, the attention is on Webb’s bloggers, who have been hyping Allen’s kinda-sorta-Jewish heritage for some inconceivable reason. I don’t see what the big deal about the bloggers is, though. As soon as you find out a blogger is being paid by a candidate, just stop reading them. Pretty simple solution, if you ask me. Or you can make it even easier by simply ignoring any blogging commentary related to any candidate, because you aren’t likely to see anything that’s unbiased or even factual. Unless you want to analyze each posting to find the truth behind the spin, it’s better to exercise your “free listening” rights and just ignore them. The same philosophy can be used for political ads, too.

Thomas Krehbiel writes The Krehbiel Strikes Back, a moderate commentary on news, media, politics, and culture.