Scope Creep in Software Development

Few words strike fear into the hearts of software development managers and developers than scope creep. Long the bane of the development industry, scope creep has affected almost everyone who works on software – even those who work for themselves but especially those who report to a client providing software specifications.  The perennial question in software development management has always been “How can we manage or eliminate scope creep?”

First, let us define scope creep for the purposes of this discussion.  Scope Creep refers to the tendency within software development projects for the scope of a project to slowly grow over time through changing requirements and specifications.  Scope Creep is a disaster for software projects because it makes budgeting nearly impossible, predictions of completion nearly always incorrect – often by astounding margins, makes determination of project feasibility questionable as the development team may not be aware of technical challenges that will be faced due to expanded requirements and can even cause a project to “scope thrash” in a state where “feature complete” is never clearly defined and a project never completes because the current state is never accepted as finished even if all existing features work correctly and current scope is far beyond the original requested scope.

While thinking about this article it occurred to me that there are two schools of thought on scope creep: those who believe accept that scope creep is an inherent artifact of the software development process and those who believe that it can be eliminated through project management practices (rather than simply mitigated.)  But that is not the whole story.  In reality, I realized, these two schools of thought are products of two higher issues: that some people believe that big design up front (aka BDUF) is a necessity and those who do not.  Even this, though, is not the whole picture.  At a higher level than this is the old argument as to whether software is an engineering discipline (engineering efforts require a small amount of design followed by a large amount of manufacturing or construction) or a design effort (where the design requires almost all of the effort and duplication is a trivial afterthought.)

Disclaimer: I am well aware that certain small segments of the software development community work on project types which absolutely require BDUF and locked requirements such as nuclear power station control systems or control systems for the space shuttle.  This represents a niche software market and falls outside of a more general discussion.  However, many projects of this type are only believed to be locked into BDUF processes because of client requirements and not because non-BDUF methodologies would necessarily produce less stable or reliable software.  Statistics indicate that we may, in many cases, be increasing risk and failure rates by requiring these projects to avoid the best practices of the industry in general.

The logic goes like this: If you believe that software development is an engineering task then you assume that you must complete all design before “construction” begins.  This requires that all or almost all design be completed prior to the beginning of construction or manufacturing.  This is the origins of big design up front.  This, in turn, requires that scope be carefully controller as BDUF has means of managing changes in scope and small changes can have catastrophic effects on an engineering project.  Imagine a bridge where, after construction has started, the people who have request the bridge decide that they choose the wrong location or that its load bearing properties need to be changed to carry trains in addition to automotive traffic!

One of the key differences between software development and traditional engineering disciplines in that traditional clients understood that if the products was already made or partially made that the cost of retooling for changes would be staggering.  Even a small change to a car (make it 2 inches longer) would send the entire design team back to the drawing boards and all aspects of the engineering portion would begin again and safety certifications, marketing, etc. would all have to retool almost as if they were starting from scratch.  In software, though, clients do not see the final product as immutable and do not understand the impact of changes.

Scope creep in software development is deeper than a misunderstanding between clients and software engineers, however.  In specifing a traditional engineering project it is generally fairly simple for the person requesting the product to provide meaningful and useful specifications.  Here is an example, I can actually order a bridge from the engineering firm by stating: the location at which I need the bridge, the carrying capacity of the bridge (two lane road, four lane road, etc.) and any special features (one walking path on the side, two paths, open sides for a view, etc.)  The rest of the bridge design is carried out without my input because what do I know about designing a bridge?  In some cases there might be several designs submitted, all which meet the specifications but with wildly different looks, from which I can choose one to build.  Once planning for that build has begun there will be cost involved with me changing my mind for obvious reasons.

Software engineering is not like this, though.  In bridge building (or car manufacturing or whatever traditional engineering discipline you wish to imagine) the people physically putting the bridge or car together make absolutely no decisions about what parts to use or how to assemble them. They are provided a design that tells them every nail, rivet, girder, component, material type, weld type, etc.  In software, the architect provides only a high level design and the software engineers or developers who actually create the software continue the low level design process choosing the design, components, structure, etc.  So the design process continues until completion, at least a a low level.  So in software everyone is an engineer and no one is a construction worker (or factory worker.)

