DEV Community

Cover image for Updating A 25-Year-Old Website
Mads Stoumann
Mads Stoumann

Posted on

Updating A 25-Year-Old Website

As frontend developers, we always want to use the latest and the greatest. A lot of the time however, the clients we work for, are dependent on old systems, that would cost a fortune to update. A couple of years ago, I had to work with the code of a 25-year-old website.


But first, a little flashback. Back in 1993, as a 20-year old geek, I was working for a comicbook-shop in Copenhagen, Denmark, called “Fantask”.

Fantask used a database called “Perfect Filer” to handle all customers, products and — most important — subscriptions. Customers could subscribe to all kinds of products: american comics, danish comics, books by specific authors or series etc.

Filer

Released in 1983, “Perfect Filer” was a CLI-based tool, and took up 261kB of HDD-space and a whopping 128kB of RAM! Needless to say, it was very complicated to use with vast amounts of data, and Fantask had a growing customer-base.

Because I had an interest in IT, and had done some “computer work” on Fantask's catalogues, they asked me to create a new, graphical UI for handling customers, products, subscriptions and much more.

Luckily for me, my best friend studied data science, and could help me with database-design and coding - as I knew next to nothing about either!

At that time, “SQL Server” was for OS/2 only, so we picked the brand new “Microsoft Access 1.0”-database, which also had support for VBA: Visual Basic for Applications.

With VBA you could — and still can — build:

  • A database application
  • Custom forms
  • Custom reports
  • Custom navigation

... and pack it like an app, with icon etc.

I cannot remember how many months it took to develop, but … they've been using it ever since! (more on that later)


A couple of years later, a thing called the World Wide Web was suddenly on everybody's lips, so I had to learn another kind of “programming”: HTML.

I created this beautiful website in september 1995:

Fantask First Website

Sorry for hurting your eyes, but that's how most websites looked back then!

In December 1996, Microsoft launched Active Server Pages (today called “Classic ASP”), allowing you to connect databases with websites.

Suddenly, we could connect the Access-database with the website and create an online shop. And, mind you, there were a lot of data:

  • More than 50.000 comics
  • More than 5.000 books
  • More than 5.000 games, figures, films etc.
  • More than 10.000 customers

Shortly thereafter, I left the company to start my own business.
And for the next 21 years, the site looked like this:

FantaskBefore

The search-experince was like … well, 1997, the layout was done with a <table>, and the look-and-feel was not winning any design-awards 😂


During these 21 years they'd asked a lot of companies to help them with a new website … but it was simply too expensive for a small comicbook-shop (20-25.000$+). And “out-of-the-box” shops simply didn't cater for such large amounts of products/data.

Then in 2018, Fantask was on the brink of bankruptcy — and reached out to me for help. They thought a flashy new website could help the store survive. I didn't have much spare-time, but promised to spend all my Sundays for one month to help them.

With a limited timeframe and no budget, I realized the cheapest solution would be to … well, continue using Classic ASP!

For reasons unknown, it's still supported by Microsoft (or = it still works), even though it was replaced by .Net in 2002, and the last stable release is more than 21 years old!

I installed the “Classic ASP Syntaxes and Snippets”-plugin for “VS Code”, traversed my old code (oh, the horror!) — and split it up into:

  • Modules
  • Services
  • Components

I added input sanitation, re-used database-connections, were careful not to overuse the session-objects, and applied some of the “best practices” of the past 20 years.

I added modern semantics, valid- and structures (schema.org) markup, Google Snippets, a mega-menu and a fetch()-based “auto-suggest”:

Mega Menu and Autosuggest

Then I applied all of the “Google Analytics Enhanced Ecommerce”-logic:

  • Product impressions
  • Detail-click
  • Detail-impressions
  • Add-to-basket transaction
  • Remove-from-basket transaction
  • Purchase transaction

… As well as “Google Merchant”- and “Facebook Business”-feeds.
I also removed all sensitive data from the Access-database, since I figured it's probably easier to hack than modern databases.


Recap

