|It's been ages since I've provided any type of update on what we actually do in this office of ours.
Mostly fighting with the guys across the hall as to who owns the espresso machine, but that's another story.
The Code Project was not planned or architected or written in the usual "corret" way. It was built bit by bit as time, resources, bandwidth and server power allowed. It was also built on VBScript and ASP so it can (now) be considered antiquated and backwards.
Yet it still works. Quite well, usually.
In June 2000 Microsoft announced .NET and I immediately started rewriting the infrastructure. Partly to take advantage of the promised speed and efficiency, partly to learn the new technology. Unfortunately at the time resources (ie warm bodies in the office) were scarce, the .NET framework wasn't mature (actually, it wasn't even released) and growing and caring for the site became more important than playing with new toys.
Over the next couple of years as .NET 1.0 and then 1.1 were released various incarnations of the underlying Code Project framework were written. Increasing load on the servers and on us personally meant we had to make quick, and sometimes painful decisions as to what we would do. Employ someone for 80K a year to rewrite the infrastructure while I worked on keeping the community growing, the articles published, the ads that keep us alive fresh and exciting, the bills paid and the coffee warm and aromatic? Or just buy a few big whopping servers that could better handle the load?
We chose the latter which meant the site could continue on without interuption and I would be free to make optimisations at a more sane pace. The main infrastructure stayed ASP/VBScript and most of the backend caching, support and advertising system was using the new .NET framework. Yep - we've been .NET for a long time.
However, there comes a point that even the best (or luckiest) organic architecture starts to reveal that it's not up to the task and so last year we finally decided to throw everything away and start fresh. The goal was speed, efficiency, low error count, scalability and extensibility and, #1, more developers understanding the code so that I could have my weekends back.
Dmitry was hired to completely rework everything SQL, and soon after Elina was hired to handle the business and UI layer. Christian Graus then came on board to work on one of the first plug-in modules for the site.
Based on my initial designs, my tales of woe, the constraints we faced and the goals we had for the community we soon had a basic infrastructure built in .NET 2.0 running on SQL Server 2005. Scalable, web farm happy, extendible, solid and way more efficient than the old VBScript code.
For the 6 months since then it's been a matter of going through the site and replicating and improving the functionality. We're almost there with only a couple of modules left to go.
The interesting thing in all this has been the things that have held us up.
But mostly it's been about ensuring the current site gets as much love and attention as possible while devoting as much spare time as possible to the rewrite. A week can go by in which that small 2 hour job falls by the wayside due to demands from the site which can be incredibly frustrating.
- Coding and naming standards have helped enormously, even when they have changed and forced us to take 2 steps back to rework code.
- Moving to a completely new database schema has mean an entire conversion module has been written to ensure not too much breaks.
- Ensuring we take no shortcuts so that it's easy to create a mobile friendly and cross browser friendly site
- Always looking at how a stored procedure, or a constructor, or a caching decision will affect performance
- Always considering the direction we wish to extend the codebase. Have we backed ourselves into any corners
- Code Reviews, FxCop reviews, Unit tests, walk-throughs, and the very worst: really cool new ideas that we must decide whether to implement now or later.
- Synchronising changes to the current ASP site and ensuring they are included in the ASP.NET functionality.
One step at a time.
CodeProject.com : C++ MVP