Agile vs. Waterfall

It seems clear enough to me which approach is the best way to develop software, but not everyone in my office seems to agree. So I thought I’d do a bit of research on the two approaches and summarize my findings here. I really wanted to find some impartial statistics that compared the productivity of the two approaches. In addition to the usual Google searches, I included information I could find from the Software Engineering Institute (SEI) and the Association for Computing Machinery (ACM).

The first comparison of the methodologies I reviewed was on pages 23-24 of a PDF I found at SEI. The comparison mapped waterfall activities to agile activities and highlighted the key difference–the waterfall methodology lacks an opportunity to demonstrate the output of an iteration and make improvements based on feedback.

The first statistics I could find came from this wiki entry. While they’re specific to a single company, they make a very compelling case for the use of agile methods. Agile methods (specifically SCRUM) delivers more lines of codes, with fewer defects, in less time than waterfall methods.


Visual Studio 2005 Default Browser Changes

I’m a big fan of Firefox. So it’s the default browser on every machine I have access to. Unfortunately, Visual Studio 2005 didn’t continue using IE as the default like Visual Studio 2003 did. Even changing the default browser back to IE (yuck) didn’t fix the problem. This morning, I finally googled for a fix.

The steps are these:

  1. Open any web project.
  2. Right-click on any aspx page.
  3. Choose "Browse with ..."
  4. Click on Microsoft Internet Explorer
  5. Press the "Set as Default" button
Not terribly intuitive, but it works. Here are the top few links Google returned that described this solution:

Coding Guidelines

Another free e-book, this time on C# and VB.NET development standards.  Fair warning, you do have to provide an e-mail address to download it.

We’ve needed something like this at my current employer for a long time.  Come to think of it, my previous employer could have used this too.  I worked with some colleagues to put together a small SQL standards guide to direct our database development.  I wanted to write a companion document for our .NET development efforts but have had far too much other work to do.


Free .NET Book

Charles Petzold has written a book titled .NET Book Zero.  It’s a guide to implementing application in C# targeted at C and C++ programmers.  I haven’t read it myself yet, but I plan to.  I hope it’s a resource I can use to help build the skills of developers that report to me who aren’t familiar with C#.

The author has made it available in PDF and XPS formats.  There’s source code too.


Sandcastle Rant

I came across this excellent post on the problems with Sandcastle, the Microsoft offering for generating help documentation for .NET 2.0 assemblies.  In addition to pointing out the problems with Sandcastle, the author (Grant Drake) brings us up to date on the status of other successors to NDoc. As someone who used NDoc 1.3 a lot on projects in the last couple of years, I was very disappointed that the author decided to discontinue work on NDoc 2 (especially since we have mailbombers to thank for the loss).


More on VSI files

A bit of “googling” turned up these links:

  • An MSDN entry on the subject
  • This link to a Power Toy for automating the creation of VSI files

Visual Studio Templates for Test-driven Development

I came across this blog post earlier today via Mike Gunderloy’s Larkware.com.  One of the comments requested .VSI files (the templates are for NUnit and MbUnit and are made available as zip files).  That probably would be a nicer way to package this.  Even without it, I’m glad to see anything that encourages test-driven development.  I’ll definitely use this with my development team soon.  I should probably learn how to create VSIs anyway.


India Skills Gap

I came across this article in one of the e-mail newsletters I subscribe to. It’s highly relevant to my current role because we use a lot of offshore staff for our work through companies like Tata Consultancy Services (TCS).

The rise in salaries and the springing up of private schools for training people in IT is just what basic economic theory would predict. The quality concerns are predictable as well. Before I joined APS, I asked some consulting colleagues how they would rate the various Indian IT firms. They had strong opinions on which firms were best. A lot depended on where they recruited and how experienced their hires typically were.

One area the post didn’t address that is quite important is turnover.  Because salaries in India are going up, that makes it challenging for firms to retain talent for any length of time.  This can certainly impact quality for companies like mine that use one or two offshore firms exclusive because we just don’t know who they’re backfilling with when they lose talent to other companies.

It’s certainly possible that India could start losing IT work to China.  But I suspect that eastern Europe and some of the former Soviet republics are just as likely to get some of that work.  Philip G. Armour’s column in the latest issue of Communications of the ACM talks about a technology firm in the midwest that’s been quite successful with an offshore team in the Ukraine.


Yet another xUnit testing framework

I wasn’t aware of the existence of SPUnit until a consultant mentioned it yesterday.  I’m not sure how deeply I’ll look into it (if at all) because of how many other testing frameworks that I really need to understand.


Visual SourceSafe Tidbit

I administer my employer’s VSS and Team Foundation Server (TFS) instances as part of my job.  As a first-time administrator of these sorts of systems, there’s plenty I’m still learning.  Today I found out that moving folders doesn’t work unless the user trying to execute the move has “Destroy” permissions.


The SHAPE command is the bane of my existence

I inherited some classic ASP code not long ago that needed some enhancement.  The look-and-feel of the site is pretty nice, but under the covers there’s tons of the inline SQL I hate so much.  But worse than that is the previous developer’s use of the SHAPE command.  I’d never used it, even when I last wrote classic ASP with my own hands (around 2003).  Once this project is over, I hope never to see it or use it again.  I’m really struggling to understand how it works (and why things were done this way).  I’m hoping this article will help me figure it out.  I’m grateful that someone took the time to actually develop a formal grammar for this command.  It reminds me a lot of the BNF notation we learned as 1st year computer science majors in college.