This means that design is always underway no matter what we do.  If software developers were not doing any design and simply assembling code as specified by a higher level designer then that piece of the work would be automated simply and the higher level designer would “become” the developer in question.  That may sound strange until you think about high level languages like Java or C# .NET with large support libraries, application platforms like JBoss or Rails, GUI designers, toolkits like JQuery or Dojo, etc. all which come together to eliminate many routine design decisions for most projects allowing developers to switch from writing extremely low level code to focusing on more design issues and domain specific problems.  The “moving up” of the designer is a constantly occurring process that year by year makes the average developer able to do so much more than they could in the past and makes bigger and more complex software projects possible.

Given that we know that scope creep can and will happen to most projects we have three choices: due nothing and see what happens, manage and mitigate scope screep (the BDUF approach) or “embrace change” and build scope change into the ongoing design process (the Agile approach.)  Obviously, doing nothing, is a recipe for disaster and should be discounted.  Only the naive take this approach.

Managing and mitigating scope creep is a challenging and difficult project management endeavor.  This generally requires a large amount of client education and heavy contractual agreements limiting the client’s ability to make changes, to accept a reworking of scheduling and budgeting with each significant request and to lock client’s to a design at some point so that no further changes may be made.  This approach can work and often does but its failure rate is one of the most significant contributing factors to the high percentage of failed software development projects throughout the industry.

This approach forces clients to make many decisions at the beginning of a project at the point when the least is known about it.  It does not address changes external to the project that may force the need for scope change upon the project.  It also risks clients becoming disatisfied with the project partway along and finding it easier to pull out and start again than to rework what already exists.  Even when a project does complete it risks being outdated, poorly specified and at lower than anticipated relevance.

Moving to an Agile approach, where scope creep is accepted as being inherent to software development, things work very differently.  In most Agile practices there is some design up front but the idea is to design only those portions very unlikely to change and only to design enough to provide the basic foundation and to address any hidden problems that could arise but would have been discovered through an up-front design process.  Obviously no project will work well without any design at the beginning.  How would you even know where to begin?

Agile does not dispute the need for design but, in fact, is designed around the idea that the design is so important that it can’t be determined at the outset and left as-is.  Agile takes the approach that the design is far more important than that ands builds design into every aspect of the development project.

A moderate amount of design is done from the beginning.  Then design, both low lever and architectural, continues throughout the project.  This approach moves design decisions from the time when the least is known about the project to the time when the most is known.  It builds in flexibility so that as the client or business requesting the software learns how the software can and will work they can learn more about how they will use it or expand what they need it to do or even reduce features that they later feel are unnecessary (although we all know how unlikely that is to happen.)

With many Agile processes, such as Extreme Programming, there is a concept of keeping the project in a continual “shippable” state in which everything that has been implemented is currently working and functional.  In this way, at any point, if the project budget for time or money runs out the project is at least usable in some form even if not in the form originally envisioned.  In this manner, the scope starts very small and grows with each project iteration.  This is not creep but a built-in function of the development process and very much intended.  In this way, the client or business can decide to use the software at any time while allowing for growth and advancement to continue as well.  The project can peacefully continue until the client feels that additional features are no longer necessary.  There is still a risk that the client will never call an end to the addition of features but since the project is continuously shippable or usable the risk involved in not reaching the “end” of a project does not exist.

An important aspect of Agile methodologies is that features are prioritized and completed discretely on a priority basis.  By addressing features purely by their priority we can assure that the system always exists in its most usable state for the amount of time that has been given to it.

Both approaches to scope creep management have their merits.  The risk of the traditional BDUF approach is that it is often used to shift responsibility from the software development team to the client.  This is handy when you are the developers and have no long-term interest in the viability of the software but are only concerned about meeting contractual obligations (whether to a third part or to an internal business unit.)  The BDUF approach is about solidifying responsibility with the client even though they are not software designers.

The Agile approach accepts that the client or business requiring software is not a software engineer and needs to work with the team to produce something that will meet the business needs.  This approach is about meeting business needs not to lock the customer into paying for whatever original requirements were specified.  Locking in customers may sound great to some outsourcing shops but businesses would be well advised to look elsewhere for companies whose interest lies in making great and working software not in meeting contract requirements alone.

Businesses looking to generate software internally have no reason to support the use of BDUF which operates in the disinterest of the business itself.  This ideology pits the software development team against the business when, in reality, they should be aligned to work towards mutual benefit.

