It seemed like a simple request. "Please add 'MAINT-CNTRL-ADMIN' to the cost center dropdown for client #876." It was also Scott A's very first assignment, having recently started as a web developer for the B2B merchandise reseller.
The ecommerce application he was hired to maintain was ASP-based and had been developed over the course of several years by an outside consultant. During the job interview, the system looked pretty decent: it tracked orders, inventory, products, etc. The UI wasn't wonderful, but it worked.
As for the request, Scott figured it'd be a matter of finding the cost center table and add a new row for that particular client. If only it were that simple. Since there was no "Cost Center" table — nor anything named anything similar — he decided to just trace the code to find where the dropdown got its data from. That's when the fun began.
The first thing Scott noticed was that there seemed to be a lot of include files. And the include files included a lot of other include files. And those files included even more files. Functions were being called and objects being created that he couldn't find the source for. After a short while, the entire site began to seem like one giant "choose your own adventure" novel, and it quickly became clear that simply opening up the target page and looking for the drop down wasn't going to be enough.
In desperation, Scott wrote a simple script that would trace all of the include files and display them in a nice pretty tree. Surely, he'd be able to find the files he needed to look at after that. Following is the output of what he got for one — yes, one — the pages within the website.
catalog.asp catalog.code.inc.asp catalog.display.inc.asp catalog.display.product.inc.asp catalog.display1.product.inc.asp catalog.display.product.files.inc.asp catalog.display.productADD.inc.asp catalog.display19.product.inc.asp catalog.display.product.files.inc.asp catalog.display.productADD.inc.asp catalog.display2.product.inc.asp catalog.display.product.files.inc.asp catalog.display.productADD.inc.asp catalog.display3.product.inc.asp catalog.display.product.files.inc.asp catalog.display.productADD.inc.asp catalog.display4.product.inc.asp catalog.display.product.files.inc.asp catalog.display.productADD.inc.asp catalog.display5.product.inc.asp catalog.display.product.files.inc.asp catalog.display.productADD.inc.asp catalog.display6.product.inc.asp catalog.display.product.files.inc.asp catalog.display.productADD.inc.asp catalog.display.productlist.inc.asp catalog.display.productlist2.inc.asp catalog.display.productlistProduct.inc.asp catalog.display.quickorder13.inc.asp catalog.display.quickorder23.inc.asp CatalogRedirect.code.inc.asp category.code.inc.asp iUser2.0a.code.login.inc.asp iUser2.0.code.login.inc.asp iUser3.0.code.login.inc.asp Category2.0.obj.inc.asp iUser2.0a.code.login.inc.asp iUser2.0.code.login.inc.asp iUser3.0.code.login.inc.asp layout.display.catalogs.inc.asp content.display.catalogs.inc.asp cart.display.inc.asp cart.display.table.inc.asp CartImage.display.inc.asp catalog.display.feature.inc.asp catalog.display.productlist2.inc.asp catalog.display.productlistProduct.inc.asp catalog.display.inc.asp catalog.display.product.inc.asp catalog.display1.product.inc.asp catalog.display.product.files.inc.asp catalog.display.productADD.inc.asp catalog.display19.product.inc.asp catalog.display.product.files.inc.asp catalog.display.productADD.inc.asp catalog.display2.product.inc.asp catalog.display.product.files.inc.asp catalog.display.productADD.inc.asp catalog.display3.product.inc.asp catalog.display.product.files.inc.asp catalog.display.productADD.inc.asp catalog.display4.product.inc.asp catalog.display.product.files.inc.asp catalog.display.productADD.inc.asp catalog.display5.product.inc.asp catalog.display.product.files.inc.asp catalog.display.productADD.inc.asp catalog.display6.product.inc.asp catalog.display.product.files.inc.asp catalog.display.productADD.inc.asp catalog.display.productlist.inc.asp catalog.display.productlist2.inc.asp catalog.display.productlistProduct.inc.asp catalog.display.quickorder13.inc.asp catalog.display.quickorder23.inc.asp catalogform.display.inc.asp cataloglink.display.inc.asp CatalogPass.display.inc.asp catalogpointscash.display.inc.asp catalogpointshistory.display.inc.asp CatalogPointsReport.display.inc.asp catalogpointstransfer.display.inc.asp catalogpointsupload.display.inc.asp CatalogProfile.display.inc.asp CatalogSearch.display.inc.asp catalog.display.productlistProduct.inc.asp CatalogUser.display.inc.asp changepassword.display.inc.asp inventory.display.inc.asp inventoryvalue.display.inc.asp login.display.inc.asp login.error.display.inc.asp login.permanent.display.inc.asp lsmanage.display.inc.asp order.display.inc.asp order.display.1.inc.asp cart.display.table.inc.asp order.display.2.inc.asp cart.display.table.inc.asp order.display.2.BillBranch.inc.asp order.display.2.BillCorporate.inc.asp order.display.2.BillMe.inc.asp order.display.2.BillMeWithPO.inc.asp order.display.2.CostCenter.inc.asp order.display.2.CreditCard.inc.asp order.display.2.PaidInFull.inc.asp order.display.2.PaymentTypeRequest.inc.asp order.display.2.PayrollDeduct.inc.asp order.display.2.Points.inc.asp order.display.2.Prepay.inc.asp order.display.3.inc.asp cart.display.table.inc.asp order.display.4.inc.asp order.display.3.inc.asp cart.display.table.inc.asp order23.display.inc.asp cart.display.table.inc.asp cartfile.code.inc.asp order23.display.1.inc.asp order23.display.2.inc.asp order.display.2.BillBranch.inc.asp order.display.2.BillCorporate.inc.asp order.display.2.BillMe.inc.asp order.display.2.BillMeWithPO.inc.asp order.display.2.CostCenter.inc.asp order.display.2.CreditCard.inc.asp order.display.2.PaidInFull.inc.asp order.display.2.PaymentTypeRequest.inc.asp order.display.2.PayrollDeduct.inc.asp order.display.2.Points.inc.asp order.display.2.Prepay.inc.asp order23.display.3.inc.asp orderhistory.display.inc.asp orderreport.display.inc.asp orderreportRJR.display.inc.asp rmicusage.display.inc.asp usage.display.inc.asp userreport.display.inc.asp userreport2.display.inc.asp layout.display0-1.inc.asp layout.display0-2.inc.asp layout.display1-1.inc.asp layout.display1-2.inc.asp layout.display10-1.inc.asp layout.display10-2.inc.asp layout.display11-1.inc.asp layout.display11-2.inc.asp layout.display12-1.inc.asp layout.display12-2.inc.asp layout.display13-1.inc.asp layout.display13-2.inc.asp layout.display14-1.inc.asp layout.display14-2.inc.asp layout.display15-1.inc.asp layout.display15-2.inc.asp layout.display16-1.inc.asp layout.display16-2.inc.asp layout.display17-1.inc.asp menus-17.code.inc.asp cms.code.sub.inc.asp menus-17.display.css.inc.asp menus-17.display.js.inc.asp layout.display17-2.inc.asp layout.display18-1.inc.asp menus-17.code.inc.asp cms.code.sub.inc.asp layout.display18-2.inc.asp layout.display19-1.inc.asp layout.display19-2.inc.asp layout.display2-1.inc.asp layout.display2-2.inc.asp layout.display20-1.inc.asp layout.display20-2.inc.asp layout.display21-1.inc.asp layout.display21-2.inc.asp layout.display22-1.inc.asp layout.display22-2.inc.asp layout.display23-1.inc.asp layout.display23-2.inc.asp layout.display24-1.inc.asp layout.display24-2.inc.asp layout.display25-1.inc.asp layout.display25-2.inc.asp layout.display26-1.inc.asp layout.display26-2.inc.asp catalog.display.productlist2.inc.asp catalog.display.productlistProduct.inc.asp layout.display27-1.inc.asp layout.display27-2.inc.asp layout.display28-1.inc.asp layout.display28-2.inc.asp layout.display29-1.inc.asp layout.display29-2.inc.asp layout.display3-1.inc.asp layout.display3-2.inc.asp layout.display30-1.inc.asp layout.display30-2.inc.asp layout.display31-1.inc.asp layout.display31-1.code.functions.inc.asp layout.display31-1.code.inc.asp layout.display31-2.inc.asp layout.display32-1.inc.asp layout.display32-2.inc.asp layout.display4-1.inc.asp layout.display4-2.inc.asp layout.display5-1.inc.asp layout.display5-2.inc.asp layout.display6-1.inc.asp layout.display6-2.inc.asp layout.display7-1.inc.asp layout.display7-2.inc.asp layout.display8-1.inc.asp layout.display8-2.inc.asp layout.display9-1.inc.asp layout.display9-2.inc.asp ProductOption2.0.obj.inc.asp ProductTMG2.0.obj.inc.asp variables.inc.asp CartTMG2.0.obj.inc.asp Category2.0.obj.inc.asp CCCharge2.0a.obj.inc.asp cmsForm2.1.obj.inc.asp cmsFormData2.1.obj.inc.asp cmsFormDataElement2.1.obj.inc.asp cmsFormElement2.1.obj.inc.asp cmsFormElementType2.1.obj.inc.asp cmsFormProcessor2.1.obj.inc.asp cmsFormProcessorRole2.1.obj.inc.asp cmsPage2.1.obj.inc.asp cmsParagraph2.1.obj.inc.asp cmsSection2.1.obj.inc.asp Coupon2.1.obj.inc.asp Customer2.0.obj.inc.asp Feature2.0.obj.inc.asp Item2.1.obj.inc.asp ItemLong2.1.obj.inc.asp LSList2.0.obj.inc.asp Object2.0a.obj.inc.asp ObjectRelation2.0.obj.inc.asp StorageBinary2.0.obj.inc.asp StorageDatabase2.0.obj.inc.asp StorageImage2.0.obj.inc.asp StorageIndex2.0.obj.inc.asp StorageString2.0.obj.inc.asp Object2.1.obj.inc.asp Clientscript2.1.obj.inc.asp Color2.1.obj.inc.asp Extension2.1.obj.inc.asp SPD2.1.obj.inc.asp StorageBinary2.0.obj.inc.asp StorageDatabase2.0.obj.inc.asp StorageImage2.0.obj.inc.asp StorageIndex2.0.obj.inc.asp StorageString2.0.obj.inc.asp OrderTMG2.0.obj.inc.asp Price2.1.obj.inc.asp ProductOption2.0.obj.inc.asp ProductTMG2.0.obj.inc.asp Receipt2.0.obj.inc.asp email2.1.obj.inc.asp Shipping2.1.obj.inc.asp Browser2.1.obj.inc.asp Email2.1.obj.inc.asp User2.0.obj.inc.asp Crypt2.1.obj.inc.asp Object2.1.obj.inc.asp Clientscript2.1.obj.inc.asp Color2.1.obj.inc.asp Extension2.1.obj.inc.asp SPD2.1.obj.inc.asp StorageBinary2.0.obj.inc.asp StorageDatabase2.0.obj.inc.asp StorageImage2.0.obj.inc.asp StorageIndex2.0.obj.inc.asp StorageString2.0.obj.inc.asp User2.1.obj.inc.asp Crypt2.1.obj.inc.asp variables.code.constants.inc.asp variables.code.functions.inc.asp variables.code.server.inc.asp variables.code.timecheck.inc.asp