The project ended up taking 7 days (and not just the 4 Sundays I'd agreed to), and included:

  • Complete re-write of "backend" code, into: Modules, services and - components
  • Complete re-write of HTML (no <table>-based design!)
  • Complete re-write of CSS
  • Complete re-write of JS
  • Structured, semantic and valid markup
  • Google Search Snippet
  • Google Enhanced Ecommerce integration
  • Google Merchant and Facebook Business integration
  • Structured, measurable goal-friendly checkout-flow
  • Performance optimizations
  • ... and much more!

The website was re-launched in December 2018 — Fantask is still going strong! — and can be visited at fantask.dk (sorry, only in Danish!):

Fantask Website Today


Conclusion

Working with old code is sometimes unavoidable, either because of scope or costs, but it can also teach you a thing ot two.

In this case, the only way I could accomplish the re-write in such a short time was because of the simple and reduced tech stack: HTML, ASP, CSS and JavaScript. No frameworks. No backend-development, since “Classic ASP” is dead-simple, like PHP. Just VS Code and Internet Information Server, with a few tweaks.

But also, and this is perhaps the most important reason, because I could make all decisions myself! No discussions with BE-developers, no Project Manager, no Scrum Master, no JIRA-tickets, no UX-discussions — or designers wanting a 1px box-shadow!

In other words: completely unrealistic in the real world!

But it was fun to do, and while I won't recommend using “Classic ASP” for your next project, I will recommend looking at the tech stack, and see, if anything can be simplified.

Top comments (84)

Collapse
 
grahamthedev profile image
GrahamTheDev

Just shows that we don't need the latest and greatest for everything. New site looks nice, is fast to load, gets to the point and follows a lot of best practices.

Recycling the old bits that still work is 10 times faster than rewriting everything and perhaps this could serve as a warning to the "new and shiny" brigade that you don't need to upgrade everything if it is still fit for purpose.

Collapse
 
madsstoumann profile image
Mads Stoumann

I agree, and I think we often re-invent the wheel in frontend.
The new and shiny is great for developers and the developer-experience, but for end users there's no noticable difference.
A “Product Card” is a “Product Card” for the end user, no matter if it was done in Classic ASP or React ;-)

Collapse
 
hasnaindev profile image
Muhammad Hasnain

One of the best posts I read over dev.to. I was born in 1998, you have more experience than for how long I've been alive. The initial website you created is absolutely beautiful and reminds me of Windows 98.

Also, I love one of your reply, "A “Product Card” is a “Product Card” for the end user." Strive for simplicity, use the bare minimum, make things simple rather than complex. Glad to see an actual senior developer sharing wisdom with us. Thank you!

Collapse
 
madsstoumann profile image
Mads Stoumann

Thank you so much! I'm amazed you know Windows 98, when you were born that year! Until recently, I kept my original Windows 3.1 floppy disks and Windows 95+98 CD-ROM's ...

Collapse
 
aromeropm profile image
aromero-pm

I suspect Muhammad knows Win98 from an engineering-archaeology class... :) Floppy Disks are the stone cuneiform tablets of the Internet.

I have a 23 year old site I need to do some maintenance on or maybe migrate to Wordpress, just for the sake of posterity. It's Classic ASP plus "Windows Script Components" and a little ASP.Net in one or two places. Truly horrorshow. The idjit who wrote the code -- namely, me -- clearly didn't know what he was doing.

Thread Thread
 
madsstoumann profile image
Mads Stoumann

I also thought "who the hell coded this s***" when I looked at my old code!

Thread Thread
 
aromeropm profile image
aromero-pm • Edited

I found a comment in my code that read "This function is unmaintainable garbage" :) which is to say that even when I wrote it, I knew I shouldn't. Believe me, no one else EVER touched this code, so that had to be me.

Thread Thread
 
madsstoumann profile image
Mads Stoumann

😂

Thread Thread
 
hasnaindev profile image
Muhammad Hasnain

In early 2000s computers in my country were very rare and where I lived, there were extremely rare. My dad got us Pentium 3, it was darn expensive. Windows 98 was the first Windows I used.

It was only a few years later we installed Windows XP. Also remember playing Age Of Empires one and two. Good old days. I never used a floppy disk myself but saw my brother used it once. CDs were the norm though.

Thread Thread
 
madsstoumann profile image
Mads Stoumann

Cool! Performance was SO important back then - 2-4 MB websites, as is the norm today, would take minutes to load.

Collapse
 
_joshsommer profile image
Josh Sommer

I've clicked the unicorn badge many times. I have never read an article I've felt is more deserving. Kudos!

Collapse
 
madsstoumann profile image
Mads Stoumann

Wow, thank you very much!

Collapse
 
huncyrus profile image
huncyrus

KISS at finest :)
Thank you the insider info of updating a monolithic dinosaur :) How was the original data connection arranged? like spaghetti code, everything everywhere or was some minimal model files? How long was the original code? Just a few file and few hundred lines?

Collapse
 
madsstoumann profile image
Mads Stoumann • Edited

It was structured, but not how you'd structure it with a bit more experience! The main "default.asp" was a huge Select Case (same as switch in JS), that took a pageType from the url, and returned the function matching that!

Collapse
 
cjsmocjsmo profile image
Charlie J Smotherman

Exactly, if the code compiles, runs, and does it's job, it's good code no matter how old it is.

Good read

Collapse
 
madsstoumann profile image
Mads Stoumann

Thanks!

Collapse
 
ashurali profile image
Ashurali • Edited

Gotta say the new website looks sleak and performs well.
Really hits the point that codes are, at the end, a tool that properly used can always gives you great result.

Problem is, properly using it really takes experience 😅

Collapse
 
madsstoumann profile image
Mads Stoumann

Thank you! And I agree, if you really know HTML, CSS and JS, you can do anything 😁

Collapse
 
phantas0s profile image
Matthieu Cneude

That's a great display of problem solving skills, instead of trying to force the use of the latest trends because it's the answer to every possible problem. Nice!

I'm curious: do you think the dated website was really the cause of their difficulties? Do they know why they could survive and thrive again?

Collapse
 
madsstoumann profile image
Mads Stoumann • Edited

Thank you! Fantask has a store in Copenhagen (actually, it's the worlds oldest existing comicbook store, founded in 1971) - and like other bookstores, they saw a large proportion of their sales switch to online. And then, becuase their online store was dated and malfunctioning, they lost a huge potential ... and saw a decline in revenue, both online and in-store. Since the new website was launched, they've increased their online sales significantly, but having a bookstore nowadays is not a lucrative business.

Collapse
 
daniel15 profile image
Daniel Lo Nigro • Edited

The site looks great!

You should consider using IIS URL Rewrite to remove the .asp from the URLs. It's pretty straightforward to configure. :)

For reasons unknown, it's still supported by Microsoft (or = it still works), even though it was replaced by .Net in 2002, and the last stable release is more than 21 years old!

Surprisingly, it's actually still occasionally getting some very small bug fixes. It's still officially supported by Microsoft until 2025, including any major bug fixes.

Collapse
 
madsstoumann profile image
Mads Stoumann

It's amazing they still maintain these old technologies!

Collapse
 
idosius profile image
Ido Schacham

Thanks for the excellent post and inspiration. Note that you are wrong about one thing - this is possible in the real world!

I used to work as a freelancer without BE developers and project managers, so making smart decisions not to throw everything away but to keep the core and vamp it up is definitely possible in such a constellation.

Such an excellent example could also set a precedence for big companies where there are many stakeholders to reconsider how to go about doing such a project in the real world, so kudos for that.

Collapse
 
madsstoumann profile image
Mads Stoumann

Thanks! I think it's only possible for smaller clients - there are too many stakeholders on larger projects (and companies!)

Collapse
 
jrbirdmanoh profile image
jrbirdmanOH

As a 65-year-old developer who started building sites back in 1992, I concur and often long for the days when things were simpler. Then I go back to writing web apis that use an ORM framework and feed angular components from an MVC controller....and that feeling goes away. :)

Collapse
 
madsstoumann profile image
Mads Stoumann

I mostly work with Vue nowadays. But I also do a lot of "vanilla projects" without build-tools, as it's way faster for me.