Software Development Failures?
Tags: 
Date: 20 August, 2009 - 08:26

In my regular wanderings of the web, I came across an interesting article titled "Why Software Developers Refuse to Improve".  While the author talks about metrics including developer effectiveness and team vs team effectiveness and company-wide effectiveness, he cited another data point that I thought was interesting:

"He offers some suggestions as to ways that organizations could improve, such as establishing the feasibility of a large development task beforehand, citing figures that 65% of 1 Million+ LOC systems are canceled before completion, as are 50% of 500KLOC systems, and 25% of 100KLOC systems."

While the obvious implication of the article is that organizations are not properly equipped/trained/prepared to tackle these large software development projects and therefore eventually fail.  Especially early in my career, I tried to tackle problems and ideas that simply weren't reasonable or were considered ridiculously complex and far beyond my skills.  This is a common problem on software development teams with little real-world experience or hubris in their own skills or both...

All of this seems logical... but what about an alternative explanation?

While I don't put much stock in LOC (Lines of Code) as a metric for developer/team productivity*, it can often be an indicator of other things.  For example:

  • Large codebases are too complex to be understood by a single person.  With a small system, it's relatively easy to remember what is going on where in the code;
  • Large (or quickly growing) codebases are more likely to have duplication - some of this happens due to team members not knowing what resources are already available in the system or a lack of communication between current efforts;
  • Large codebases with duplication are more likely to introduce bugs of slightly different symptoms for similar functionality;
  • Large codebases are likely to be more complex.  After all, if the problem being solved was simple, the code would be simpler;
  • Large codebases are more likely to have "cruft" code... aka code that no longer has a purpose but hangs around forever;

So what if these are the real reasons for the failure of large projects?

At some point, some magical threshold is crossed.  No one on the team can understand all of it.  As team members come and go, the average understanding of the code goes down.  Issues that might have been trivial for the original team now become difficult and obtuse.  New developers believe "there must be an easier way" and duplication goes from "likely" to "probable".

*  For example, web2project at v1.0 was about 133KLOC.  At present, just a few weeks away from the v1.1 release, we've grown by about 5%, much of which is due to Unit Tests.  If you remove Unit Tests, we've actually shrunk by about 1% while closing dozens of bugs and implementing quite a bit new functionality.


Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

I would suggest that these

I would suggest that these indicators stem from the practice of not properly maintaining a large codebase. In most organizations, the focus is on deploying code within a narrow time frame. That is, ship it now. The first items to be cut from the budget/schedule, if they were ever in there to begin with, are testing, documentation, and any perceived "slack". The temptation to get something done right now often wins out over getting it done right.

I think, and granted this is anecdotal, that successful software projects are ones that pay attention to building the codebase right and maintaining it as well, doing things like:

  • Proper testing, unit- or otherwise, but likely automated so that you can prevent regressions when you change your codebase.
  • Documenting Code, phpdoc and at least API generated docs. I know when I'm looking at yet-another-framework, that good documentation and howtos/tutorials are the first thing I evaluate. Its why I hated my first exposure to CakePHP, but liked Solar and CodeIgniter. Even Drupal does a decent job of this, which is why so many can overcome/live with how its designed. Documenting a codebase is also instructional for finding/flagging deprecated functions, repeated code blocks, and planning what needs re-factoring, making it easier to bring new developers up to speed.
  • Maintaining the codebase, doing the little things that only programmers might notice but can have an impact on how extensible, understandable your codebase is. Encapsulating code in classes/functions, laying out files in an understandable manner, separating View from Logic, going back and fixing the corners cut to release the project, etc.
  • Using Versioning - I can't imagine working without it now. The challenge, particularly on a web site project, is getting non-technical users like designers to learn it and use it.

I don't think this is an exhaustive list, just observations from my own experience in inheriting 2 relatively smallish product code bases.

Spell Check

When you can't be bothered with spell check, your credibility is severely reduced especially when using _words_ like "noone".

My apologies

I am sincerely sorry that I had a typo and that it obviously caused you so much stress.  I hope my career can recover from it.

I will work every day in a feeble attempt to make things better... knowing that - quite possibly - if I make one more, then my career will be over.

Don't be sorry

it's a common mistake...you don't have to be sorry! I think that person is just a little to anal! Look at my airsoft sniper rifle blog... I have a lot of typo...you don't see my reader complaining about it! LOL

-Matt

That's interesting that

That's interesting that while the obvious implication of the article is that organizations are not properly equipped trained prepared to tackle these large software development projects and therefore eventually fail. Nice blog.

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <br> <img> <p> <blockquote> <strike>
  • Lines and paragraphs break automatically.

More information about formatting options