Saturday, March 3, 2018

"Can you add just one more little feature?": A Story About Software and Home Improvement

By Steve Endow

Wife: "Steve, can you install an exhaust fan in the small bathroom?"
Steve:  "Sure, hunny, no problem. I just ordered the fan and I'll call Sam to install it."

Customer:  "Can you add this simple little feature to our application?"
Developer:  "Sure, no problem.  I'll get right on that."

No big deal.

Sam: "Steve, I cut a hole in the bathroom ceiling for the fan, but something is strange. There's an extra layer of drywall on the ceiling, and it's not attached properly and it's sagging."
Steve: "Hmmm, that doesn't look right. Let's remove the extra drywall and see what the prior homeowner was covering up."

Customer: "So how's that new simple little feature coming along?"
Developer: "Well, I looked through the code, and the original developers didn't design the software to handle this feature, so it's going to require some redesign of the customization."

I think the project scope just changed.

Sam: "Steve, I think I found what the extra drywall was covering up.  It looks like the old bath tub and old toilet on the second floor that we replaced 3 years ago were leaking."
Steve: "Okay, so there is probably some old water damage?"
Sam: "Well...I think it's a little more than that. Looks like lots of mold and some termite damage."

Customer:  "So when you say that it will require some redesign, what does that mean?"
Developer:  "Well, the customization wasn't designed to handle the new functionality, the database tables don't have a field to store data for the new feature, and the user interface doesn't have space for the new feature.  Those are the items I've found so far."

Requirements are shifting...and growing...

Steve: "So how's it looking?"
Sam: "Well, I removed the entire bathroom ceiling and one wall.  There's quite a bit of termite damage, so we're going to need to replace several studs and rebuild the wall."

Customer: "So we need to modify the database tables to store the new data, modify the user interface to handle the new data entry, and write a little bit of code?"
Developer: "Well, after additional review of the old code, I think some of the code needs to be rewritten to meet your new requirements."

The magnitude is just starting to sink in.

Sam:  "It looks like the water damage extends in the back wall behind the sink and vanity. I know you were trying to keep the vanity, but we have to rip it all out."
Steve:  (audible sigh) "Um...okay..."

Customer: "So how much of the code do you need to rewrite?"
Developer:  "I think it's going to be easier to just write new code from scratch. Retrofitting the existing code will take longer and we'll have to deal with other problems and limitations."

The full scope finally emerges.

Steve: "So this morning, this started as a simple project to install a bathroom fan.  But by lunch time, it turned into a complete gut and rebuild of the entire bathroom, down to the studs."
Sam: "Ya, pretty much."

Customer: "So you're saying in order to add this one feature, we need to rewrite the entire application from scratch?"
Developer:  "Ya, pretty much."


Steve Endow is a Microsoft MVP in Los Angeles.  He is the owner of Precipio Services, which provides Dynamics GP integrations, customizations, and automation solutions.

You can also find him on Twitter, YouTube, and Google+

No comments: