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