When deciding on a scope creep management strategy you must ask yourself, “Are you going to embrace the unknown and use it to your advantage or are you going to ignore it and continue to make software designed before all current information was gathered.”  Businesses whose processes are Agile have a distinct advantage in the marketplace as their products are based on current market needs and pressures and not based as a response to pressures that existed when the project was first proposed.

January 9, 2009: Oreo Goes to the Vet

We tried to go to bed around midnight last night but that did not work out so well for me.  Oreo was feeling pretty bad and needed me to take him outside roughly every twenty to thirty minutes for several hours.  I kept trying to go to bed after each trip thinking that it must be the last one but inevitably he would ask to go out again just before I could fall asleep.

The constant trips outside lasted until around five in the morning when Oreo just got sick and made a mess in the living room.  So I set about cleaning that up.  Then several more trips outside.

Around six thirty or so Oreo went out and got sick and then was able to stay inside for a while.  I gave up on the idea of going to bed tonight as I need to be able to work in the morning and just getting to bed at six thirty or later just does not work for that.  So I headed down to the basement to log in and get started on the day.

Oreo stayed in the living room for half an hour or so just standing behind the dining room table not feeling well.  He often stands like taht when his tummy hurts.  Then, around seven, he came down to the basement and laid down on his pillow beside me and fell asleep.  He must be very, very tired.  Any sleep that he can get is important in allowing him to feel better later today.

We managed to get a vet appointment for Oreo at the Peekskill Animal Hospital right around the corner on Crompond for a quarter till eleven this morning.  This is Oreo’s first vet trip since moving to Peekskill.  We have some concern that he has more than just an upset tummy and might have bloat.  He gets tummy problems frequently but this is far more serious than the usual.

We went to the vet and that took a while.  It looks as though Oreo just has a tummy ache and nothing to be too concerned about.  They took blood and urine samples, gave him an examination, gave him a shot to discourage vomiting so that he can get some nutrients into his system and put him on a mild anti-biotic for a few days.  We have to feed him lightly tonight and see how he does.  Likely he will be doing well by tomorrow.

Oreo was a nervous wreck at the vet’s office.  Poor little dog.  A long, painful, sleepless night then a trip to the doctor’s and his first time at this particular doctor’s office so he was extra nervous.  They had to try three times to get blood too which was really sad.  One of the needles got bent in his little leg.  He tried his best to be good and never yelped or barked.  He was definitely scared and in pain a few times.

After the vet we ran over to Stop and Shop, which is right next door to the animal hospital, and picked up the missing supplies for making Oreo’s food.  We aren’t going to let ourselves run out of that again anytime soon!  We will be making a batch this evening.

My afternoon and evening went by in a blur.  I was so tired that everything really was hazy.  Much of the afternoon I felt genuinely ill trying to force myself to keep working when all that I wanted to do was to collapse and get some rest.  Not a wink all night long and today was a very long work day as well.

We had a small Amazon shipment arrive today.  “The Baby Book” arrived which is our instruction manual for Liesl.  We also got the six volume of Family Guy on DVD.  We currently have the complete collection.  Now to get that working on both the AppleTV and the PS3.

I talked to Andy yesterday and got him turned on to h.264 (via the x.264 codec) rather than legacy MP4 like XVid and now he is in love with Handbrake and h.264.  He has his XBOX 360 updated and is using it to watch video content from his desktop.

The courier that is bringing our new television called today and scheduled to have the unit delivered sometime tomorrow.  It should arrive during normal business hours from nine till five.  Sweet.  I am very excited to move to a big 1080p LCD in the living room!  Very excited indeed.  Also excited to finally be able to watch stuff in our bedroom as well.

I am scheduled to work tomorrow morning.  That is going to be tough because I need some time to sleep before then.  I have to be up before eight in the morning.  At least I will be awake in order to deal with the television shipment.  The television is about seventy pounds without the packaging and extra stuff like the stand so this is going to be hard to move around.

Before calling it a night I set up the desktop to do a couple of Handbrake jobs.  We are now rather desperate to get stuff converted again so that it will work on the PS3 and the AppleTV and not just on the AppleTV.  I am hoping that maybe tomorrow I can test out the XBOX 360’s media capabilities as well as that is going to be important really soon as well.

