A Petite Change Request
Robert ran a web service used to store legal file data for a number of clients. One day, he received an email from his biggest client, Exci(C)dent, asking to meet about a new requirement.
"We've purchased new accounting software that requires us to track an additional piece of data," Philippe, Robert's contact from Exci(C)dent, explained over the conference call a few days later. "Each of our cases must now have a 'cost center' associated with it. There are a lot of these cost centers, so when our employees enter case data, we'd like for them to be able to pick the one they need from a list."
Robert frowned in thought. "Well, you guys already use every available field in my database. This would require me to add a new field to the database and web forms." A database change on a web service used by many clients wasn't horrible, but not exactly a prospect Robert relished either.
"Is that a problem?" Philippe asked. "We're getting a lot of pressure from above on this. We really need it as soon as possible."
Robert couldn't refuse his largest client. Besides, it was one measly field. "No, it should be OK. I'll figure out the nitty-gritty details myself. In the meantime, can you put your cost centers in a spreadsheet and send them to me? I'll import them into the database when I'm ready."
"Sure!" Philippe said.
It didn't take Robert long to create the new cost center table (VARCHAR(100) seemed safe), link it to the case data tables, and update his web forms with a new dropdown field. However, the spreadsheet from Philippe took longer. Much longer.
Where the heck is this thing? Robert wondered. Wasn't this supposed to be "urgent?"
Over the following several weeks, Robert sent a few gentle prodding emails. Finally, Philippe responded. Sorry for the delay! I was cleaning up the data. The list is about half as long as it used to be. Thanks!
Robert smiled. That was nice of him, whittling down the list to, what a couple hundred or so? Time to import them and test everything out"
He opened up the spreadsheet- and froze in horror.
Robert realized he'd made one of those terrible assumptions we all make from time to time: believing a client's simple request was just as simple as it sounded. There were nearly 1800 "Cost centers" in Philippe's spreadsheet, each one with 17 fields (four of which aren't visible in the screenshot).
Exci(C)dent employed 3600 people. Philippe claimed to have whittled the list down by half- meaning that before he'd scrubbed the data, there'd been nearly one cost center per employee.
Robert scrolled up and down the spreadsheet in mute horror for several minutes before grabbing the phone and ringing Philippe's desk. "This is kind of a lot of data to put into a dropdown," he explained, heart pounding. "Is there any way to simplify this further?"
"No, sorry," Philippe said. "That's the best I could do."
Who's going to scroll through 1800 cost centers every time they log a case? Robert wondered. Panic transitioned to desperation. "I think we need another call."
A week later, Robert met with the client to explain that the "cost center" ""field"" was simply too complex for him to accommodate. They decided not to import the list after all, and to have employees manually enter cost centers into a text field (ex. "345 Water Distribution"). Not optimal, but it worked.
To Robert's complete lack of surprise, a quick browse of those values manually entered over time showed that only a tiny handful of the 1800 cost centers had ever been used.
[Advertisement] Use NuGet or npm? Check out ProGet, the easy-to-use package repository that lets you host and manage your own personal or enterprise-wide NuGet feeds and npm repositories. It's got an impressively-featured free edition, too!