10 Years

I was in the middle of writing my self-evaluation for work (review time is coming up) when I realized that the end of 2006 marked my 10th year of working full-time in software development.


Goodbye 2006, Hello 2007

First, to my readers (all three of you), I hope that 2006 treated you well and that 2007 is even better.

2006 treated me pretty well as years go. I actually kept the “get in better shape” resolution I made last year by joining these guys. There’s 25 pounds less of me right now than there was at this time last year. I took up a new hobby (skiing). I bought a new car. I also got to do some traveling (Killington, VT for skiing and San Francisco, CA for vacation). I learned enough of a new programming language (Ruby) to try a startup idea with Sandro. A few months ago, I got a new job (and a nice raise as a result).

I haven’t made any resolutions for 2007 (outside of “get in better shape”). I’ve been seeing more of these “101 things in 1001 days” lists (like this one and this one) lately. While I don’t think I’m nearly as ambitious as my friends, there are some things I’ve been thinking about doing that would be good to attempt this year:

  • Learn a new programming language. One of the consultants that works for me has had a lot of good things to say about Eiffel. So far, I've installed the development environment, read a bit of documentation, and written a bit of sample code. There's a small product idea I'd like to try, and I plan to use Eiffel to do it.
  • Incorporate. My friend Richard has been encouraging me to do this for years now, instead of being a regular employee for some company. He's been working for himself as long as I've known him (at least 12 years now) and has done very well. So far, I've bought a couple of domain names and done enough budgeting to determine what my hourly rate should be if I were to go into IT consulting.
  • Re-learn the piano. I was good enough at it when I was younger that my last piano teacher wanted me to go to school at the Peabody Institute. Spending the past couple of years as a sound engineer for one of the services at my church just made me miss being able to play even more. Since I can still read music, I need to do something more with it.
  • Study the Bible more regularly. Some years ago, I took a Disciple Bible Study class at my church. We covered 75-80% of the Bible over the course of a year. It was a very spirtually-rewarding experience. I want to get (and keep) my life in enough balance that I can make some Bible study a part of each day.
  • Take a two-week vacation. 2005 was the first year I'd taken more than a week off in a row since my undergraduate days (back in the mid 90s). I took a bus tour through western Europe for nearly two weeks with my dad (and about 50 other people) and had an excellent time. It really helped me disconnect from work concerns, and I'm positive I'll need to do that again this year.

More on databases and business logic

This particular entry in the “forever war” of whether to use object-relational mapping or stored procedures does a better job than most in these ways:

  • It changes the argument from "either-or" to a situational one.
  • It broadens the scope of database objects in the discussion beyond stored procedures to include functions, triggers, views, constraints, and referential integrity.
  • It rates the suitability of each database object to a particular task.
I found the article especially relevant to my current job because of how many projects I'm responsible for that have huge amounts of business logic captured in stored procedures hundreds of lines long.  As far as I can tell, much of the reason for the length of these stored procedures is that they're being used to represent workflows.  SQL doesn't look like the best way to implement those to me, so I suspect I'll be looking at Windows Workflow Foundation a lot more closely in the very near future.

Source Code Control

I came across this post from Joel Spolsky last week (though I’m just now getting around to blogging about it). We’re using Team Foundation Server for source code control at work, and we’ve managed to have the problems of check-ins breaking the build and too few check-ins to have a good delta of changes at the same time.  While the applications we build at APS Healthcare aren’t the size of an operating system as far as lines of code, the branching-and-merging idea Spolsky describes would probably be useful to us.


Common causes of the System.NullReference exception

I came across this blog post today while researching a problem with one of our applications. The most interesting thing I found about this article was the comparison between VB.NET and C#. It’s one of a few I’ve seen that goes beyond the syntactic differences to deeper issues. The examples in this article show cases where C# wouldn’t even compile code that runs in VB.NET (and throws exceptions at runtime). C# makes you work harder to write code that compiles and throws exceptions at runtime. It’s yet another argument in favor of C# I hadn’t considered before reading this post.


Working with IT agencies

I have to deal with IT agencies a lot more now as a software development manager than I ever did in previous roles.  So coming across a blog post titled “IT Agencies and the Devil” was pretty funny.  If starting an IT agency is as simple as the author suggests, it certain explains why there seem to be so many of them.

So far, I can single out one such agency for providing people that are consistently high-quality–Software Consortium.  The guys they’ve sent to work on the projects I’m responsible for have all turned out excellent code and been very good about knowledge-sharing.


Training IT managers

I came across this post in a rare break between meetings.  Since I’m an IT manager now, I found it good reading (and a good ego check as well).


The right penalty for breaking a software build

Maybe I should institute this at my office on Monday.


String.Format is your friend

One of the consultants that works for me was trying to figure out the best way to format strings for writing messages to the event log for a Windows service he’s writing.  He was using the horrifying “blah blah blah” + + “blah blah blah” pattern that I despise.  So I took about 60 seconds to explain the goodness of String.Format to him.  It didn’t take much longer than that to convert him to using it.

A quick Google search revealed an excellent String.Format 101 blog post by Kathy Kam. Karl Seguin’s post on the same topic brings performance advantages into the discussion.  Another bit of information I didn’t know before reading his post was that the StringBuilder class has an equivalent AppendFormat method.