Jenn and Angelo are planning on coming out to visit us in two weeks.  They live in the Philadelphia area and were married recently.  Angelo and I still have not met, in fact.  That will be awfully nice to get to see them.  Having a baby is a handy way to get everyone to come visit you 🙂

I am heading to bed around seven this evening.  I have caught my second (or is it third now) wind but I will be in horrible shape all day tomorrow if I do not get a lot of sleep now.  I am skipping dinner (I also skipped breakfast but did have lunch with Dominica) and just going to bed.  Hopefully Oreo will come snuggle too. He is also very tired as he only barely slept last night.  More than me but not by much.

Liesl had a very good day today which is crappy because I really didn’t get to see her at all.  I was either working or out taking care of Oreo all day and only got to spend about twenty minutes with my daughter.  At least I get to sleep through her fussy evening hours.  That leaves Dominica alone to deal with those hours which is going to be awful for her.  I can’t stay up until midnight, though.  It just isn’t a possibility.  Oreo will probably come to bed which does mean that Dominica will not have to take him out repeatedly while trying to deal with Liesl.  That makes the evening hours so much more difficult.  Both Oreo and Liesl suddenly go from low-maintenance to needing constant attention at about the same time every night.

January 8, 2009: Oreo Not Feeling Well

As is becoming common, Oreo got me up this morning with a desperate need for a walk.  Today it wasn’t a short trip just outside the door either but one requiring my coat and shoes.  At least it forces me to wake up and to get moving first thing in the morning.

The good news this morning is that the house keys have been located.  They are not here so they need to be shipped to us but at least we aren’t having the mailbox locks replaced now which would be yet another big pain and who knows how long it would take.  I am very glad that we decided to give it just one more day before asking the post office to replace the lock.

We did some more work with the TVersity system this morning.  I have it running off of my desktop in the basement and after a little testing it is still not working very much but we did, somehow, get two episodes of one show to work but we are not sure why or how.  Other episodes do not work and tons of other material does not work.  It is very baffling.  This really should be a fairly simple exercise but is turning out to be rather complex.

There is a lot of snow coming down in Peekskill this morning.  Big soft flakes falling pretty quickly.  Not a storm by any stretch.  It is a calm day with very little wind.

Dominica left for her doctor’s appointment at twenty until two leaving me home with Liesl and Oreo.  Oreo has been very sick the last two days and is steadily getting worse.  His symptoms are very flu-like although I am guessing that it might be the new canned food that he has had to eat for the past two days because we ran out of his home-made stew and have not been able to get to the store to get the necessary ingredients to make more of it for him yet.  We will be running to the store and getting ingredients so that we can make his food tomorrow.

Dominica’s appointment went well and everything is looking good.  She did some very quick shopping at the CVS and then ran home arriving around four.  This was probably the longest stretch in which I was in charge of Liesl all on my own and I had a sick Boston terrier to care for as well.  Everyone was still alive at the end so it must have been a success.

I did a bunch of testing with TVersity today and we have discovered that we have two problems.  The first is that almost everything that we have converted to h.264 thus far was done with an old codec that had some problem which means that the PS3 cannot play the output files (even though the AppleTV and VLC have no problems at all.)  So we are stuck reconverting a massive amount of material.  We also figured out that there is some issue with network speed or caching on the PS3 or something because the videos that do work only barely work as they stop and stutter constantly.  Considering that we have a completely GigE network and the PS3 is alone on an 802.11n wireless connection it is hard to imagine that network speed could possibly be the issue.  At least we figured out the compression problem and have a solution for it even if it is a really crappy one.

I spent a great deal of the evening taking Oreo out for one walk after another.  He is definitely not feeling well and his trips outside are becoming more and more frequent even though it is very cold.

Tonight we finished watching the third season of Dr. Who.  What a great season.  I think that this was the best one so far.  Since we watch Dr. Who via Netflix we are one season behind.  Those in the UK have already seen season four (2008) but we just got season three (2007.)

I’ve been trying to play Final Fantasy III while we watch shows at night.  I am at a stage of the game where a lot of grinding is necessary and I am able to do that without really paying any attention to it.  So I managed to make some really good progress tonight on that.

January 7, 2009: Liesl’s First News Appearance

It isn’t much of an appearance but a photo of Liesl was used in a NowPublic article about a website about Cute Things Falling Asleep which has become so popular as to be mentioned on CNN (although one must argue that CNN is not popular enough to be mentioned on Cute Things Falling Asleep while SGL’s standards are lower and both were mentioned here.)

Oreo woke me up at seven this morning needing an emergency trip outside.  Nothing like waking up and immediately having to run outside in your pajamas in bare feet to take the dog out to pee while all of the neighbours are getting onto the road to head to the train station.

Work was fairly busy today.  Nothing unexpected.

It is all ice and rain here in Peekskill today.  Oreo is not happy.  Taking him for a walk involves a treacherous slide down to the driveway.  The grass is so laden with ice that it is difficult to walk anywhere safely and it hurts our little boy’s feet.  We are very glad that we do not have to drive anywhere today.

I put in a lot of time working on getting stuff converted to h.264 today and to getting things working with the AppleTV.  As far as I can tell, though, the AppleTV and/or iTunes is completely overwhelmed by the volume of content that I am attempting to pump through it (which is not that much, in reality) and it simply cannot handle it as the menus on the AppleTV just will not update to display the new content.  It is very depressing.  So much work has gone into this solution just to find out now that the system fails silently without any errors, warnings, notices or anything.  Another great Apple product – missing interface components and no means of repairing the problem that we cannot even identify.

So, since Apple can’t make iTunes function properly or reliably, we are looking into other solutions.  The first thing to try is a UPnP AV Mediaserver solution such as TVersity which will make the h.264 collection visible to the PS3, XBOX360 and any other device that supports the protocol.  We are going to get this to work one way or another.

I got TVersity installed today and the PS3 is able to see our media without any problem but when I go to actually play something it fails.  We aren’t sure what the problem is but I do not have time to look into it today.  I am hoping that the issue is not with the media but just with the speed at which we are currently able to deliver data to the PS3 (the SAN device that I use is insanely slow so that could be the problem – it is designed for large, cheap near-line storage and not for high-speed access.)

I got to play a tiny bit of Oblivion and Final Fantasy III today but very little.  Dominica did not get to play anything at all.  She has been working her way through Blue Dragon which is a very large game, three DVDs, for the XBOX 360.

This evening we continued watching the third season of Dr. Who via Netflix.  Tomorrow Dominica has a doctor’s appointment at two as a follow up to her surgery just to see how everything is going.  Hopefully the weather will be good for her to drive.  It would be very impractical for me to drive her down to the appointment since it would mean packing up Liesl and Oreo twice and doing twice as much driving and pulling me away from work in the middle of the afternoon for an hour or more.  It would be so much, in fact, that we would never get out of the car but would just drive around or sit somewhere while she was at the appointment and wait for her to finish since getting them both in and out of the car would take so long.

We finally ordered our new LCD television for the living room today.  We got a Samsung 52″ LCD.  Nothing fancy, pretty much the bottom of the line but it will work fine for our purposes.  It will be much, much bigger than our current 32″ Westinghouse and should be brighter, have better constrast and has twice the resolution (1080p rather than 720p.)  We expect it to really make the living room a lot more comfortable for us.  For example, because of the low contrast, small size and low resolution I find myself standing directly in front of the current television to be able to see small items on the ground in Fable.  Hopefully with the new screen I will be able to stay in my chair.  We are hoping that it will be delivered next week.  We were able to pay for the entire television, including tax, from our refund money from Eleven80 and still be able to put over $100 into our investments from the refund money (refund of our initial deposit that we made when we signed the contract in August or September of 2006.)

The old, 32″ LCD then is going to move up to our bedroom for the time being where it is going to be mounted onto the wall opposite the bed so that we can watch stuff from bed just like we used to be able to do when we lived at Eleven80.  We got used to having that setup very quickly and now we really miss it.  It will really be great for Dominica who is stuck rocking Liesl a lot up in the bedroom but has nothing to do but to stare at the wall.  Eventually we plan to get a nice, large LCD for our bedroom too and then the 32″ will move into the nursery as a guest television (we constantly have guests staying in the nursery) and then eventually to be Liesl’s own television once she is a little older and watching stuff.

January 6, 2009: Really Long Day of Work

When you have a new baby in the house, every morning is a challenge to get out of bed.  Even when we manage to get to sleep at a reasonable time the night’s sleep does not seem to be very relaxing.  I can only imagine how bad it is for Dominica.  She gets so much less sleep than I do.  I am getting about five to six hours of sleep each night, I think.  Although I do have to get up in the morning and she stays in bed quite some time after I get up.  As much as two or three hours some days.

I was working at eight thirty this morning.  Oreo came down to the basement with me but after just twenty minutes or so he decided that he was not interested in the cold basement and snuck up to the living room to stake his claim on the recliner while Dominica and Liesl were still asleep.

Today work finally picked back up to a normal pace and I was pretty much busy all day.  I worked all morning and then, at twelve thirty, I switched to being in the living room and kept watch via my BlackBerry Curve and watched Liesl for two hours while Dominica went to the grocery store.  Luckily I get a really slow lunchtime period or else that would not be possible at all.  I did work during that window but the requests were light and intermittant.

When Dominica got back from the grocery store she managed to catch the mail carrier and got all of our mail from the mail box.  That was extremely important as we do not have the key right now.  That was more than a week’s worth of mail that she brought in today.  Almost all junk mail but still.  There was some important stuff in there and one package of really inexpensive HDMI cables that I had delivered from Amazon.

Liesl was very hungry by the time that Dominica got back and I needed to get back down to the basement so that I could get back to work.  So I handed Liesl off to Dominica and went back to the dungeon.  I attempted to play a little Fable over my lunch time but only barely got to play one small section of the game and failed in my quest and had to start over anyway so it was all a waste.

For the first time since we moved from Newark I have our 1TB SAN system back online and running today.  Now we have access to our large collection of converted movies and such via iTunes and the AppleTV that we have been doing without thus far.  The SAN is in the network closet along with all of the other networking gear which is far nicer than having it sitting on my desk which is where it has been most of the time.

I remembered to take out the cardboard for recycling this afternoon.  Tomorrow morning is the cardboard pickup that only comes once per month and we had a dining room full of stacked boxes that needed to be taken out.  We look forward to cardboard pickup around here as if it were Christmas.  We constantly amass so much cardboard that only having a pickup once per month is rather problematic.  We definitely miss having the recycling room right down the hall with nightly pickup like we had at Eleven80.  We got spoiled.  Now we are trying to figure out where in the house we can stage that much cardboard each month.

Dominica made dinner on the early side and we ate around six.  That is amazingly early for us.  Normally we are struggling to eat around ten at night!

I did some basement cleaning tonight while Dominica watched movies on Netflix.  We are slowly taking back that space and getting it nice.  It is the one area of the house where we really have a hope of keeping up with any mess and having it stay neat.  If we fall behind down here then the war against the mess will certainly be lost.

I ended up working very late tonight.  It was eight thirty when I finally wrapped up at the office.  Quite a long day but not unexpected for early January.  Exhausting though.  Once it is eight thirty at night it is hard to decide what to do to enjoy the rest of the day before it is time to go to bed.  Almost anything you do is likely to either be stressful, exhausting or make you feel like you just threw the time away.

I did manage to kick off some additional h.264 Handbrake conversions.  We do not have very much left around the house to convert but what little is here I am tracking down and moving to the AppleTV.  I pointed the iTunes that is feeding the AppleTV to the SAN for the first time today.  This will be our first test to see how well this works.  The SAN is extremely slow compared to other disk access methods that we currently have available in the house so there is a lot of potential for failure but I think that it will probably work for now.  It is really just a temporary solution until we get the long term server-based storage solution sorted out.  That will take a sizable investment and is not something that I really want to do right this moment if it can be helped at all although as we run out of storage more and more quickly it is becoming a rapidly approaching necessity.

The third season of Dr. Who is now available on Netflix OnDemand so Dominica and I watched a few episodes of that while Liesl slept.  Liesl did not wake up for her evening bottle until around one or one thirty in the morning!  Normally we try to give her that bottle around ten.

Before going to bed tonight I noticed that the freezing rain has begun to come down.  Everything is coated in ice but not badly like often happens back home.  Ice storms seem to be a very regular occurrance back where dad lives.  They must get them every year now.  I don’t remember it being like that when I was a kid.  Oreo was not happy about having to walk out onto the ice.